GEODE-8779: Register interest only when local cache is enabled. (#5836)
diff --git a/extensions/geode-modules-session-internal/src/main/java/org/apache/geode/modules/session/internal/common/ClientServerSessionCache.java b/extensions/geode-modules-session-internal/src/main/java/org/apache/geode/modules/session/internal/common/ClientServerSessionCache.java
index 603248a..7633f36 100644
--- a/extensions/geode-modules-session-internal/src/main/java/org/apache/geode/modules/session/internal/common/ClientServerSessionCache.java
+++ b/extensions/geode-modules-session-internal/src/main/java/org/apache/geode/modules/session/internal/common/ClientServerSessionCache.java
@@ -23,6 +23,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.apache.geode.cache.DataPolicy;
import org.apache.geode.cache.GemFireCache;
import org.apache.geode.cache.InterestResultPolicy;
import org.apache.geode.cache.Region;
@@ -127,7 +128,9 @@
LOG.debug("Retrieved session region: " + this.sessionRegion);
// Register interest in case users provide their own client cache region
- sessionRegion.registerInterestForAllKeys(InterestResultPolicy.KEYS);
+ if (sessionRegion.getAttributes().getDataPolicy() != DataPolicy.EMPTY) {
+ sessionRegion.registerInterestForAllKeys(InterestResultPolicy.KEYS);
+ }
}
}
@@ -175,7 +178,9 @@
// Create the region
Region region = factory.create(regionName);
- region.registerInterestForAllKeys(InterestResultPolicy.KEYS);
+ if (enableLocalCache) {
+ region.registerInterestForAllKeys(InterestResultPolicy.KEYS);
+ }
return region;
}
}
diff --git a/extensions/geode-modules/src/main/java/org/apache/geode/modules/session/catalina/ClientServerSessionCache.java b/extensions/geode-modules/src/main/java/org/apache/geode/modules/session/catalina/ClientServerSessionCache.java
index 107fb32..8f54abd 100644
--- a/extensions/geode-modules/src/main/java/org/apache/geode/modules/session/catalina/ClientServerSessionCache.java
+++ b/extensions/geode-modules/src/main/java/org/apache/geode/modules/session/catalina/ClientServerSessionCache.java
@@ -20,6 +20,7 @@
import javax.servlet.http.HttpSession;
+import org.apache.geode.cache.DataPolicy;
import org.apache.geode.cache.GemFireCache;
import org.apache.geode.cache.InterestResultPolicy;
import org.apache.geode.cache.Region;
@@ -189,7 +190,9 @@
sessionRegion.getAttributesMutator().addCacheListener(new SessionExpirationCacheListener());
}
- sessionRegion.registerInterestForAllKeys(InterestResultPolicy.KEYS);
+ if (sessionRegion.getAttributes().getDataPolicy() != DataPolicy.EMPTY) {
+ sessionRegion.registerInterestForAllKeys(InterestResultPolicy.KEYS);
+ }
}
}
@@ -224,10 +227,11 @@
Region<String, HttpSession> createLocalSessionRegionWithRegisterInterest() {
Region<String, HttpSession> region = createLocalSessionRegion();
- // register interest are needed for proxy or caching-proxy client:
+ // register interest are needed for caching proxy client:
// to get updates from server if local cache is enabled;
- // to get callbacks for listener invocation for proxy client.
- region.registerInterestForAllKeys(InterestResultPolicy.KEYS);
+ if (region.getAttributes().getDataPolicy() != DataPolicy.EMPTY) {
+ region.registerInterestForAllKeys(InterestResultPolicy.KEYS);
+ }
return region;
}
diff --git a/extensions/geode-modules/src/test/java/org/apache/geode/modules/session/catalina/AbstractSessionCacheTest.java b/extensions/geode-modules/src/test/java/org/apache/geode/modules/session/catalina/AbstractSessionCacheTest.java
index 32cecd8..cfc1d6b 100644
--- a/extensions/geode-modules/src/test/java/org/apache/geode/modules/session/catalina/AbstractSessionCacheTest.java
+++ b/extensions/geode-modules/src/test/java/org/apache/geode/modules/session/catalina/AbstractSessionCacheTest.java
@@ -18,6 +18,7 @@
import static org.apache.geode.util.internal.UncheckedUtils.uncheckedCast;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
@@ -51,7 +52,8 @@
protected SessionManager sessionManager = mock(SessionManager.class);
- protected Region<String, HttpSession> sessionRegion = uncheckedCast(mock(Region.class));
+ protected Region<String, HttpSession> sessionRegion =
+ uncheckedCast(mock(Region.class, RETURNS_DEEP_STUBS));
protected DistributedSystem distributedSystem = mock(DistributedSystem.class);
protected Log logger = mock(Log.class);
protected Execution<Object, Object, List<Object>> emptyExecution =
diff --git a/extensions/geode-modules/src/test/java/org/apache/geode/modules/session/catalina/ClientServerSessionCacheTest.java b/extensions/geode-modules/src/test/java/org/apache/geode/modules/session/catalina/ClientServerSessionCacheTest.java
index d89901b..d3cd56b 100644
--- a/extensions/geode-modules/src/test/java/org/apache/geode/modules/session/catalina/ClientServerSessionCacheTest.java
+++ b/extensions/geode-modules/src/test/java/org/apache/geode/modules/session/catalina/ClientServerSessionCacheTest.java
@@ -19,10 +19,12 @@
import static org.apache.geode.util.internal.UncheckedUtils.uncheckedCast;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -234,7 +236,7 @@
doReturn(sessionRegion).when(cache).getRegion(sessionRegionName);
doReturn(attributes).when(sessionRegion).getAttributes();
doReturn(cacheListeners).when(attributes).getCacheListeners();
- when(attributes.getDataPolicy()).thenReturn(DataPolicy.EMPTY);
+ when(attributes.getDataPolicy()).thenReturn(DataPolicy.DEFAULT);
sessionCache.initialize();
@@ -242,6 +244,20 @@
}
@Test
+ public void createOrRetrieveRegionWithNonNullSessionProxyRegionNotRegistersInterestIfEmpty() {
+ final CacheListener<String, HttpSession>[] cacheListeners =
+ uncheckedCast(new CacheListener[] {new SessionExpirationCacheListener()});
+ doReturn(sessionRegion).when(cache).getRegion(sessionRegionName);
+ doReturn(attributes).when(sessionRegion).getAttributes();
+ doReturn(cacheListeners).when(attributes).getCacheListeners();
+ when(attributes.getDataPolicy()).thenReturn(DataPolicy.EMPTY);
+
+ sessionCache.initialize();
+
+ verify(sessionRegion, never()).registerInterestForAllKeys(InterestResultPolicy.KEYS);
+ }
+
+ @Test
public void touchSessionsInvokesPRFunctionForPRAndDoesNotThrowExceptionWhenFunctionDoesNotThrowException() {
final Set<String> sessionIds = new HashSet<>();
@@ -325,7 +341,7 @@
public void registerInterestForSessionRegion() {
final SessionManager manager = mock(SessionManager.class);
final ClientCache clientCache = mock(ClientCache.class);
- final Region region = mock(Region.class);
+ final Region<?, ?> region = mock(Region.class, RETURNS_DEEP_STUBS);
final ClientServerSessionCache cache = spy(new ClientServerSessionCache(manager, clientCache));
doReturn(region).when(cache).createLocalSessionRegion();
@@ -334,4 +350,19 @@
verify(region).registerInterestForAllKeys(InterestResultPolicy.KEYS);
}
+ @Test
+ public void doesNotRegisterInterestIfLocalCacheNotEnabled() {
+ final SessionManager manager = mock(SessionManager.class);
+ final ClientCache clientCache = mock(ClientCache.class);
+ final Region<?, ?> region = mock(Region.class);
+ final RegionAttributes<?, ?> attributes = mock(RegionAttributes.class);
+ final ClientServerSessionCache cache = spy(new ClientServerSessionCache(manager, clientCache));
+ doReturn(region).when(cache).createLocalSessionRegion();
+ doReturn(attributes).when(region).getAttributes();
+ doReturn(DataPolicy.EMPTY).when(attributes).getDataPolicy();
+
+ cache.createLocalSessionRegionWithRegisterInterest();
+
+ verify(region, never()).registerInterestForAllKeys(InterestResultPolicy.KEYS);
+ }
}