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

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

commit b1c1b444d5e499dae96a2da31dac7ee32f1e182c
Author: Bruce Schuchardt <[email protected]>
AuthorDate: Wed Aug 21 15:18:05 2019 -0700

    GEODE-7072 CI Failure: 
WANRollingUpgradeEventProcessingMixedSiteOneCurrentSiteTwo
    
    The DataSerializableFixedID class FinalCheckPassedMessage (with ID -158)
    wasn't added until version 1.4.  Sending this message to a member of the
    cluster running v1.3 will result in a deserialization error on that
    member.  The error is benign but it does expose rolling-upgrade tests to
    failure if suspect-string processing sees the deserialization error in
    unit test output.
---
 .../gms/fd/GMSHealthMonitorJUnitTest.java          | 27 ++++++++++++++++++++++
 .../membership/gms/fd/GMSHealthMonitor.java        |  2 +-
 2 files changed, 28 insertions(+), 1 deletion(-)

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 59d2c0e..7936a4b 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
@@ -604,6 +604,33 @@ public class GMSHealthMonitorJUnitTest {
   }
 
   @Test
+  public void testExonerationMessageIsNotSentToVersion_1_3() {
+    // versions older than 1.4 don't know about the FinalCheckPassedMessage 
class
+    useGMSHealthMonitorTestClass = true;
+
+    try {
+      GMSMembershipView v = installAView();
+
+      setFailureDetectionPorts(v);
+
+      GMSMember memberToCheck = gmsHealthMonitor.getNextNeighbor();
+
+      gmsHealthMonitor.setNextNeighbor(v, memberToCheck);
+      assertNotEquals(memberToCheck, gmsHealthMonitor.getNextNeighbor());
+
+      mockMembers.get(0).setVersion(Version.GEODE_1_3_0);
+      boolean retVal = 
gmsHealthMonitor.inlineCheckIfAvailable(mockMembers.get(0), v, true,
+          memberToCheck, "Not responding");
+
+      assertTrue("CheckIfAvailable should have return true", retVal);
+      verify(messenger, never()).send(isA(FinalCheckPassedMessage.class));
+
+    } finally {
+      useGMSHealthMonitorTestClass = false;
+    }
+  }
+
+  @Test
   public void testFinalCheckPassedMessageCanBeSerializedAndDeserialized()
       throws IOException, ClassNotFoundException {
     HeapDataOutputStream heapDataOutputStream = new HeapDataOutputStream(500, 
Version.CURRENT);
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 61695c2..b169f9e 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
@@ -1387,7 +1387,7 @@ public class GMSHealthMonitor implements HealthMonitor {
 
       if (!failed) {
         if (!isStopping && !initiator.equals(localAddress)
-            && initiator.getVersionOrdinal() >= Version.GEODE_1_3_0.ordinal()) 
{
+            && initiator.getVersionOrdinal() >= Version.GEODE_1_4_0.ordinal()) 
{
           // let the sender know that it's okay to monitor this member again
           FinalCheckPassedMessage message = new 
FinalCheckPassedMessage(initiator, mbr);
           services.getMessenger().send(message);

Reply via email to