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