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... ");
     }
   }