You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ec...@apache.org on 2021/03/12 21:46:52 UTC
[geode] branch support/1.14 updated: GEODE-9000: Added logic to
avoid NPE during processing Network Partition (#6129) (#6130)
This is an automated email from the ASF dual-hosted git repository.
echobravo pushed a commit to branch support/1.14
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/support/1.14 by this push:
new ef0fa4b GEODE-9000: Added logic to avoid NPE during processing Network Partition (#6129) (#6130)
ef0fa4b is described below
commit ef0fa4bc8b764b41b60bc4c29774f6bfe304078f
Author: Ernie Burghardt <eb...@pivotal.io>
AuthorDate: Fri Mar 12 13:46:08 2021 -0800
GEODE-9000: Added logic to avoid NPE during processing Network Partition (#6129) (#6130)
(cherry picked from commit 82bf1f9d757fd4aaa096a7bf2078d415b18f75b7)
---
.../gms/membership/GMSJoinLeaveJUnitTest.java | 16 ++++++++++++++++
.../membership/gms/membership/GMSJoinLeave.java | 17 ++++++++++++-----
2 files changed, 28 insertions(+), 5 deletions(-)
diff --git a/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeaveJUnitTest.java b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeaveJUnitTest.java
index e8912f3..c2d3271 100644
--- a/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeaveJUnitTest.java
+++ b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeaveJUnitTest.java
@@ -16,6 +16,7 @@ package org.apache.geode.distributed.internal.membership.gms.membership;
import static org.apache.geode.test.awaitility.GeodeAwaitility.await;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatNoException;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.hamcrest.core.IsEqual.equalTo;
import static org.junit.Assert.assertEquals;
@@ -849,6 +850,21 @@ public class GMSJoinLeaveJUnitTest {
}
@Test
+ public void testNetworkPartitionDetectedWithNullView() throws Exception {
+ initMocks(true);
+ prepareAndInstallView(mockMembers[0], createMemberList(mockMembers[0], gmsJoinLeaveMemberId));
+
+ NetworkPartitionMessage message = new NetworkPartitionMessage();
+ message.setSender(gmsJoinLeaveMemberId);
+
+
+ // this creates a NPE that must be handled appropriately
+ gmsJoinLeave.currentView = null;
+ assertThatNoException().isThrownBy(() -> gmsJoinLeave.processNetworkPartitionMessage(message));
+
+ }
+
+ @Test
public void testNetworkPartitionDetected() throws Exception {
initMocks(true);
prepareAndInstallView(mockMembers[0], createMemberList(mockMembers[0], gmsJoinLeaveMemberId));
diff --git a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeave.java b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeave.java
index 77b5c72..2800a06 100644
--- a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeave.java
+++ b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeave.java
@@ -1456,12 +1456,19 @@ public class GMSJoinLeave<ID extends MemberIdentifier> implements JoinLeave<ID>
return;
}
ID sender = msg.getSender();
- if (getView().getMembers().contains(sender)) {
- String str = "Membership coordinator " + msg.getSender()
- + " has declared that a network partition has occurred";
- forceDisconnect(str);
+
+ final GMSMembershipView<ID> view = getView();
+ if (view != null && isJoined) {
+ if (view.getMembers().contains(sender)) {
+ String str = "Membership coordinator " + msg.getSender()
+ + " has declared that a network partition has occurred";
+ forceDisconnect(str);
+ } else {
+ logger.warn("Ignoring the network partition message from a non-member: " + msg.getSender());
+ }
} else {
- logger.warn("Ignoring the network partition message from a non-member: " + msg.getSender());
+ logger.debug(
+ "Ignoring, the network partition message, likely this message was intended for the previous Membership service... ");
}
}