You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by mm...@apache.org on 2018/09/28 22:13:19 UTC
[geode] 01/01: GEODE-5794: fix failing JMXMBeanReconnectDUnitTest
This is an automated email from the ASF dual-hosted git repository.
mmartell pushed a commit to branch feature/GEODE-5794-fix
in repository https://gitbox.apache.org/repos/asf/geode.git
commit 92a02d869b3d02cef3a23caca6b519a3068801ff
Author: Sai Boorlagadda <sa...@gmail.com>
AuthorDate: Fri Sep 28 15:08:10 2018 -0700
GEODE-5794: fix failing JMXMBeanReconnectDUnitTest
Signed-off-by: Jens Deppe <jd...@pivotal.io>
---
.../management/JMXMBeanReconnectDUnitTest.java | 20 +------------
.../apache/geode/test/dunit/rules/MemberVM.java | 34 ++++++++++++++++++++++
2 files changed, 35 insertions(+), 19 deletions(-)
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/management/JMXMBeanReconnectDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/management/JMXMBeanReconnectDUnitTest.java
index b7a5c77..7a11953 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/management/JMXMBeanReconnectDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/management/JMXMBeanReconnectDUnitTest.java
@@ -18,11 +18,9 @@ package org.apache.geode.management;
import static java.util.concurrent.TimeUnit.MINUTES;
import static java.util.concurrent.TimeUnit.SECONDS;
import static java.util.stream.Collectors.toList;
-import static org.apache.geode.internal.lang.SystemUtils.isWindows;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.SoftAssertions.assertSoftly;
import static org.awaitility.Awaitility.waitAtMost;
-import static org.junit.Assume.assumeFalse;
import java.io.IOException;
import java.util.List;
@@ -100,10 +98,6 @@ public class JMXMBeanReconnectDUnitTest {
@Test
public void testLocalBeans_MaintainServerAndCrashLocator() {
- // TODO: Currently failing on windows and causing CI job to hang.
- // TODO: Ignoring these until they are fixed.
- assumeFalse(isWindows());
-
List<String> initialServerBeans = canonicalBeanNamesFor(server1);
locator1.forceDisconnect();
@@ -123,10 +117,6 @@ public class JMXMBeanReconnectDUnitTest {
@Test
public void testLocalBeans_MaintainLocatorAndCrashServer() {
- // TODO: Currently failing on windows and causing CI job to hang.
- // TODO: Ignoring these until they are fixed.
- assumeFalse(isWindows());
-
List<String> initialLocatorBeans = canonicalBeanNamesFor(locator1);
server1.forceDisconnect();
@@ -147,10 +137,6 @@ public class JMXMBeanReconnectDUnitTest {
@Test
public void testRemoteBeanKnowledge_MaintainServerAndCrashLocator() throws IOException {
- // TODO: Currently failing on windows and causing CI job to hang.
- // TODO: Ignoring these until they are fixed.
- assumeFalse(isWindows());
-
List<ObjectName> initialLocator1GemfireBeans =
getFederatedGemfireBeansFrom(locator1);
List<ObjectName> initialLocator2GemfireBeans =
@@ -189,10 +175,6 @@ public class JMXMBeanReconnectDUnitTest {
@Test
public void testRemoteBeanKnowledge_MaintainLocatorAndCrashServer()
throws IOException {
- // TODO: Currently failing on windows and causing CI job to hang.
- // TODO: Ignoring these until they are fixed.
- assumeFalse(isWindows());
-
List<ObjectName> initialLocator1GemfireBeans =
getFederatedGemfireBeansFrom(locator1);
List<ObjectName> initialLocator2GemfireBeans =
@@ -201,7 +183,7 @@ public class JMXMBeanReconnectDUnitTest {
assertThat(initialLocator1GemfireBeans)
.containsExactlyElementsOf(initialLocator2GemfireBeans);
- server1.forceDisconnect();
+ server1.forceDisconnect(2000);
List<ObjectName> intermediateLocator1GemfireBeans =
getFederatedGemfireBeansFrom(locator1);
diff --git a/geode-dunit/src/main/java/org/apache/geode/test/dunit/rules/MemberVM.java b/geode-dunit/src/main/java/org/apache/geode/test/dunit/rules/MemberVM.java
index 1fe04c8..06e44e4 100644
--- a/geode-dunit/src/main/java/org/apache/geode/test/dunit/rules/MemberVM.java
+++ b/geode-dunit/src/main/java/org/apache/geode/test/dunit/rules/MemberVM.java
@@ -16,6 +16,7 @@ package org.apache.geode.test.dunit.rules;
import static java.util.concurrent.TimeUnit.SECONDS;
+import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import org.apache.logging.log4j.Logger;
@@ -88,6 +89,39 @@ public class MemberVM extends VMProvider implements Member {
vm.invoke("force disconnect", () -> ClusterStartupRule.memberStarter.forceDisconnectMember());
}
+ /**
+ * This disconnects the distributed system of the member. The reconnect thread will wait for at
+ * least the given delay before completing the attempt.
+ *
+ * @param delayReconnecting minimum delay in milliseconds before reconnect can complete.
+ */
+ public void forceDisconnect(final long delayReconnecting) {
+ vm.invoke(() -> {
+ // The reconnect thread can yield the CPU before allowing the listeners to be invoked. The
+ // latch ensures that the listener is guaranteed to be called before this method returns thus
+ // ensuring that reconnection has started but not yet completed.
+ CountDownLatch latch = new CountDownLatch(1);
+ InternalDistributedSystem.addReconnectListener(
+ new InternalDistributedSystem.ReconnectListener() {
+ @Override
+ public void reconnecting(InternalDistributedSystem oldSystem) {
+ try {
+ Thread.sleep(delayReconnecting);
+ latch.countDown();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public void onReconnect(InternalDistributedSystem oldSystem,
+ InternalDistributedSystem newSystem) {}
+ });
+ ClusterStartupRule.memberStarter.forceDisconnectMember();
+ latch.await();
+ });
+ }
+
public void waitTilLocatorFullyReconnected() {
vm.invoke(() -> {
try {