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>'].