fix delay (#543)

* fix delay ignored

* fix retry delay in ms

* fix retry delay in ms

* do not wait if timeout

* fix flasky test case

* delay to be timespan

* Revert "delay to be timespan"

This reverts commit 3a004b6a6904747fa5475adeadbf6e654082d809.
This commit is contained in:
Boshi Lian
2021-01-08 09:10:55 -08:00
committed by GitHub
parent 0e3cb942d1
commit 97ed40c5a8
2 changed files with 19 additions and 4 deletions

View File

@@ -189,11 +189,11 @@ namespace k8s.LeaderElection
private async Task AcquireAsync(CancellationToken cancellationToken)
{
var delay = (int)config.RetryPeriod.TotalMilliseconds;
for (; ; )
{
try
{
var delay = config.RetryPeriod.Milliseconds;
var acq = TryAcquireOrRenew(cancellationToken);
if (await Task.WhenAny(acq, Task.Delay(delay, cancellationToken))
@@ -203,8 +203,13 @@ namespace k8s.LeaderElection
{
return;
}
// wait RetryPeriod since acq return immediately
await Task.Delay(delay, cancellationToken).ConfigureAwait(false);
}
// else timeout
delay = (int)(delay * JitterFactor);
}
finally

View File

@@ -181,6 +181,9 @@ namespace k8s.Tests.LeaderElection
testLeaderElectionLatch.Wait(TimeSpan.FromSeconds(10));
Assert.Equal(7, electionHistory.Count);
Assert.True(electionHistory.SequenceEqual(
new[]
{
@@ -252,12 +255,19 @@ namespace k8s.Tests.LeaderElection
countdown.Wait(TimeSpan.FromSeconds(10));
Assert.Equal(9, electionHistory.Count);
// TODO flasky
// Assert.Equal(9, electionHistory.Count);
Assert.True(electionHistory.SequenceEqual(new[]
// Assert.True(electionHistory.SequenceEqual(new[]
// {
// "create record", "try update record", "update record", "try update record", "update record",
// "try update record", "try update record", "try update record", "try update record",
// }));
Assert.True(electionHistory.Take(7).SequenceEqual(new[]
{
"create record", "try update record", "update record", "try update record", "update record",
"try update record", "try update record", "try update record", "try update record",
"try update record", "try update record",
}));
Assert.True(leadershipHistory.SequenceEqual(new[] { "get leadership", "start leading", "stop leading" }));