You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ad...@apache.org on 2021/04/20 17:56:10 UTC

[cassandra] branch cassandra-3.11 updated: Fix flaky MockMessagingServiceTest

This is an automated email from the ASF dual-hosted git repository.

adelapena pushed a commit to branch cassandra-3.11
in repository https://gitbox.apache.org/repos/asf/cassandra.git


The following commit(s) were added to refs/heads/cassandra-3.11 by this push:
     new 60cf948  Fix flaky MockMessagingServiceTest
60cf948 is described below

commit 60cf948f8bfdc23e1f718967fdd365fc3da7919d
Author: Andrés de la Peña <a....@gmail.com>
AuthorDate: Tue Apr 20 18:46:55 2021 +0100

    Fix flaky MockMessagingServiceTest
    
    patch by Andrés de la Peña; reviewed by Benjamin Lerer for CASSANDRA-16607
---
 .../org/apache/cassandra/gms/ShadowRoundTest.java    |  6 +++---
 .../cassandra/net/MockMessagingServiceTest.java      |  5 +++--
 .../org/apache/cassandra/net/MockMessagingSpy.java   | 20 +++++++++++++++-----
 3 files changed, 21 insertions(+), 10 deletions(-)

diff --git a/test/unit/org/apache/cassandra/gms/ShadowRoundTest.java b/test/unit/org/apache/cassandra/gms/ShadowRoundTest.java
index f8cc49c..bc18813 100644
--- a/test/unit/org/apache/cassandra/gms/ShadowRoundTest.java
+++ b/test/unit/org/apache/cassandra/gms/ShadowRoundTest.java
@@ -107,10 +107,10 @@ public class ShadowRoundTest
         }
 
         // we expect one SYN for each seed during shadow round + additional SYNs after gossiper has been enabled
-        assertTrue(spySyn.messagesIntercepted > noOfSeeds);
+        assertTrue(spySyn.messagesIntercepted() > noOfSeeds);
 
         // we don't expect to emit any GOSSIP_DIGEST_ACK2 or MIGRATION_REQUEST messages
-        assertEquals(0, spyAck2.messagesIntercepted);
-        assertEquals(0, spyMigrationReq.messagesIntercepted);
+        assertEquals(0, spyAck2.messagesIntercepted());
+        assertEquals(0, spyMigrationReq.messagesIntercepted());
     }
 }
diff --git a/test/unit/org/apache/cassandra/net/MockMessagingServiceTest.java b/test/unit/org/apache/cassandra/net/MockMessagingServiceTest.java
index 3f6564e..ab97aaa 100644
--- a/test/unit/org/apache/cassandra/net/MockMessagingServiceTest.java
+++ b/test/unit/org/apache/cassandra/net/MockMessagingServiceTest.java
@@ -25,6 +25,7 @@ import org.junit.BeforeClass;
 import org.junit.Test;
 
 import org.apache.cassandra.SchemaLoader;
+import org.apache.cassandra.Util;
 import org.apache.cassandra.exceptions.ConfigurationException;
 import org.apache.cassandra.gms.EchoMessage;
 import org.apache.cassandra.service.StorageService;
@@ -86,10 +87,10 @@ public class MockMessagingServiceTest
 
         // we must have intercepted the outgoing message at this point
         MessageOut<?> msg = spy.captureMessageOut().get();
-        assertEquals(1, spy.messagesIntercepted);
+        assertEquals(1, spy.messagesIntercepted());
         assertTrue(msg == echoMessageOut);
 
         // and return a mocked response
-        assertEquals(1, spy.mockedMessageResponses);
+        Util.spinAssertEquals(1, spy::mockedMessageResponses, 60);
     }
 }
diff --git a/test/unit/org/apache/cassandra/net/MockMessagingSpy.java b/test/unit/org/apache/cassandra/net/MockMessagingSpy.java
index 80bdb39..2219c5a 100644
--- a/test/unit/org/apache/cassandra/net/MockMessagingSpy.java
+++ b/test/unit/org/apache/cassandra/net/MockMessagingSpy.java
@@ -24,6 +24,7 @@ import java.util.concurrent.Executor;
 import java.util.concurrent.Executors;
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import com.google.common.util.concurrent.AbstractFuture;
 import com.google.common.util.concurrent.Futures;
@@ -40,8 +41,8 @@ public class MockMessagingSpy
 {
     private static final Logger logger = LoggerFactory.getLogger(MockMessagingSpy.class);
 
-    public int messagesIntercepted = 0;
-    public int mockedMessageResponses = 0;
+    private final AtomicInteger messagesIntercepted = new AtomicInteger();
+    private final AtomicInteger mockedMessageResponses = new AtomicInteger();
 
     private final BlockingQueue<MessageOut<?>> interceptedMessages = new LinkedBlockingQueue<>();
     private final BlockingQueue<MessageIn<?>> deliveredResponses = new LinkedBlockingQueue<>();
@@ -130,21 +131,30 @@ public class MockMessagingSpy
         return ret;
     }
 
+    public int messagesIntercepted()
+    {
+        return messagesIntercepted.get();
+    }
+
+    public int mockedMessageResponses()
+    {
+        return mockedMessageResponses.get();
+    }
+
     void matchingMessage(MessageOut<?> message)
     {
-        messagesIntercepted++;
+        messagesIntercepted.incrementAndGet();
         logger.trace("Received matching message: {}", message);
         interceptedMessages.add(message);
     }
 
     void matchingResponse(MessageIn<?> response)
     {
-        mockedMessageResponses++;
+        mockedMessageResponses.incrementAndGet();
         logger.trace("Responding to intercepted message: {}", response);
         deliveredResponses.add(response);
     }
 
-
     private static class CapturedResultsFuture<T> extends AbstractFuture<List<T>> implements Runnable
     {
         private final int waitForResults;

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org