fix bug: throttledRateLimiter is not once per minute, but five times (#7156)

This commit is contained in:
tianlan xu 2025-03-04 07:01:53 +08:00 committed by GitHub
parent dc46ccd2c9
commit 16f3637b0b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 39 additions and 1 deletions

View File

@ -41,7 +41,8 @@ public class ThrottlingLogger {
this.fastRateLimiter =
new RateLimiter(RATE_LIMIT / rateTimeUnit.toSeconds(1), RATE_LIMIT, clock);
this.throttledRateLimiter =
new RateLimiter(RATE_LIMIT / rateTimeUnit.toSeconds(1), THROTTLED_RATE_LIMIT, clock);
new RateLimiter(
THROTTLED_RATE_LIMIT / rateTimeUnit.toSeconds(1), THROTTLED_RATE_LIMIT, clock);
}
/** Log a message at the given level. */

View File

@ -144,4 +144,41 @@ class ThrottlingLoggerTest {
assertThat(logs.getEvents()).hasSize(9);
assertThat(logs.getEvents().get(8).getMessage()).isEqualTo("oh no!");
}
@Test
void allowOnlyOneLogPerMinuteAfterSuppression() {
TestClock clock = TestClock.create();
ThrottlingLogger logger = new ThrottlingLogger(realLogger, clock);
logger.log(Level.WARNING, "oh no!");
logger.log(Level.WARNING, "oh no!");
logger.log(Level.WARNING, "oh no!");
logger.log(Level.WARNING, "oh no!");
logger.log(Level.WARNING, "oh no!");
logger.log(Level.WARNING, "oh no I should trigger suppression!");
logger.log(Level.WARNING, "oh no I should be suppressed!");
assertThat(logs.getEvents()).hasSize(7);
clock.advance(Duration.ofMillis(12_001));
logger.log(Level.WARNING, "suppression 1");
clock.advance(Duration.ofMillis(12_001));
logger.log(Level.WARNING, "suppression 2");
clock.advance(Duration.ofMillis(12_001));
logger.log(Level.WARNING, "suppression 3");
clock.advance(Duration.ofMillis(12_001));
logger.log(Level.WARNING, "suppression 4");
clock.advance(Duration.ofMillis(12_001));
logger.log(Level.WARNING, "allowed 1");
logs.assertDoesNotContain("suppression 1");
logs.assertDoesNotContain("suppression 2");
logs.assertDoesNotContain("suppression 3");
logs.assertDoesNotContain("suppression 4");
logs.assertContains("allowed 1");
assertThat(logs.getEvents()).hasSize(8);
assertThat(logs.getEvents().get(7).getMessage()).isEqualTo("allowed 1");
}
}