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)