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 2017/10/11 22:52:14 UTC

[geode] branch feature/GEODE-3780b updated: GEODE-3780 suspected member is never watched again after passing final check

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

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


The following commit(s) were added to refs/heads/feature/GEODE-3780b by this push:
     new ad6eff1  GEODE-3780 suspected member is never watched again after passing final check
ad6eff1 is described below

commit ad6eff1a0a6ca9700587d5291e9a3fb2e5cee87a
Author: Bruce Schuchardt <bs...@pivotal.io>
AuthorDate: Wed Oct 11 15:51:31 2017 -0700

    GEODE-3780 suspected member is never watched again after passing final check
    
    and git bit me again - this contains the content of the new message and
    the handling of it.
---
 .../membership/gms/fd/GMSHealthMonitor.java        | 13 ++++++
 .../gms/messages/FinalCheckPassedMessage.java      | 54 +++++++++++++++++++++-
 .../geode/internal/DataSerializableFixedID.java    |  1 +
 3 files changed, 67 insertions(+), 1 deletion(-)

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 74109b7..dc9c52c 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
@@ -14,6 +14,7 @@
  */
 package org.apache.geode.distributed.internal.membership.gms.fd;
 
+import static org.apache.geode.internal.DataSerializableFixedID.FINAL_CHECK_PASSED_MESSAGE;
 import static org.apache.geode.internal.DataSerializableFixedID.HEARTBEAT_REQUEST;
 import static org.apache.geode.internal.DataSerializableFixedID.HEARTBEAT_RESPONSE;
 import static org.apache.geode.internal.DataSerializableFixedID.SUSPECT_MEMBERS_MESSAGE;
@@ -31,6 +32,7 @@ import org.apache.geode.distributed.internal.membership.gms.GMSMember;
 import org.apache.geode.distributed.internal.membership.gms.Services;
 import org.apache.geode.distributed.internal.membership.gms.interfaces.HealthMonitor;
 import org.apache.geode.distributed.internal.membership.gms.interfaces.MessageHandler;
+import org.apache.geode.distributed.internal.membership.gms.messages.FinalCheckPassedMessage;
 import org.apache.geode.distributed.internal.membership.gms.messages.HeartbeatMessage;
 import org.apache.geode.distributed.internal.membership.gms.messages.HeartbeatRequestMessage;
 import org.apache.geode.distributed.internal.membership.gms.messages.SuspectMembersMessage;
@@ -934,6 +936,7 @@ public class GMSHealthMonitor implements HealthMonitor, MessageHandler {
     services.getMessenger().addHandler(HeartbeatRequestMessage.class, this);
     services.getMessenger().addHandler(HeartbeatMessage.class, this);
     services.getMessenger().addHandler(SuspectMembersMessage.class, this);
+    services.getMessenger().addHandler(FinalCheckPassedMessage.class, this);
   }
 
   @Override
@@ -1075,6 +1078,10 @@ public class GMSHealthMonitor implements HealthMonitor, MessageHandler {
           processSuspectMembersRequest((SuspectMembersMessage) m);
         }
         break;
+      case FINAL_CHECK_PASSED_MESSAGE:
+        contactedBy(
+            ((FinalCheckPassedMessage)m).getSuspect());
+        break;
       default:
         throw new IllegalArgumentException("unknown message type: " + m);
     }
@@ -1312,6 +1319,12 @@ public class GMSHealthMonitor implements HealthMonitor, MessageHandler {
         pinged = doTCPCheckMember(mbr, port);
       }
 
+      if (pinged && !initiator.equals(localAddress) && initiator.getVersionObject().compareTo(Version.GEODE_130) >= 0) {
+        // let the sender know that it's okay to monitor this member again
+        FinalCheckPassedMessage message = new FinalCheckPassedMessage(initiator, mbr);
+        services.getMessenger().send(message);
+      }
+
       if (!pinged && !isStopping) {
         TimeStamp ts = memberTimeStamps.get(mbr);
         if (ts == null || ts.getTime() < startTime) {
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/FinalCheckPassedMessage.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/FinalCheckPassedMessage.java
index f19ddaf..c464a94 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/FinalCheckPassedMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/FinalCheckPassedMessage.java
@@ -14,5 +14,57 @@
  */
 package org.apache.geode.distributed.internal.membership.gms.messages;
 
-public class FinalCheckPassedMessage {
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.geode.DataSerializer;
+import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.distributed.internal.HighPriorityDistributionMessage;
+import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
+import org.apache.geode.internal.Version;
+
+public class FinalCheckPassedMessage extends HighPriorityDistributionMessage {
+
+  private InternalDistributedMember suspect;
+
+  public FinalCheckPassedMessage(InternalDistributedMember recipient, InternalDistributedMember suspect) {
+    super();
+    setRecipient(recipient);
+    this.suspect = suspect;
+  }
+
+  @Override
+  public int getDSFID() {
+    return FINAL_CHECK_PASSED_MESSAGE;
+  }
+
+  @Override
+  public void process(DistributionManager dm) {
+    throw new IllegalStateException("this message is not intended to execute in a thread pool");
+  }
+
+  @Override
+  public String toString() {
+    return "FinalCheckPassedMessage [suspect=" + suspect + "]";
+  }
+
+  @Override
+  public Version[] getSerializationVersions() {
+    return null;
+  }
+
+  @Override
+  public void toData(DataOutput out) throws IOException {
+    DataSerializer.writeObject(suspect, out);
+  }
+
+  @Override
+  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+    suspect = (InternalDistributedMember)DataSerializer.readObject(in);
+  }
+
+  public InternalDistributedMember getSuspect() {
+    return suspect;
+  }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/DataSerializableFixedID.java b/geode-core/src/main/java/org/apache/geode/internal/DataSerializableFixedID.java
index b4fbac7..7f8cd5d 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/DataSerializableFixedID.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/DataSerializableFixedID.java
@@ -68,6 +68,7 @@ public interface DataSerializableFixedID extends SerializationVersions {
    * 
    * In DSFIDFactory, add a case for the new class case FOO: return new FOO(in);
    */
+  public static final short FINAL_CHECK_PASSED_MESSAGE = -158;
   public static final short NETWORK_PARTITION_MESSAGE = -157;
   public static final short SUSPECT_MEMBERS_MESSAGE = -156;
 

-- 
To stop receiving notification emails like this one, please contact
['"commits@geode.apache.org" <co...@geode.apache.org>'].