Skip to content

Commit 5c2f86c

Browse files
authored
Apply the same endpoint filtering the min and max timeout-expiry-times (#113) (#114)
(cherry picked from commit e4ecf31)
1 parent 91bd8d3 commit 5c2f86c

6 files changed

Lines changed: 61 additions & 14 deletions

File tree

src/TimeoutMigrationTool.Raven.IntegrationTests/IRavenTestSuite.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,6 @@ public interface IRavenTestSuite
2424
Task TeardownDatabase();
2525
Task CreateLegacyTimeoutManagerIndex(bool waitForIndexToBeUpToDate);
2626
Task EnsureIndexIsNotStale();
27-
Task InitTimeouts(int nrOfTimeouts, string endpointName, int startFromId);
27+
Task<InitiTimeoutsResult> InitTimeouts(int nrOfTimeouts, string endpointName, int startFromId);
2828
}
2929
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
namespace TimeoutMigrationTool.Raven.IntegrationTests
2+
{
3+
using System;
4+
5+
public class InitiTimeoutsResult
6+
{
7+
public DateTime ShortestTimeout { get; set; }
8+
public DateTime LongestTimeout { get; set; }
9+
}
10+
}

src/TimeoutMigrationTool.Raven.IntegrationTests/Raven3/Raven3TestSuite.cs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public string ServerName
2323
{
2424
get { return serverName; }
2525
}
26+
static Random random = new Random();
2627

2728
public async Task SetupDatabase()
2829
{
@@ -67,9 +68,13 @@ public async Task InitTimeouts(int nrOfTimeouts)
6768
}
6869
}
6970

70-
public async Task InitTimeouts(int nrOfTimeouts, string endpointName, int startFromId)
71+
public async Task<InitiTimeoutsResult> InitTimeouts(int nrOfTimeouts, string endpointName, int startFromId)
7172
{
7273
var timeoutsPrefix = "TimeoutDatas";
74+
var shortestTimeout = DateTime.MaxValue;
75+
var longestTimeout = DateTime.MinValue;
76+
var daysToTrigger = random.Next(2, 60); // randomize the Time property
77+
7378
for (var i = 0; i < nrOfTimeouts; i++)
7479
{
7580
var insertTimeoutUrl = $"{serverName}/databases/{DatabaseName}/docs/{timeoutsPrefix}/{startFromId +i}";
@@ -81,7 +86,7 @@ public async Task InitTimeouts(int nrOfTimeouts, string endpointName, int startF
8186
Destination = "WeDontCare.ThisShouldBeIgnored.BecauseItsJustForRouting",
8287
SagaId = Guid.NewGuid(),
8388
OwningTimeoutManager = endpointName,
84-
Time = i < nrOfTimeouts / 2 ? DateTime.Now.AddDays(7) : DateTime.Now.AddDays(14),
89+
Time = DateTime.Now.AddDays(daysToTrigger),
8590
Headers = new Dictionary<string, string>(),
8691
State = Encoding.ASCII.GetBytes("This is my state")
8792
};
@@ -91,7 +96,16 @@ public async Task InitTimeouts(int nrOfTimeouts, string endpointName, int startF
9196

9297
var result = await httpClient.PutAsync(insertTimeoutUrl, httpContent);
9398
Assert.That(result.StatusCode, Is.EqualTo(HttpStatusCode.Created));
99+
if (shortestTimeout > timeoutData.Time) shortestTimeout = timeoutData.Time;
100+
if (longestTimeout < timeoutData.Time) longestTimeout = timeoutData.Time;
94101
}
102+
103+
return new InitiTimeoutsResult
104+
{
105+
ShortestTimeout = shortestTimeout,
106+
LongestTimeout = longestTimeout
107+
};
108+
95109
}
96110

97111
public async Task<List<RavenBatch>> SetupExistingBatchInfoInDatabase()

src/TimeoutMigrationTool.Raven.IntegrationTests/Raven4/Raven4TestSuite.cs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ class Raven4TestSuite : IRavenTestSuite
1919
{
2020
public ICanTalkToRavenVersion RavenAdapter => new Raven4Adapter(ServerName, DatabaseName);
2121
public ILogger Logger => new ConsoleLogger(false);
22+
static Random random = new Random();
2223

2324
public string ServerName
2425
{
@@ -81,9 +82,13 @@ public async Task InitTimeouts(int nrOfTimeouts)
8182
}
8283
}
8384

84-
public async Task InitTimeouts(int nrOfTimeouts, string endpointName, int startFromId)
85+
public async Task<InitiTimeoutsResult> InitTimeouts(int nrOfTimeouts, string endpointName, int startFromId)
8586
{
8687
var timeoutsPrefix = "TimeoutDatas";
88+
var shortestTimeout = DateTime.MaxValue;
89+
var longestTimeout = DateTime.MinValue;
90+
var daysToTrigger = random.Next(2, 60); // randomize the Time property
91+
8792
for (var i = 0; i < nrOfTimeouts; i++)
8893
{
8994
var insertTimeoutUrl = $"{ServerName}/databases/{DatabaseName}/docs?id={timeoutsPrefix}/{startFromId + i}";
@@ -94,7 +99,7 @@ public async Task InitTimeouts(int nrOfTimeouts, string endpointName, int startF
9499
Destination = "WeDontCare.ThisShouldBeIgnored.BecauseItsJustForRouting",
95100
SagaId = Guid.NewGuid(),
96101
OwningTimeoutManager = endpointName,
97-
Time = i < nrOfTimeouts / 2 ? DateTime.Now.AddDays(7) : DateTime.Now.AddDays(14),
102+
Time = DateTime.Now.AddDays(daysToTrigger),
98103
Headers = new Dictionary<string, string>(),
99104
State = Encoding.ASCII.GetBytes("This is my state")
100105
};
@@ -104,7 +109,15 @@ public async Task InitTimeouts(int nrOfTimeouts, string endpointName, int startF
104109

105110
var result = await httpClient.PutAsync(insertTimeoutUrl, httpContent);
106111
Assert.That(result.StatusCode, Is.EqualTo(HttpStatusCode.Created));
112+
if (shortestTimeout > timeoutData.Time) shortestTimeout = timeoutData.Time;
113+
if (longestTimeout < timeoutData.Time) longestTimeout = timeoutData.Time;
107114
}
115+
116+
return new InitiTimeoutsResult
117+
{
118+
ShortestTimeout = shortestTimeout,
119+
LongestTimeout = longestTimeout
120+
};
108121
}
109122

110123
public RavenToolState SetupToolState(DateTime cutoffTime)

src/TimeoutMigrationTool.Raven.IntegrationTests/RavenListEndpoints.cs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,20 +43,26 @@ public async Task WhenThereAreNoTimeoutsListEndpointsReturnsAnEmptyList()
4343
[Test]
4444
public async Task WhenThereTimeoutsListEndpointsReturnsEndpointsList()
4545
{
46-
await testSuite.InitTimeouts(nrOfTimeouts, "EndpointA", 0);
47-
await testSuite.InitTimeouts(500, "EndpointB", nrOfTimeouts);
46+
var endpointATimes = await testSuite.InitTimeouts(nrOfTimeouts, "EndpointA", 0);
47+
var endpointBTimes = await testSuite.InitTimeouts(500, "EndpointB", nrOfTimeouts);
4848

4949
var sut = new RavenDBTimeoutStorage(testSuite.Logger,testSuite.ServerName, testSuite.DatabaseName, "TimeoutDatas", testSuite.RavenVersion, false);
5050
var endpoints = await sut.ListEndpoints(DateTime.Now);
5151

5252
Assert.IsNotNull(endpoints);
5353
Assert.That(endpoints.Count, Is.EqualTo(2));
54+
5455
var endpointA = endpoints.FirstOrDefault(x => x.EndpointName == "EndpointA");
55-
var endpointB = endpoints.FirstOrDefault(x => x.EndpointName == "EndpointB");
5656
Assert.IsNotNull(endpointA);
5757
Assert.That(endpointA.NrOfTimeouts, Is.EqualTo(nrOfTimeouts));
58+
Assert.That(endpointA.ShortestTimeout, Is.EqualTo(endpointATimes.ShortestTimeout));
59+
Assert.That(endpointA.LongestTimeout, Is.EqualTo(endpointATimes.LongestTimeout));
60+
61+
var endpointB = endpoints.FirstOrDefault(x => x.EndpointName == "EndpointB");
5862
Assert.IsNotNull(endpointB);
5963
Assert.That(endpointB.NrOfTimeouts, Is.EqualTo(500));
64+
Assert.That(endpointB.ShortestTimeout, Is.EqualTo(endpointBTimes.ShortestTimeout));
65+
Assert.That(endpointB.LongestTimeout, Is.EqualTo(endpointBTimes.LongestTimeout));
6066
}
6167

6268
[Test]

src/TimeoutMigrationTool/RavenDB/RavenDBTimeoutStorage.cs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -151,13 +151,17 @@ static void ProcessTimeoutsIntoEndpointsFound(List<TimeoutData> timeouts, Dictio
151151
var endpointsFetched = eligibleTimeouts.GroupBy(
152152
key => key.OwningTimeoutManager.Replace(RavenConstants.MigrationDonePrefix, "").Replace(RavenConstants.MigrationOngoingPrefix, ""),
153153
elements => elements,
154-
(endpointName, destinationTimeouts) => new EndpointInfo
154+
(endpointName, destinationTimeouts) =>
155155
{
156-
EndpointName = endpointName,
157-
NrOfTimeouts = eligibleTimeouts.Count(x => x.OwningTimeoutManager.Replace(RavenConstants.MigrationDonePrefix, "").Replace(RavenConstants.MigrationOngoingPrefix, "") == endpointName),
158-
ShortestTimeout = eligibleTimeouts.Min(x => x.Time),
159-
LongestTimeout = eligibleTimeouts.Max(x => x.Time),
160-
Destinations = eligibleTimeouts.GroupBy(x => x.Destination).Select(g => g.Key).ToList()
156+
var endpointTimeouts = eligibleTimeouts.Where(x => x.OwningTimeoutManager.Replace(RavenConstants.MigrationDonePrefix, "").Replace(RavenConstants.MigrationOngoingPrefix, "") == endpointName).ToList();
157+
return new EndpointInfo
158+
{
159+
EndpointName = endpointName,
160+
NrOfTimeouts = endpointTimeouts.Count(),
161+
ShortestTimeout = endpointTimeouts.Min(x => x.Time),
162+
LongestTimeout = endpointTimeouts.Max(x => x.Time),
163+
Destinations = eligibleTimeouts.GroupBy(x => x.Destination).Select(g => g.Key).ToList()
164+
};
161165
}).ToList();
162166

163167
endpointsFetched.ForEach(ep =>

0 commit comments

Comments
 (0)