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.