This is an automated email from the ASF dual-hosted git repository. eshu11 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 f53fa75 GEODE-8779: Register interest only when local cache is enabled. (#5836) f53fa75 is described below commit f53fa752e6d322d6fd24237212a3b958a5b882b8 Author: Eric Shu <e...@pivotal.io> AuthorDate: Mon Dec 14 17:42:00 2020 -0800 GEODE-8779: Register interest only when local cache is enabled. (#5836) --- .../internal/common/ClientServerSessionCache.java | 9 ++++-- .../session/catalina/ClientServerSessionCache.java | 12 +++++--- .../session/catalina/AbstractSessionCacheTest.java | 4 ++- .../catalina/ClientServerSessionCacheTest.java | 35 ++++++++++++++++++++-- 4 files changed, 51 insertions(+), 9 deletions(-) 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 javax.servlet.http.HttpSession; 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 @@ public class ClientServerSessionCache extends AbstractSessionCache { 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 @@ public class ClientServerSessionCache extends AbstractSessionCache { // 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 java.util.Set; 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 @@ public class ClientServerSessionCache extends AbstractSessionCache { sessionRegion.getAttributesMutator().addCacheListener(new SessionExpirationCacheListener()); } - sessionRegion.registerInterestForAllKeys(InterestResultPolicy.KEYS); + if (sessionRegion.getAttributes().getDataPolicy() != DataPolicy.EMPTY) { + sessionRegion.registerInterestForAllKeys(InterestResultPolicy.KEYS); + } } } @@ -224,10 +227,11 @@ public class ClientServerSessionCache extends AbstractSessionCache { 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 @@ package org.apache.geode.modules.session.catalina; 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 @@ public abstract class AbstractSessionCacheTest { 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.cache.Region.SEPARATOR; 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 @@ public class ClientServerSessionCacheTest extends AbstractSessionCacheTest { 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 @@ public class ClientServerSessionCacheTest extends AbstractSessionCacheTest { } @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 class ClientServerSessionCacheTest extends AbstractSessionCacheTest { 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 @@ public class ClientServerSessionCacheTest extends AbstractSessionCacheTest { 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); + } }