You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ja...@apache.org on 2018/04/18 18:38:49 UTC

[geode] branch develop updated: GEODE-4838: Throw IllegalStateException when registerinterest on PR in loner (#1614)

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 6d3771d  GEODE-4838: Throw IllegalStateException when registerinterest on PR in loner (#1614)
6d3771d is described below

commit 6d3771d9a80d32fdfe2164e3150b46152b28a85e
Author: Jason Huynh <hu...@gmail.com>
AuthorDate: Wed Apr 18 11:38:45 2018 -0700

    GEODE-4838: Throw IllegalStateException when registerinterest on PR in loner (#1614)
---
 .../tier/sockets/command/RegisterInterest61.java   |  7 +++
 .../cache30/ClientRegisterInterestDUnitTest.java   | 59 ++++++++++++++++++++++
 2 files changed, 66 insertions(+)

diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterest61.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterest61.java
index a358274..8ba3d24 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterest61.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterest61.java
@@ -19,9 +19,11 @@ import java.io.IOException;
 import org.apache.geode.cache.DynamicRegionFactory;
 import org.apache.geode.cache.InterestResultPolicy;
 import org.apache.geode.cache.operations.RegisterInterestOperationContext;
+import org.apache.geode.distributed.internal.LonerDistributionManager;
 import org.apache.geode.i18n.StringId;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.LocalRegion;
+import org.apache.geode.internal.cache.PartitionedRegion;
 import org.apache.geode.internal.cache.tier.CachedRegionHelper;
 import org.apache.geode.internal.cache.tier.Command;
 import org.apache.geode.internal.cache.tier.InterestType;
@@ -253,6 +255,11 @@ public class RegisterInterest61 extends BaseCommand {
 
       // Send chunk response
       try {
+        if (region.getDistributionManager() instanceof LonerDistributionManager
+            && region instanceof PartitionedRegion) {
+          throw new IllegalStateException(
+              "Should not register interest for a partitioned region when mcast-port is 0 and no locator is present");
+        }
         fillAndSendRegisterInterestResponseChunks(region, key, interestType, serializeValues,
             policy, serverConnection);
         serverConnection.setAsTrue(RESPONDED);
diff --git a/geode-core/src/test/java/org/apache/geode/cache30/ClientRegisterInterestDUnitTest.java b/geode-core/src/test/java/org/apache/geode/cache30/ClientRegisterInterestDUnitTest.java
index 8352207..1692a3d 100644
--- a/geode-core/src/test/java/org/apache/geode/cache30/ClientRegisterInterestDUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/cache30/ClientRegisterInterestDUnitTest.java
@@ -25,12 +25,20 @@ import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
 import org.apache.geode.cache.AttributesFactory;
+import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.CacheException;
+import org.apache.geode.cache.CacheFactory;
 import org.apache.geode.cache.CacheLoaderException;
 import org.apache.geode.cache.Region;
+import org.apache.geode.cache.RegionShortcut;
 import org.apache.geode.cache.Scope;
+import org.apache.geode.cache.client.ClientCache;
+import org.apache.geode.cache.client.ClientCacheFactory;
+import org.apache.geode.cache.client.ClientRegionShortcut;
+import org.apache.geode.cache.client.ServerOperationException;
 import org.apache.geode.cache.client.SubscriptionNotEnabledException;
 import org.apache.geode.cache.client.internal.PoolImpl;
+import org.apache.geode.cache.server.CacheServer;
 import org.apache.geode.test.dunit.Host;
 import org.apache.geode.test.dunit.LogWriterUtils;
 import org.apache.geode.test.dunit.NetworkUtils;
@@ -433,4 +441,55 @@ public class ClientRegisterInterestDUnitTest extends ClientServerTestCase {
     assertTrue(region2.getInterestList().contains(key2));
   }
 
+
+
+  @Test
+  public void rejectAttemptToRegisterInterestInLonerSystem() throws Exception {
+    final String name = this.getUniqueName();
+    final String regionName1 = name + "-1";
+
+    // create first bridge server with region for client...
+    final int firstServerIdx = 1;
+
+    final VM firstServerVM = Host.getHost(0).getVM(firstServerIdx);
+    firstServerVM.invoke(new CacheSerializableRunnable("Create first bridge server") {
+      public void run2() throws CacheException {
+        Cache cache = new CacheFactory().set("mcast-port", "0").create();
+
+        try {
+          CacheServer bridge = cache.addCacheServer();
+          bridge.setPort(0);
+          bridge.setMaxThreads(getMaxThreads());
+          bridge.start();
+          bridgeServerPort = bridge.getPort();
+        } catch (IOException e) {
+          LogWriterUtils.getLogWriter().error("startBridgeServer threw IOException", e);
+          fail("startBridgeServer threw IOException ", e);
+        }
+        assertTrue(bridgeServerPort != 0);
+
+        Region region1 = cache.createRegionFactory(RegionShortcut.PARTITION).create(regionName1);
+      }
+    });
+
+    // get the bridge server ports...
+    int port = firstServerVM.invoke(() -> ClientRegisterInterestDUnitTest.getBridgeServerPort());
+
+    try {
+      ClientCache clientCache =
+          new ClientCacheFactory().addPoolServer(firstServerVM.getHost().getHostName(), port)
+              .setPoolSubscriptionEnabled(true).create();
+      Region region = clientCache.createClientRegionFactory(ClientRegionShortcut.CACHING_PROXY)
+          .create(regionName1);
+      region.registerInterestRegex(".*");
+      fail();
+    } catch (ServerOperationException e) {
+      // expected
+      if (!e.getRootCause().getMessage().equals(
+          "Should not register interest for a partitioned region when mcast-port is 0 and no locator is present")) {
+        fail();
+      }
+    }
+  }
+
 }

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