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 2018/04/16 17:00:14 UTC

[geode] 01/01: GEODE-5081 ClientCacheFactory is missing the setPoolSubscriptionTimeoutMultiplier()

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

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

commit 948ca6038cddda8381c61598a96c9fa8ded78d27
Author: Bruce Schuchardt <bs...@pivotal.io>
AuthorDate: Mon Apr 16 09:58:31 2018 -0700

    GEODE-5081 ClientCacheFactory is missing the setPoolSubscriptionTimeoutMultiplier()
    
    Added the missing method & a test for it
---
 .../geode/cache/client/ClientCacheFactory.java     | 15 ++++
 .../cache/client/ClientCacheFactoryJUnitTest.java  | 87 ++++++++++++----------
 .../cache/tier/sockets/CacheServerTestUtil.java    |  1 +
 3 files changed, 65 insertions(+), 38 deletions(-)

diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/ClientCacheFactory.java b/geode-core/src/main/java/org/apache/geode/cache/client/ClientCacheFactory.java
index 4da8e77..efd4efb 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/ClientCacheFactory.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/ClientCacheFactory.java
@@ -537,6 +537,21 @@ public class ClientCacheFactory {
   }
 
   /**
+   * A server has an inactivity monitor that ensures a message is sent to a client at least once a
+   * minute (60,000 milliseconds). If a subscription timeout multipler is set in the client it
+   * enables timing out of the subscription feed with failover to another server.
+   * <p>
+   * A value of zero (the default) disables timeouts
+   * <p>
+   * The resulting timeout will be multiplied by 1.25 in order to avoid race conditions with the
+   * server sending its "ping" message.
+   */
+  public ClientCacheFactory setPoolSubscriptionTimeoutMultiplier(int multiplier) {
+    getPoolFactory().setSubscriptionTimeoutMultiplier(multiplier);
+    return this;
+  }
+
+  /**
    * Sets the messageTrackingTimeout attribute which is the time-to-live period, in milliseconds,
    * for subscription events the client has received from the server. It's used to minimize
    * duplicate events. Entries that have not been modified for this amount of time are expired from
diff --git a/geode-core/src/test/java/org/apache/geode/cache/client/ClientCacheFactoryJUnitTest.java b/geode-core/src/test/java/org/apache/geode/cache/client/ClientCacheFactoryJUnitTest.java
index c352a6c..6b65df2 100644
--- a/geode-core/src/test/java/org/apache/geode/cache/client/ClientCacheFactoryJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/cache/client/ClientCacheFactoryJUnitTest.java
@@ -68,13 +68,14 @@ import org.apache.geode.test.junit.categories.IntegrationTest;
 @Category({IntegrationTest.class, ClientServerTest.class})
 public class ClientCacheFactoryJUnitTest {
 
-  private ClientCache cc;
+  private ClientCache clientCache;
   private File tmpFile;
 
   @After
   public void tearDown() throws Exception {
-    if (this.cc != null && !this.cc.isClosed()) {
-      cc.close();
+    System.out.println("tearDown");
+    if (this.clientCache != null && !this.clientCache.isClosed()) {
+      clientCache.close();
     }
     if (tmpFile != null && tmpFile.exists()) {
       tmpFile.delete();
@@ -91,10 +92,10 @@ public class ClientCacheFactoryJUnitTest {
 
   @Test
   public void test000Defaults() throws Exception {
-    this.cc = new ClientCacheFactory().create();
-    GemFireCacheImpl gfc = (GemFireCacheImpl) this.cc;
+    this.clientCache = new ClientCacheFactory().create();
+    GemFireCacheImpl gfc = (GemFireCacheImpl) this.clientCache;
     assertEquals(true, gfc.isClient());
-    Properties dsProps = this.cc.getDistributedSystem().getProperties();
+    Properties dsProps = this.clientCache.getDistributedSystem().getProperties();
     assertEquals("0", dsProps.getProperty(MCAST_PORT));
     assertEquals("", dsProps.getProperty(LOCATORS));
     Pool defPool = gfc.getDefaultPool();
@@ -107,8 +108,8 @@ public class ClientCacheFactoryJUnitTest {
     assertEquals(PoolFactory.DEFAULT_SOCKET_CONNECT_TIMEOUT, defPool.getSocketConnectTimeout());
 
     ClientCache cc2 = new ClientCacheFactory().create();
-    if (cc2 != this.cc) {
-      fail("expected cc2 and cc to be == " + cc2 + this.cc);
+    if (cc2 != this.clientCache) {
+      fail("expected cc2 and cc to be == " + cc2 + this.clientCache);
     }
 
     try {
@@ -131,10 +132,11 @@ public class ClientCacheFactoryJUnitTest {
     URL url = ClientCacheFactoryJUnitTest.class
         .getResource("ClientCacheFactoryJUnitTest_single_pool.xml");;
     FileUtils.copyFile(new File(url.getFile()), this.tmpFile);
-    this.cc = new ClientCacheFactory().set(CACHE_XML_FILE, this.tmpFile.getAbsolutePath()).create();
-    GemFireCacheImpl gfc = (GemFireCacheImpl) this.cc;
+    this.clientCache =
+        new ClientCacheFactory().set(CACHE_XML_FILE, this.tmpFile.getAbsolutePath()).create();
+    GemFireCacheImpl gfc = (GemFireCacheImpl) this.clientCache;
     assertEquals(true, gfc.isClient());
-    Properties dsProps = this.cc.getDistributedSystem().getProperties();
+    Properties dsProps = this.clientCache.getDistributedSystem().getProperties();
     assertEquals("0", dsProps.getProperty(MCAST_PORT));
     assertEquals("", dsProps.getProperty(LOCATORS));
     Pool defPool = gfc.getDefaultPool();
@@ -156,8 +158,8 @@ public class ClientCacheFactoryJUnitTest {
     DistributedSystem ds = DistributedSystem.connect(dsProps);
     Pool p = PoolManager.createFactory().addServer(InetAddress.getLocalHost().getHostName(), 7777)
         .setSocketConnectTimeout(1400).create("singlePool");
-    this.cc = new ClientCacheFactory().create();
-    GemFireCacheImpl gfc = (GemFireCacheImpl) this.cc;
+    this.clientCache = new ClientCacheFactory().create();
+    GemFireCacheImpl gfc = (GemFireCacheImpl) this.clientCache;
     assertEquals(true, gfc.isClient());
     Pool defPool = gfc.getDefaultPool();
     assertEquals(p, defPool);
@@ -168,7 +170,7 @@ public class ClientCacheFactoryJUnitTest {
     try {
       Properties suProps = new Properties();
       suProps.setProperty("user", "foo");
-      RegionService cc = this.cc.createAuthenticatedView(suProps);
+      RegionService cc = this.clientCache.createAuthenticatedView(suProps);
       fail("expected IllegalStateException");
     } catch (IllegalStateException ignore) {
     }
@@ -180,7 +182,7 @@ public class ClientCacheFactoryJUnitTest {
       Pool pool = PoolManager.createFactory()
           .addServer(InetAddress.getLocalHost().getHostName(), CacheServer.DEFAULT_PORT)
           .setMultiuserAuthentication(true).setSocketConnectTimeout(2345).create("pool1");
-      RegionService cc = this.cc.createAuthenticatedView(suProps, pool.getName());
+      RegionService cc = this.clientCache.createAuthenticatedView(suProps, pool.getName());
       ProxyCache pc = (ProxyCache) cc;
       UserAttributes ua = pc.getUserAttributes();
       Pool proxyDefPool = ua.getPool();
@@ -205,8 +207,8 @@ public class ClientCacheFactoryJUnitTest {
         .setSocketConnectTimeout(2500).create("p7");
     PoolManager.createFactory().addServer(InetAddress.getLocalHost().getHostName(), 6666)
         .setSocketConnectTimeout(5200).create("p6");
-    this.cc = new ClientCacheFactory().create();
-    GemFireCacheImpl gfc = (GemFireCacheImpl) this.cc;
+    this.clientCache = new ClientCacheFactory().create();
+    GemFireCacheImpl gfc = (GemFireCacheImpl) this.clientCache;
     assertEquals(true, gfc.isClient());
     Pool defPool = gfc.getDefaultPool();
     assertEquals(null, defPool);
@@ -218,7 +220,7 @@ public class ClientCacheFactoryJUnitTest {
     try {
       Properties suProps = new Properties();
       suProps.setProperty("user", "foo");
-      RegionService cc = this.cc.createAuthenticatedView(suProps);
+      RegionService cc = this.clientCache.createAuthenticatedView(suProps);
       fail("expected IllegalStateException");
     } catch (IllegalStateException ignore) {
     }
@@ -229,7 +231,7 @@ public class ClientCacheFactoryJUnitTest {
       Pool pool = PoolManager.createFactory()
           .addServer(InetAddress.getLocalHost().getHostName(), CacheServer.DEFAULT_PORT)
           .setMultiuserAuthentication(true).create("pool1");
-      RegionService cc = this.cc.createAuthenticatedView(suProps, pool.getName());
+      RegionService cc = this.clientCache.createAuthenticatedView(suProps, pool.getName());
       ProxyCache pc = (ProxyCache) cc;
       UserAttributes ua = pc.getUserAttributes();
       Pool proxyDefPool = ua.getPool();
@@ -245,15 +247,15 @@ public class ClientCacheFactoryJUnitTest {
 
   @Test
   public void test004SetMethod() throws Exception {
-    this.cc =
+    this.clientCache =
         new ClientCacheFactory().set(LOG_LEVEL, "severe").setPoolSocketConnectTimeout(0).create();
-    GemFireCacheImpl gfc = (GemFireCacheImpl) this.cc;
+    GemFireCacheImpl gfc = (GemFireCacheImpl) this.clientCache;
     assertEquals(true, gfc.isClient());
-    Properties dsProps = this.cc.getDistributedSystem().getProperties();
+    Properties dsProps = this.clientCache.getDistributedSystem().getProperties();
     assertEquals("0", dsProps.getProperty(MCAST_PORT));
     assertEquals("", dsProps.getProperty(LOCATORS));
     assertEquals("severe", dsProps.getProperty(LOG_LEVEL));
-    assertEquals(0, this.cc.getDefaultPool().getSocketConnectTimeout());
+    assertEquals(0, this.clientCache.getDefaultPool().getSocketConnectTimeout());
 
     try {
       new ClientCacheFactory().setPoolSocketConnectTimeout(-1).create();
@@ -268,11 +270,11 @@ public class ClientCacheFactoryJUnitTest {
     suProps.setProperty("user", "foo");
     GemFireCacheImpl gfc =
         (GemFireCacheImpl) new ClientCacheFactory().setPoolMultiuserAuthentication(true).create();
-    this.cc = gfc;
-    RegionService cc1 = this.cc.createAuthenticatedView(suProps);
+    this.clientCache = gfc;
+    RegionService cc1 = this.clientCache.createAuthenticatedView(suProps);
 
     assertEquals(true, gfc.isClient());
-    Properties dsProps = this.cc.getDistributedSystem().getProperties();
+    Properties dsProps = this.clientCache.getDistributedSystem().getProperties();
     assertEquals("0", dsProps.getProperty(MCAST_PORT));
     assertEquals("", dsProps.getProperty(LOCATORS));
     Pool defPool = gfc.getDefaultPool();
@@ -285,7 +287,7 @@ public class ClientCacheFactoryJUnitTest {
     assertEquals(true, defPool.getMultiuserAuthentication());
 
     // make sure we can create another secure user cache
-    RegionService cc2 = this.cc.createAuthenticatedView(suProps);
+    RegionService cc2 = this.clientCache.createAuthenticatedView(suProps);
     assertEquals(true, gfc.isClient());
     assertEquals("0", dsProps.getProperty(MCAST_PORT));
     assertEquals("", dsProps.getProperty(LOCATORS));
@@ -304,11 +306,11 @@ public class ClientCacheFactoryJUnitTest {
 
   @Test
   public void test006NonDefaultPool() throws Exception {
-    this.cc = new ClientCacheFactory()
+    this.clientCache = new ClientCacheFactory()
         .addPoolServer(InetAddress.getLocalHost().getHostName(), 55555).create();
-    GemFireCacheImpl gfc = (GemFireCacheImpl) this.cc;
+    GemFireCacheImpl gfc = (GemFireCacheImpl) this.clientCache;
     assertEquals(true, gfc.isClient());
-    Properties dsProps = this.cc.getDistributedSystem().getProperties();
+    Properties dsProps = this.clientCache.getDistributedSystem().getProperties();
     assertEquals("0", dsProps.getProperty(MCAST_PORT));
     assertEquals("", dsProps.getProperty(LOCATORS));
     Pool defPool = gfc.getDefaultPool();
@@ -319,9 +321,9 @@ public class ClientCacheFactoryJUnitTest {
         defPool.getServers());
 
     ClientCache cc2 = new ClientCacheFactory().create();
-    gfc = (GemFireCacheImpl) this.cc;
+    gfc = (GemFireCacheImpl) this.clientCache;
     assertEquals(true, gfc.isClient());
-    dsProps = this.cc.getDistributedSystem().getProperties();
+    dsProps = this.clientCache.getDistributedSystem().getProperties();
     assertEquals("0", dsProps.getProperty(MCAST_PORT));
     assertEquals("", dsProps.getProperty(LOCATORS));
     defPool = gfc.getDefaultPool();
@@ -332,8 +334,8 @@ public class ClientCacheFactoryJUnitTest {
         defPool.getServers());
 
     try {
-      new ClientCacheFactory().addPoolServer(InetAddress.getLocalHost().getHostName(), 44444)
-          .create();
+      clientCache = new ClientCacheFactory()
+          .addPoolServer(InetAddress.getLocalHost().getHostName(), 44444).create();
       fail("expected create to fail");
     } catch (IllegalStateException expected) {
     }
@@ -342,17 +344,26 @@ public class ClientCacheFactoryJUnitTest {
   @Test
   public void test007Bug44907() {
     new ClientCacheFactory().setPdxSerializer(new ReflectionBasedAutoSerializer()).create();
-    new ClientCacheFactory().setPdxSerializer(new ReflectionBasedAutoSerializer()).create();
+    clientCache =
+        new ClientCacheFactory().setPdxSerializer(new ReflectionBasedAutoSerializer()).create();
+  }
+
+  @Test
+  public void testDefaultPoolTimeoutMultiplier() throws Exception {
+    clientCache = new ClientCacheFactory().setPoolSubscriptionTimeoutMultiplier(2)
+        .addPoolServer(InetAddress.getLocalHost().getHostName(), 7777).create();
+    Pool defaultPool = clientCache.getDefaultPool();
+    assertEquals(2, defaultPool.getSubscriptionTimeoutMultiplier());
   }
 
   @Test
   public void testOldClientIDDeserialization() throws Exception {
     // during a HandShake a clientID is read w/o knowing the client's
     // version
-    cc = new ClientCacheFactory().create();
-    GemFireCacheImpl gfc = (GemFireCacheImpl) cc;
+    clientCache = new ClientCacheFactory().create();
+    GemFireCacheImpl gfc = (GemFireCacheImpl) clientCache;
     InternalDistributedMember memberID =
-        (InternalDistributedMember) cc.getDistributedSystem().getDistributedMember();
+        (InternalDistributedMember) clientCache.getDistributedSystem().getDistributedMember();
     GMSMember gmsID = (GMSMember) memberID.getNetMember();
     memberID.setVersionObjectForTest(Version.GFE_82);
     assertEquals(Version.GFE_82, memberID.getVersionObject());
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/CacheServerTestUtil.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/CacheServerTestUtil.java
index d3fc3ae..51ac63b 100755
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/CacheServerTestUtil.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/CacheServerTestUtil.java
@@ -102,6 +102,7 @@ public class CacheServerTestUtil extends JUnit4DistributedTestCase {
           .setPoolSubscriptionRedundancy(poolAttr.getSubscriptionRedundancy())
           .setPoolSubscriptionMessageTrackingTimeout(
               poolAttr.getSubscriptionMessageTrackingTimeout())
+          .setPoolSubscriptionTimeoutMultiplier(poolAttr.getSubscriptionTimeoutMultiplier())
           .setPoolSubscriptionAckInterval(poolAttr.getSubscriptionAckInterval())
           .setPoolServerGroup(poolAttr.getServerGroup())
           .setPoolMultiuserAuthentication(poolAttr.getMultiuserAuthentication());

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