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);
