You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by bo...@apache.org on 2017/03/10 18:40:13 UTC

geode git commit: GEODE-2638: GatewaySenders now start even if configured with locators on unknown hosts

Repository: geode
Updated Branches:
  refs/heads/develop 12318c5c4 -> e3c05b724


GEODE-2638: GatewaySenders now start even if configured with locators on unknown hosts


Project: http://git-wip-us.apache.org/repos/asf/geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/geode/commit/e3c05b72
Tree: http://git-wip-us.apache.org/repos/asf/geode/tree/e3c05b72
Diff: http://git-wip-us.apache.org/repos/asf/geode/diff/e3c05b72

Branch: refs/heads/develop
Commit: e3c05b72476b19ac477e54378edf25d823c89a1e
Parents: 12318c5
Author: Barry Oglesby <bo...@pivotal.io>
Authored: Thu Mar 9 09:28:39 2017 -0800
Committer: Barry Oglesby <bo...@pivotal.io>
Committed: Fri Mar 10 10:08:38 2017 -0800

----------------------------------------------------------------------
 .../geode/internal/i18n/LocalizedStrings.java   |  5 ++
 .../cache/wan/AbstractRemoteGatewaySender.java  | 15 ++++-
 .../geode/internal/cache/wan/WANTestBase.java   | 23 +++++++
 .../wan/misc/WanAutoDiscoveryDUnitTest.java     | 63 ++++++++++++++++++++
 4 files changed, 103 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/geode/blob/e3c05b72/geode-core/src/main/java/org/apache/geode/internal/i18n/LocalizedStrings.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/internal/i18n/LocalizedStrings.java b/geode-core/src/main/java/org/apache/geode/internal/i18n/LocalizedStrings.java
index 47ae0c5..1d288ec 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/i18n/LocalizedStrings.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/i18n/LocalizedStrings.java
@@ -7672,6 +7672,11 @@ public class LocalizedStrings {
       new StringId(6651, "Lucene index {0} was not found in region {1}.");
   public static final StringId LuceneService_DESTROYED_INDEX_0_FROM_REGION_1 =
       new StringId(6652, "Destroyed Lucene index {0} from region {1}.");
+
+  public static final StringId PoolFactoryImpl_CAUGHT_EXCEPTION_ATTEMPTING_TO_ADD_REMOTE_LOCATOR_0 =
+      new StringId(6653,
+          "Caught the following exception attempting to add remote locator {0}. The locator will be ignored.");
+
   /** Testing strings, messageId 90000-99999 **/
 
   /**

http://git-wip-us.apache.org/repos/asf/geode/blob/e3c05b72/geode-wan/src/main/java/org/apache/geode/internal/cache/wan/AbstractRemoteGatewaySender.java
----------------------------------------------------------------------
diff --git a/geode-wan/src/main/java/org/apache/geode/internal/cache/wan/AbstractRemoteGatewaySender.java b/geode-wan/src/main/java/org/apache/geode/internal/cache/wan/AbstractRemoteGatewaySender.java
index 918c723..68eb56c 100644
--- a/geode-wan/src/main/java/org/apache/geode/internal/cache/wan/AbstractRemoteGatewaySender.java
+++ b/geode-wan/src/main/java/org/apache/geode/internal/cache/wan/AbstractRemoteGatewaySender.java
@@ -99,9 +99,18 @@ public abstract class AbstractRemoteGatewaySender extends AbstractGatewaySender
           StringBuffer strBuffer = new StringBuffer();
           Iterator<String> itr = response.getLocators().iterator();
           while (itr.hasNext()) {
-            DistributionLocatorId locatorId = new DistributionLocatorId(itr.next());
-            pf.addLocator(locatorId.getHost().getHostName(), locatorId.getPort());
-            locatorCount++;
+            String remoteLocator = itr.next();
+            try {
+              DistributionLocatorId locatorId = new DistributionLocatorId(remoteLocator);
+              pf.addLocator(locatorId.getHost().getHostName(), locatorId.getPort());
+              locatorCount++;
+            } catch (Exception e) {
+              if (logProxyFailure()) {
+                logger.warn(LocalizedMessage.create(
+                    LocalizedStrings.PoolFactoryImpl_CAUGHT_EXCEPTION_ATTEMPTING_TO_ADD_REMOTE_LOCATOR_0,
+                    new Object[] {remoteLocator}), e);
+              }
+            }
           }
           break;
         }

http://git-wip-us.apache.org/repos/asf/geode/blob/e3c05b72/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/WANTestBase.java
----------------------------------------------------------------------
diff --git a/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/WANTestBase.java b/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/WANTestBase.java
index c8de7dc..0656dd8 100644
--- a/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/WANTestBase.java
+++ b/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/WANTestBase.java
@@ -67,6 +67,7 @@ import org.apache.geode.cache.asyncqueue.internal.AsyncEventQueueImpl;
 import org.apache.geode.cache.client.Pool;
 import org.apache.geode.cache.client.PoolManager;
 import org.apache.geode.cache.client.internal.LocatorDiscoveryCallbackAdapter;
+import org.apache.geode.cache.client.internal.PoolImpl;
 import org.apache.geode.cache.client.internal.locator.wan.LocatorMembershipListener;
 import org.apache.geode.cache.persistence.PartitionOfflineException;
 import org.apache.geode.cache.server.CacheServer;
@@ -3032,6 +3033,16 @@ public class WANTestBase extends JUnit4DistributedTestCase {
     return System.currentTimeMillis();
   }
 
+  public static void putRemoteSiteLocators(int remoteDsId, Set<String> remoteLocators) {
+    List<Locator> locatorsConfigured = Locator.getLocators();
+    Locator locator = locatorsConfigured.get(0);
+    if (remoteLocators != null) {
+      // Add fake remote locators to the locators map
+      ((InternalLocator) locator).getlocatorMembershipListener().getAllServerLocatorsInfo()
+          .put(remoteDsId, remoteLocators);
+    }
+  }
+
   public static void checkLocatorsinSender(String senderId, InetSocketAddress locatorToWaitFor)
       throws InterruptedException {
 
@@ -3426,6 +3437,18 @@ public class WANTestBase extends JUnit4DistributedTestCase {
     assertTrue(sender.isRunning());
   }
 
+  public static void verifyPool(String senderId, boolean poolShouldExist,
+      int expectedPoolLocatorsSize) {
+    AbstractGatewaySender sender = (AbstractGatewaySender) cache.getGatewaySender(senderId);
+    PoolImpl pool = sender.getProxy();
+    if (poolShouldExist) {
+      assertNotNull(pool);
+      assertEquals(expectedPoolLocatorsSize, pool.getLocators().size());
+    } else {
+      assertNull(pool);
+    }
+  }
+
   public static void removeSenderFromTheRegion(String senderId, String regionName) {
     Region region = cache.getRegion(regionName);
     assertNotNull(region);

http://git-wip-us.apache.org/repos/asf/geode/blob/e3c05b72/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/misc/WanAutoDiscoveryDUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/misc/WanAutoDiscoveryDUnitTest.java b/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/misc/WanAutoDiscoveryDUnitTest.java
index 388760e..3e94697 100644
--- a/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/misc/WanAutoDiscoveryDUnitTest.java
+++ b/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/misc/WanAutoDiscoveryDUnitTest.java
@@ -14,6 +14,7 @@
  */
 package org.apache.geode.internal.cache.wan.misc;
 
+import org.apache.geode.test.dunit.IgnoredException;
 import org.junit.Ignore;
 import org.junit.experimental.categories.Category;
 import org.junit.Test;
@@ -581,4 +582,66 @@ public class WanAutoDiscoveryDUnitTest extends WANTestBase {
       fail(builder.toString());
     }
   }
+
+  @Test
+  public void testNoRemoteLocators() {
+    IgnoredException ie = IgnoredException
+        .addIgnoredException("could not get remote locator information for remote site");
+    try {
+      testRemoteLocators(null, false, 0);
+    } finally {
+      ie.remove();
+    }
+  }
+
+  @Test
+  public void testValidHostRemoteLocators() {
+    Set<String> remoteLocators = new HashSet();
+    remoteLocators.add("localhost[12345]");
+    testRemoteLocators(remoteLocators, true, 1);
+  }
+
+  @Test
+  public void testInvalidHostRemoteLocators() {
+    IgnoredException ie = IgnoredException
+        .addIgnoredException("could not get remote locator information for remote site");
+    try {
+      Set<String> remoteLocators = new HashSet();
+      remoteLocators.add("unknown[12345]");
+      testRemoteLocators(remoteLocators, false, 0);
+    } finally {
+      ie.remove();
+    }
+  }
+
+  @Test
+  public void testValidAndInvalidHostRemoteLocators() {
+    Set<String> remoteLocators = new HashSet();
+    remoteLocators.add("localhost[12345]");
+    remoteLocators.add("unknown[12345]");
+    testRemoteLocators(remoteLocators, true, 1);
+  }
+
+  private void testRemoteLocators(Set<String> remoteLocators, boolean poolShouldExist,
+      int expectedPoolLocatorsSize) {
+    // Start locator
+    Integer lnLocPort = (Integer) vm0.invoke(() -> WANTestBase.createFirstLocatorWithDSId(1));
+
+    // Add remote locators
+    int remoteDsId = 2;
+    vm0.invoke(() -> WANTestBase.putRemoteSiteLocators(remoteDsId, remoteLocators));
+
+    // Create cache
+    vm2.invoke(() -> WANTestBase.createCache(lnLocPort));
+
+    // Create sender
+    vm2.invoke(() -> WANTestBase.createSender("ln", remoteDsId, false, 100, 10, false, false, null,
+        false));
+
+    // Verify sender is running
+    vm2.invoke(() -> WANTestBase.verifySenderRunningState("ln"));
+
+    // Verify pool exists or not
+    vm2.invoke(() -> WANTestBase.verifyPool("ln", poolShouldExist, expectedPoolLocatorsSize));
+  }
 }