Support sub-millisecond permit regeneration durations in rate limiters

This commit is contained in:
Jon Chambers
2023-07-14 14:38:07 -04:00
committed by Jon Chambers
parent 82ed783a2d
commit e38a713ccc
3 changed files with 11 additions and 4 deletions

View File

@@ -11,11 +11,16 @@ import java.time.Duration;
public record RateLimiterConfig(int bucketSize, Duration permitRegenerationDuration) {
public double leakRatePerMillis() {
return 1.0 / permitRegenerationDuration.toMillis();
return 1.0 / (permitRegenerationDuration.toNanos() / 1e6);
}
@AssertTrue
public boolean hasPositiveRegenerationRate() {
return permitRegenerationDuration.toMillis() > 0;
try {
return permitRegenerationDuration.toNanos() > 0;
} catch (final ArithmeticException e) {
// The duration was too large to fit in a long, so it's definitely positive
return true;
}
}
}