diff --git a/slo/src/Internal/SloContext.cs b/slo/src/Internal/SloContext.cs index 74c253a..1e12d0f 100644 --- a/slo/src/Internal/SloContext.cs +++ b/slo/src/Internal/SloContext.cs @@ -125,8 +125,8 @@ public async Task Run(RunConfig runConfig) var errorsGauge = metricFactory.CreateGauge("errors", "amount of errors", new[] { "class", "in" }); - var writeLimiter = Policy.RateLimit(runConfig.WriteRps, TimeSpan.FromSeconds(1)); - var readLimiter = Policy.RateLimit(runConfig.ReadRps, TimeSpan.FromSeconds(1)); + var writeLimiter = Policy.RateLimit(runConfig.WriteRps, TimeSpan.FromSeconds(1), runConfig.WriteRps); + var readLimiter = Policy.RateLimit(runConfig.ReadRps, TimeSpan.FromSeconds(1), runConfig.ReadRps); var cancellationTokenSource = new CancellationTokenSource(); cancellationTokenSource.CancelAfter(TimeSpan.FromSeconds(runConfig.ShutdownTime)); @@ -152,7 +152,7 @@ Task ShootingTask(RateLimitPolicy rateLimitPolicy, string shootingName, var tasks = new List(); long activeTasks = 0; - + while (!cancellationTokenSource.Token.IsCancellationRequested) { try @@ -161,7 +161,7 @@ Task ShootingTask(RateLimitPolicy rateLimitPolicy, string shootingName, { // ReSharper disable once AccessToModifiedClosure Interlocked.Increment(ref activeTasks); - + var sw = Stopwatch.StartNew(); var (attempts, statusCode) = await action(client, runConfig, errorsGauge); string label; @@ -184,11 +184,12 @@ Task ShootingTask(RateLimitPolicy rateLimitPolicy, string shootingName, latencySummary.WithLabels(label).Observe(sw.ElapsedMilliseconds); })); } - catch (RateLimitRejectedException) + catch (RateLimitRejectedException e) { - _logger.LogInformation("Waiting {ShootingName} task, count active tasks: {}", shootingName, Interlocked.Read(ref activeTasks)); + _logger.LogInformation(e, "Waiting {ShootingName} task, count active tasks: {}", shootingName, + Interlocked.Read(ref activeTasks)); - await Task.Delay(990, cancellationTokenSource.Token); + await Task.Delay(e.RetryAfter, cancellationTokenSource.Token); } }