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

jasonhuynh pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/develop by this push:
     new 1d1bc3b  GEODE-4703: Prevent sending RemoveCacheServerProfileMessage 
to older members (#1468)
1d1bc3b is described below

commit 1d1bc3b25dc82412edaf127e5f0e55cee924df6e
Author: Jason Huynh <huyn...@gmail.com>
AuthorDate: Fri Feb 23 09:43:20 2018 -0800

    GEODE-4703: Prevent sending RemoveCacheServerProfileMessage to older 
members (#1468)
---
 .../geode/internal/cache/GemFireCacheImpl.java     | 13 +++++++
 .../cache/wan/WANRollingUpgradeDUnitTest.java      | 42 ++++++++++++++++++++++
 2 files changed, 55 insertions(+)

diff --git 
a/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
 
b/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
index efb6f07..6efb94c 100755
--- 
a/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
+++ 
b/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
@@ -175,6 +175,7 @@ import org.apache.geode.i18n.LogWriterI18n;
 import org.apache.geode.internal.Assert;
 import org.apache.geode.internal.ClassPathLoader;
 import org.apache.geode.internal.SystemTimer;
+import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.backup.BackupService;
 import org.apache.geode.internal.cache.control.InternalResourceManager;
 import 
org.apache.geode.internal.cache.control.InternalResourceManager.ResourceType;
@@ -4575,6 +4576,18 @@ public class GemFireCacheImpl implements InternalCache, 
InternalClientCache, Has
     Set otherMembers = this.dm.getOtherDistributionManagerIds();
     RemoveCacheServerProfileMessage message = new 
RemoveCacheServerProfileMessage();
     message.operateOnLocalCache(this);
+
+    // Remove this while loop when we release GEODE 2.0
+    // This block prevents sending a message to old members that do not know 
about
+    // the RemoveCacheServerProfileMessage
+    Iterator memberIterator = otherMembers.iterator();
+    while (memberIterator.hasNext()) {
+      InternalDistributedMember member = (InternalDistributedMember) 
memberIterator.next();
+      if (Version.GEODE_150.compareTo(member.getVersionObject()) > 0) {
+        memberIterator.remove();
+      }
+    }
+
     if (!otherMembers.isEmpty()) {
       if (logger.isDebugEnabled()) {
         logger.debug("Sending add cache server profile message to other 
members.");
diff --git 
a/geode-wan/src/test/java/org/apache/geode/cache/wan/WANRollingUpgradeDUnitTest.java
 
b/geode-wan/src/test/java/org/apache/geode/cache/wan/WANRollingUpgradeDUnitTest.java
index 8b4a0d3..e2dc99c 100644
--- 
a/geode-wan/src/test/java/org/apache/geode/cache/wan/WANRollingUpgradeDUnitTest.java
+++ 
b/geode-wan/src/test/java/org/apache/geode/cache/wan/WANRollingUpgradeDUnitTest.java
@@ -664,6 +664,48 @@ public class WANRollingUpgradeDUnitTest extends 
JUnit4CacheTestCase {
     assertEquals(0, remoteServer1EventsReceived + remoteServer2EventsReceived);
   }
 
+  @Test
+  public void 
testVerifyGatewayReceiverDoesNotSendRemoveCacheServerProfileToMembersOlderThan1dot5()
+      throws Exception {
+    final Host host = Host.getHost(0);
+    VM oldLocator = host.getVM(oldVersion, 0);
+    VM oldServer = host.getVM(oldVersion, 1);
+    VM currentServer = host.getVM(VersionManager.CURRENT_VERSION, 2);
+
+    // Start locator
+    final int port = 
AvailablePort.getRandomAvailablePort(AvailablePort.SOCKET);
+    DistributedTestUtils.deleteLocatorStateFile(port);
+    final String locators = NetworkUtils.getServerHostName(host) + "[" + port 
+ "]";
+    oldLocator.invoke(() -> startLocator(port, 0, locators, ""));
+
+    IgnoredException ie =
+        IgnoredException.addIgnoredException("could not get remote locator 
information");
+    try {
+      // Start old server
+      oldServer.invoke(() -> createCache(locators));
+
+      // Locators before 1.4 handled configuration asynchronously.
+      // We must wait for configuration configuration to be ready, or confirm 
that it is disabled.
+      oldLocator.invoke(
+          () -> Awaitility.await().atMost(65, 
TimeUnit.SECONDS).pollInterval(1, TimeUnit.SECONDS)
+              .until(() -> assertTrue(
+                  
!InternalLocator.getLocator().getConfig().getEnableClusterConfiguration()
+                      || 
InternalLocator.getLocator().isSharedConfigurationRunning())));
+
+      oldServer.invoke(() -> createGatewayReceiver());
+
+      currentServer.invoke(() -> createCache(locators));
+
+      currentServer.invoke(() -> createGatewayReceiver());
+      currentServer.invoke(() -> getCache().getGatewayReceivers().forEach(r -> 
{
+        r.stop();
+        r.destroy();
+      }));
+    } finally {
+      ie.remove();
+    }
+  }
+
   private void createCache(String locators) {
     Properties props = new Properties();
     props.setProperty(DistributionConfig.MCAST_PORT_NAME, "0");

-- 
To stop receiving notification emails like this one, please contact
jasonhu...@apache.org.

Reply via email to