You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by bs...@apache.org on 2019/01/03 20:59:12 UTC

[geode] branch feature/GEODE-6244 created (now 25134b1)

This is an automated email from the ASF dual-hosted git repository.

bschuchardt pushed a change to branch feature/GEODE-6244
in repository https://gitbox.apache.org/repos/asf/geode.git.


      at 25134b1  GEODE-6244 Healthy member kicked out by Sick member

This branch includes the following new commits:

     new 25134b1  GEODE-6244 Healthy member kicked out by Sick member

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[geode] 01/01: GEODE-6244 Healthy member kicked out by Sick member

Posted by bs...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

bschuchardt pushed a commit to branch feature/GEODE-6244
in repository https://gitbox.apache.org/repos/asf/geode.git

commit 25134b19e2a324ff04c3a3d1139bafe641031729
Author: Bruce Schuchardt <bs...@pivotal.io>
AuthorDate: Thu Jan 3 12:49:56 2019 -0800

    GEODE-6244 Healthy member kicked out by Sick member
    
    GMSMembershipManager.verifyMember() should not initiate direct removal
    of the target member if an availability check fails.  Instead it should
    initiate suspect processing.
    
    This adds new unit tests for GMSHealthMonitor.checkIfAvailable() and
    changes the availability check to initiate suspect processing if the
    check fails.
---
 .../gms/fd/GMSHealthMonitorJUnitTest.java          | 34 ++++++++++++++++++++++
 .../membership/gms/fd/GMSHealthMonitor.java        |  7 ++---
 .../membership/gms/mgr/GMSMembershipManager.java   |  2 +-
 3 files changed, 38 insertions(+), 5 deletions(-)

diff --git a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/fd/GMSHealthMonitorJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/fd/GMSHealthMonitorJUnitTest.java
index 8001aed..baab496 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/fd/GMSHealthMonitorJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/fd/GMSHealthMonitorJUnitTest.java
@@ -615,6 +615,40 @@ public class GMSHealthMonitorJUnitTest {
     assertTrue(gmsHealthMonitor.isSuspectMember(memberToCheck));
   }
 
+  /**
+   * a failed availablility check should initiate suspect processing
+   */
+  @Test
+  public void testFailedCheckIfAvailableDoesNotRemoveMember() {
+    NetView v = installAView();
+
+    setFailureDetectionPorts(v);
+
+    InternalDistributedMember memberToCheck = gmsHealthMonitor.getNextNeighbor();
+    boolean available = gmsHealthMonitor.checkIfAvailable(memberToCheck, "Not responding", false);
+    assertFalse(available);
+    verify(joinLeave, never()).remove(isA(InternalDistributedMember.class), isA(String.class));
+    assertTrue(gmsHealthMonitor.isSuspectMember(memberToCheck));
+    verify(messenger).send(isA(SuspectMembersMessage.class));
+  }
+
+
+  /**
+   * Same test as above but with request to initiate removal
+   */
+  @Test
+  public void testFailedCheckIfAvailableRemovesMember() {
+    NetView v = installAView();
+
+    setFailureDetectionPorts(v);
+
+    InternalDistributedMember memberToCheck = gmsHealthMonitor.getNextNeighbor();
+    boolean available = gmsHealthMonitor.checkIfAvailable(memberToCheck, "Not responding", true);
+    assertFalse(available);
+    verify(joinLeave).remove(isA(InternalDistributedMember.class), isA(String.class));
+  }
+
+
 
   @Test
   public void testShutdown() {
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/fd/GMSHealthMonitor.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/fd/GMSHealthMonitor.java
index d5e5a39..cccf285 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/fd/GMSHealthMonitor.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/fd/GMSHealthMonitor.java
@@ -436,10 +436,7 @@ public class GMSHealthMonitor implements HealthMonitor, MessageHandler {
     if (services.getJoinLeave().isMemberLeaving(mbr)) {
       return;
     }
-    SuspectRequest sr = new SuspectRequest(mbr, reason);
-    List<SuspectRequest> sl = new ArrayList<>();
-    sl.add(sr);
-    sendSuspectRequest(sl);
+    sendSuspectRequest(Collections.singletonList(new SuspectRequest(mbr, reason)));
   }
 
   /**
@@ -1278,6 +1275,8 @@ public class GMSHealthMonitor implements HealthMonitor, MessageHandler {
           if (initiateRemoval) {
             logger.info("Requesting removal of suspect member {}", mbr);
             services.getJoinLeave().remove(mbr, reason);
+          } else {
+            initiateSuspicion(mbr, reason);
           }
           // make sure it is still suspected
           memberSuspected(localAddress, mbr, reason);
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/mgr/GMSMembershipManager.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/mgr/GMSMembershipManager.java
index 5eb36fd..c022b30 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/mgr/GMSMembershipManager.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/mgr/GMSMembershipManager.java
@@ -1649,7 +1649,7 @@ public class GMSMembershipManager implements MembershipManager, Manager {
    */
   public boolean verifyMember(DistributedMember mbr, String reason) {
     return mbr != null && memberExists(mbr)
-        && this.services.getHealthMonitor().checkIfAvailable(mbr, reason, true);
+        && this.services.getHealthMonitor().checkIfAvailable(mbr, reason, false);
   }
 
   /**