You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@geode.apache.org by "xiaojian zhou (JIRA)" <ji...@apache.org> on 2018/03/16 07:02:00 UTC

[jira] [Created] (GEODE-4868) when member deposed primary buckets, it did not decrease the queue size

xiaojian zhou created GEODE-4868:
------------------------------------

             Summary: when member deposed primary buckets, it did not decrease the queue size
                 Key: GEODE-4868
                 URL: https://issues.apache.org/jira/browse/GEODE-4868
             Project: Geode
          Issue Type: Bug
          Components: wan
            Reporter: xiaojian zhou


{noformat}
It can use following test code to reproduce the issue:

diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/wan/AsyncEventQueueTestBase.java b/geode-core/src/test/java/org/apache/geode/internal/cache/wan/AsyncEventQueueTestBase.java

index 545d0cac4..fbc0dc015 100644

--- a/geode-core/src/test/java/org/apache/geode/internal/cache/wan/AsyncEventQueueTestBase.java

+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/wan/AsyncEventQueueTestBase.java

@@ -717,6 +717,10 @@ public class AsyncEventQueueTestBase extends JUnit4DistributedTestCase {

       }

     }

     final AsyncEventQueueStats statistics = ((AsyncEventQueueImpl) queue).getStatistics();

+    Awaitility.await().atMost(60, TimeUnit.SECONDS)

+    .until(() -> assertEquals("Expected queue entries: " + queueSize

+        + " but actual entries: " + statistics.getEventQueueSize(), queueSize,

+        statistics.getEventQueueSize()));

     assertEquals(queueSize, statistics.getEventQueueSize());

     assertEquals(eventsReceived, statistics.getEventsReceived());

diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/wan/asyncqueue/AsyncEventListenerDUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/wan/asyncqueue/AsyncEventListenerDUnitTest.java

index 465f35a87..058bf19cc 100644

--- a/geode-core/src/test/java/org/apache/geode/internal/cache/wan/asyncqueue/AsyncEventListenerDUnitTest.java

+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/wan/asyncqueue/AsyncEventListenerDUnitTest.java

@@ -1519,6 +1519,11 @@ public class AsyncEventListenerDUnitTest extends AsyncEventQueueTestBase {

         () -> AsyncEventQueueTestBase.getAllPrimaryBucketsOnTheNode(getTestMethodName() + "_PR"));

 

     LogWriterUtils.getLogWriter().info("Primary buckets on vm2: " + primaryBucketsvm2);

+    

+    // before shutdown vm2, both vm1 and vm2 should have 40 events in primary queue

+    vm1.invoke(()->AsyncEventQueueTestBase.checkAsyncEventQueueStats("ln", 40,

80, 80, 0));

+    vm2.invoke(()->AsyncEventQueueTestBase.checkAsyncEventQueueStats("ln", 40, 80, 80, 0));

+    

     // ---------------------------- Kill vm2 --------------------------

     vm2.invoke(() -> AsyncEventQueueTestBase.killSender());

     // ----------------------------------------------------------------

@@ -1527,15 +1532,26 @@ public class AsyncEventListenerDUnitTest extends AsyncEventQueueTestBase {

     vm3.invoke(createCacheRunnable(lnPort));

     vm3.invoke(() -> AsyncEventQueueTestBase.createAsyncEventQueueWithListener2("ln", true, 100, 5,

         false, null));

+    // vm3 will move some primary buckets from vm1, but vm1's primary queue size did not reduce

+    vm3.invoke(pauseAsyncEventQueueRunnable());

     vm3.invoke(() -> AsyncEventQueueTestBase.createPRWithRedundantCopyWithAsyncEventQueue(

         getTestMethodName() + "_PR", "ln", isOffHeap()));

-

+    

     // ------------------------------------------------------------------

     String regionName = getTestMethodName() + "_PR";

     Set<Integer> primaryBucketsvm3 = (Set<Integer>) vm3

         .invoke(() -> AsyncEventQueueTestBase.getAllPrimaryBucketsOnTheNode(regionName));

+    LogWriterUtils.getLogWriter().info("Primary buckets on vm3: " + primaryBucketsvm3);

+    Set<Integer> primaryBucketsvm1 = (Set<Integer>) vm1.invoke(

+            () -> AsyncEventQueueTestBase.getAllPrimaryBucketsOnTheNode(getTestMethodName() + "_PR"));

+    LogWriterUtils.getLogWriter().info("After shutdown vm2, started vm3, Primary buckets on vm1: " + primaryBucketsvm1);

 

+//    vm1.invoke(()->AsyncEventQueueTestBase.checkAsyncEventQueueStats("ln", 80, 80, 80, 0));

+    vm1.invoke(()->AsyncEventQueueTestBase.checkAsyncEventQueueStats("ln", 40, 80, 80, 0));

+    vm3.invoke(()->AsyncEventQueueTestBase.checkAsyncEventQueueStats("ln", 40, 0, 0, 0));

+

+    vm3.invoke(() -> AsyncEventQueueTestBase.resumeAsyncEventQueue("ln"));

     vm1.invoke(() -> AsyncEventQueueTestBase.resumeAsyncEventQueue("ln"));

 

     vm1.invoke(() -> AsyncEventQueueTestBase.waitForAsyncQueueToGetEmpty("ln"))


The root cause is:
when depose primary, it only check if bucket is a brq for data region. {noformat}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)