This is an automated email from the ASF dual-hosted git repository. brandonwilliams pushed a commit to branch trunk in repository https://gitbox.apache.org/repos/asf/cassandra.git
The following commit(s) were added to refs/heads/trunk by this push: new 0fe07f9 use Long.MIN_VALUE in NoSpamLogStatement to avoid missing first message 0fe07f9 is described below commit 0fe07f91da20cee0ec948909c0d53c9103cb69e2 Author: Adam Holmberg <adam.holmb...@datastax.com> AuthorDate: Thu Oct 15 16:00:22 2020 -0500 use Long.MIN_VALUE in NoSpamLogStatement to avoid missing first message Patch by Adam Holmberg, reviwed by Berenguer Blasi and brandonwilliams for CASSANDRA-15996 --- .../org/apache/cassandra/utils/NoSpamLogger.java | 3 +- .../apache/cassandra/utils/NoSpamLoggerTest.java | 46 +++++++++++++++++++--- 2 files changed, 43 insertions(+), 6 deletions(-) diff --git a/src/java/org/apache/cassandra/utils/NoSpamLogger.java b/src/java/org/apache/cassandra/utils/NoSpamLogger.java index bee8c06..ac9168a 100644 --- a/src/java/org/apache/cassandra/utils/NoSpamLogger.java +++ b/src/java/org/apache/cassandra/utils/NoSpamLogger.java @@ -71,6 +71,7 @@ public class NoSpamLogger public NoSpamLogStatement(String statement, long minIntervalNanos) { + super(Long.MIN_VALUE); this.statement = statement; this.minIntervalNanos = minIntervalNanos; } @@ -78,7 +79,7 @@ public class NoSpamLogger private boolean shouldLog(long nowNanos) { long expected = get(); - return nowNanos - expected >= minIntervalNanos && compareAndSet(expected, nowNanos); + return nowNanos >= expected && compareAndSet(expected, nowNanos + minIntervalNanos); } public boolean log(Level l, long nowNanos, Object... objects) diff --git a/test/unit/org/apache/cassandra/utils/NoSpamLoggerTest.java b/test/unit/org/apache/cassandra/utils/NoSpamLoggerTest.java index fe5d58e..58e6ea0 100644 --- a/test/unit/org/apache/cassandra/utils/NoSpamLoggerTest.java +++ b/test/unit/org/apache/cassandra/utils/NoSpamLoggerTest.java @@ -157,17 +157,53 @@ public class NoSpamLoggerTest assertLoggedSizes(1, 0, 0); NoSpamLogStatement statement = logger.getStatement("swizzle2{}", 10, TimeUnit.NANOSECONDS); - assertFalse(statement.warn(param)); - //now is 5 so it won't log - assertLoggedSizes(1, 0, 0); + assertTrue(statement.warn(param)); // since a statement of this key hasn't logged yet + assertLoggedSizes(1, 1, 0); now = 10; - assertTrue(statement.warn(param)); + assertFalse(statement.warn(param)); // we logged it above assertLoggedSizes(1, 1, 0); + now = 15; + assertTrue(statement.warn(param)); // First log was at 5, now past the interval + assertLoggedSizes(1, 2, 0); } - @Test + @Test + public void testNegativeNowNanos() throws Exception + { + now = -6; + NoSpamLogger logger = NoSpamLogger.getLogger( mock, 5, TimeUnit.NANOSECONDS); + + assertTrue(logger.info(statement, param)); + assertFalse(logger.info(statement, param)); + assertFalse(logger.warn(statement, param)); + assertFalse(logger.error(statement, param)); + + assertLoggedSizes(1, 0, 0); + + now = -2; + assertFalse(logger.error(statement, param)); + assertLoggedSizes(1, 0, 0); + + now = -1; + assertTrue(logger.error(statement, param)); + assertLoggedSizes(1, 0, 1); + + now = 0; + assertFalse(logger.error(statement, param)); + assertLoggedSizes(1, 0, 1); + + now = 3; + assertFalse(logger.error(statement, param)); + assertLoggedSizes(1, 0, 1); + + now = 4; + assertTrue(logger.info(statement, param)); + assertLoggedSizes(2, 0, 1); + } + + @Test public void testNoSpamLoggerStatementDirect() throws Exception { NoSpamLogger.NoSpamLogStatement nospam = NoSpamLogger.getStatement( mock, statement, 5, TimeUnit.NANOSECONDS); --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org