You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by br...@apache.org on 2020/10/16 19:30:35 UTC
[cassandra] branch trunk updated: use Long.MIN_VALUE in
NoSpamLogStatement to avoid missing first message
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 <ad...@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-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org