Revert "GEODE-1675: Fix ClassCastException in ClientServer expiry"
This reverts commit 306fda0860218e5a80f3064c55b04396e9e653d1. Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/a0a1fdc1 Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/a0a1fdc1 Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/a0a1fdc1 Branch: refs/heads/feature/GEODE-420 Commit: a0a1fdc1c2d7571b0fb45c0b2902b5a5cd47a16d Parents: 88b561d Author: Jason Huynh <[email protected]> Authored: Sun Aug 21 09:07:58 2016 -0700 Committer: Jason Huynh <[email protected]> Committed: Sun Aug 21 09:08:29 2016 -0700 ---------------------------------------------------------------------- .../modules/session/catalina/DeltaSession8.java | 5 +- .../session/TestSessionsTomcat8Base.java | 54 ++++++++--- .../Tomcat8SessionsClientServerDUnitTest.java | 96 -------------------- .../session/Tomcat8SessionsDUnitTest.java | 77 ---------------- .../session/Tomcat8SessionsJUnitTest.java | 32 +++++++ .../session/bootstrap/AbstractCache.java | 4 +- .../session/bootstrap/ClientServerCache.java | 2 +- .../session/bootstrap/PeerToPeerCache.java | 2 +- .../modules/session/catalina/DeltaSession.java | 5 +- .../session/catalina/DeltaSessionInterface.java | 1 - .../SessionExpirationCacheListener.java | 5 +- 11 files changed, 86 insertions(+), 197 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/a0a1fdc1/extensions/geode-modules-tomcat8/src/main/java/com/gemstone/gemfire/modules/session/catalina/DeltaSession8.java ---------------------------------------------------------------------- diff --git a/extensions/geode-modules-tomcat8/src/main/java/com/gemstone/gemfire/modules/session/catalina/DeltaSession8.java b/extensions/geode-modules-tomcat8/src/main/java/com/gemstone/gemfire/modules/session/catalina/DeltaSession8.java index 0b9f58f..aa07b5b 100644 --- a/extensions/geode-modules-tomcat8/src/main/java/com/gemstone/gemfire/modules/session/catalina/DeltaSession8.java +++ b/extensions/geode-modules-tomcat8/src/main/java/com/gemstone/gemfire/modules/session/catalina/DeltaSession8.java @@ -309,11 +309,9 @@ public class DeltaSession8 extends StandardSession implements DataSerializable, } public void processExpired() { - DeltaSessionManager manager = (DeltaSessionManager) getManager(); - if (manager != null && manager.getLogger() != null && manager.getLogger().isDebugEnabled()) { + if (((DeltaSessionManager) getManager()).getLogger().isDebugEnabled()) { ((DeltaSessionManager) getManager()).getLogger().debug(this + ": Expired"); } - // Set expired (so region.destroy is not called again) setExpired(true); @@ -321,6 +319,7 @@ public class DeltaSession8 extends StandardSession implements DataSerializable, expire(); // Update statistics + DeltaSessionManager manager = (DeltaSessionManager) getManager(); if (manager != null) { manager.getStatistics().incSessionsExpired(); } http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/a0a1fdc1/extensions/geode-modules-tomcat8/src/test/java/com/gemstone/gemfire/modules/session/TestSessionsTomcat8Base.java ---------------------------------------------------------------------- diff --git a/extensions/geode-modules-tomcat8/src/test/java/com/gemstone/gemfire/modules/session/TestSessionsTomcat8Base.java b/extensions/geode-modules-tomcat8/src/test/java/com/gemstone/gemfire/modules/session/TestSessionsTomcat8Base.java index f8604bf..76b301d 100644 --- a/extensions/geode-modules-tomcat8/src/test/java/com/gemstone/gemfire/modules/session/TestSessionsTomcat8Base.java +++ b/extensions/geode-modules-tomcat8/src/test/java/com/gemstone/gemfire/modules/session/TestSessionsTomcat8Base.java @@ -35,28 +35,60 @@ import org.junit.AfterClass; import org.junit.Before; import org.junit.Test; -import com.gemstone.gemfire.cache.Cache; import com.gemstone.gemfire.cache.Region; +import com.gemstone.gemfire.internal.AvailablePortHelper; +import com.gemstone.gemfire.modules.session.catalina.ClientServerCacheLifecycleListener; import com.gemstone.gemfire.modules.session.catalina.DeltaSessionManager; -import com.gemstone.gemfire.test.dunit.VM; -import com.gemstone.gemfire.test.dunit.internal.JUnit4DistributedTestCase; +import com.gemstone.gemfire.modules.session.catalina.PeerToPeerCacheLifecycleListener; -public abstract class TestSessionsTomcat8Base extends JUnit4DistributedTestCase{ +public abstract class TestSessionsTomcat8Base { - protected static EmbeddedTomcat8 server; + private static EmbeddedTomcat8 server; - protected static Region<String, HttpSession> region; + private static Region<String, HttpSession> region; - protected static StandardWrapper servlet; + private static StandardWrapper servlet; - protected static DeltaSessionManager sessionManager; + private static DeltaSessionManager sessionManager; - protected static int port; + private static int port; - protected Cache cache; + // Set up the servers we need + public static void setupServer(DeltaSessionManager manager) throws Exception { + port = AvailablePortHelper.getRandomAvailableTCPPort(); + server = new EmbeddedTomcat8("/test", port, "JVM-1"); - protected VM vm0; + PeerToPeerCacheLifecycleListener p2pListener = new PeerToPeerCacheLifecycleListener(); + p2pListener.setProperty(MCAST_PORT, "0"); + p2pListener.setProperty(LOG_LEVEL, "config"); + server.addLifecycleListener(p2pListener); + sessionManager = manager; + sessionManager.setEnableCommitValve(true); + server.getRootContext().setManager(sessionManager); + servlet = server.addServlet("/test/*", "default", CommandServlet.class.getName()); + server.startContainer(); + + /* + * Can only retrieve the region once the container has started up + * (and the cache has started too). + */ + region = sessionManager.getSessionCache().getSessionRegion(); + } + + @AfterClass + public static void teardownClass() throws Exception { + server.stopContainer(); + } + + /** + * Reset some data + */ + @Before + public void setup() throws Exception { + sessionManager.getTheContext().setSessionTimeout(30); + region.clear(); + } /** * Check that the basics are working http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/a0a1fdc1/extensions/geode-modules-tomcat8/src/test/java/com/gemstone/gemfire/modules/session/Tomcat8SessionsClientServerDUnitTest.java ---------------------------------------------------------------------- diff --git a/extensions/geode-modules-tomcat8/src/test/java/com/gemstone/gemfire/modules/session/Tomcat8SessionsClientServerDUnitTest.java b/extensions/geode-modules-tomcat8/src/test/java/com/gemstone/gemfire/modules/session/Tomcat8SessionsClientServerDUnitTest.java deleted file mode 100644 index ca9cdbe..0000000 --- a/extensions/geode-modules-tomcat8/src/test/java/com/gemstone/gemfire/modules/session/Tomcat8SessionsClientServerDUnitTest.java +++ /dev/null @@ -1,96 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -package com.gemstone.gemfire.modules.session; - -import static com.gemstone.gemfire.distributed.ConfigurationProperties.*; -import static com.gemstone.gemfire.internal.cache.CacheServerLauncher.serverPort; - -import java.util.Properties; - -import org.junit.experimental.categories.Category; - -import com.gemstone.gemfire.cache.Cache; -import com.gemstone.gemfire.cache.CacheFactory; -import com.gemstone.gemfire.cache.client.PoolFactory; -import com.gemstone.gemfire.cache.client.PoolManager; -import com.gemstone.gemfire.cache.server.CacheServer; -import com.gemstone.gemfire.internal.AvailablePortHelper; -import com.gemstone.gemfire.internal.cache.GemFireCacheImpl; -import com.gemstone.gemfire.modules.session.catalina.ClientServerCacheLifecycleListener; -import com.gemstone.gemfire.modules.session.catalina.DeltaSessionManager; -import com.gemstone.gemfire.modules.session.catalina.Tomcat8DeltaSessionManager; -import com.gemstone.gemfire.test.dunit.Host; -import com.gemstone.gemfire.test.junit.categories.DistributedTest; -import com.gemstone.gemfire.test.junit.categories.UnitTest; - -@Category(DistributedTest.class) -public class Tomcat8SessionsClientServerDUnitTest extends TestSessionsTomcat8Base { - - // Set up the session manager we need - @Override - public void postSetUp() throws Exception { - setupServer(new Tomcat8DeltaSessionManager()); - } - - @Override - public void preTearDown() { - vm0.invoke(() -> { - GemFireCacheImpl.getInstance().getCacheServers().forEach(e -> ((CacheServer)e).stop()); - }); - server.stopContainer(); - } - - // Set up the servers we need - public void setupServer(DeltaSessionManager manager) throws Exception { - Host host = Host.getHost(0); - vm0 = host.getVM(1); - String hostName = vm0.getHost().getHostName(); - int cacheServerPort = vm0.invoke(() -> { - Properties props = new Properties(); - CacheFactory cf = new CacheFactory(props); - Cache cache = cf.create(); - CacheServer server = cache.addCacheServer(); - server.start(); - return server.getPort(); - }); - - port = AvailablePortHelper.getRandomAvailableTCPPort(); - server = new EmbeddedTomcat8("/test", port, "JVM-1"); - - ClientServerCacheLifecycleListener listener = new ClientServerCacheLifecycleListener(); - listener.setProperty(MCAST_PORT, "0"); - listener.setProperty(LOG_LEVEL, "config"); - server.addLifecycleListener(listener); - sessionManager = manager; - sessionManager.setEnableCommitValve(true); - server.getRootContext().setManager(sessionManager); - - servlet = server.addServlet("/test/*", "default", CommandServlet.class.getName()); - server.startContainer(); - - PoolFactory pf = PoolManager.createFactory(); - pf.addServer(hostName, cacheServerPort); - pf.create("Pool Connecting to Cache Server"); - - /* - * Can only retrieve the region once the container has started up - * (and the cache has started too). - */ - region = sessionManager.getSessionCache().getSessionRegion(); - sessionManager.getTheContext().setSessionTimeout(30); - } -} http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/a0a1fdc1/extensions/geode-modules-tomcat8/src/test/java/com/gemstone/gemfire/modules/session/Tomcat8SessionsDUnitTest.java ---------------------------------------------------------------------- diff --git a/extensions/geode-modules-tomcat8/src/test/java/com/gemstone/gemfire/modules/session/Tomcat8SessionsDUnitTest.java b/extensions/geode-modules-tomcat8/src/test/java/com/gemstone/gemfire/modules/session/Tomcat8SessionsDUnitTest.java deleted file mode 100644 index e573c4e..0000000 --- a/extensions/geode-modules-tomcat8/src/test/java/com/gemstone/gemfire/modules/session/Tomcat8SessionsDUnitTest.java +++ /dev/null @@ -1,77 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -package com.gemstone.gemfire.modules.session; - -import static com.gemstone.gemfire.distributed.ConfigurationProperties.*; - -import com.gemstone.gemfire.internal.AvailablePortHelper; -import com.gemstone.gemfire.modules.session.catalina.DeltaSessionManager; -import com.gemstone.gemfire.modules.session.catalina.PeerToPeerCacheLifecycleListener; -import com.gemstone.gemfire.modules.session.catalina.Tomcat8DeltaSessionManager; -import com.gemstone.gemfire.test.junit.categories.DistributedTest; -import com.gemstone.gemfire.test.junit.categories.UnitTest; - -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.experimental.categories.Category; - -@Category(DistributedTest.class) -public class Tomcat8SessionsDUnitTest extends TestSessionsTomcat8Base { - - // Set up the session manager we need - @Override - public void postSetUp() throws Exception { - setupServer(new Tomcat8DeltaSessionManager()); - } - - @Override - public void preTearDown() throws Exception { - server.stopContainer(); - } - - public void setupServer(DeltaSessionManager manager) throws Exception { - port = AvailablePortHelper.getRandomAvailableTCPPort(); - server = new EmbeddedTomcat8("/test", port, "JVM-1"); - - PeerToPeerCacheLifecycleListener p2pListener = new PeerToPeerCacheLifecycleListener(); - p2pListener.setProperty(MCAST_PORT, "0"); - p2pListener.setProperty(LOG_LEVEL, "config"); - server.addLifecycleListener(p2pListener); - sessionManager = manager; - sessionManager.setEnableCommitValve(true); - server.getRootContext().setManager(sessionManager); - - servlet = server.addServlet("/test/*", "default", CommandServlet.class.getName()); - server.startContainer(); - - /* - * Can only retrieve the region once the container has started up - * (and the cache has started too). - */ - region = sessionManager.getSessionCache().getSessionRegion(); - } - - /** - * Reset some data - */ - @Before - public void setup() throws Exception { - sessionManager.getTheContext().setSessionTimeout(30); - region.clear(); - } -} http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/a0a1fdc1/extensions/geode-modules-tomcat8/src/test/java/com/gemstone/gemfire/modules/session/Tomcat8SessionsJUnitTest.java ---------------------------------------------------------------------- diff --git a/extensions/geode-modules-tomcat8/src/test/java/com/gemstone/gemfire/modules/session/Tomcat8SessionsJUnitTest.java b/extensions/geode-modules-tomcat8/src/test/java/com/gemstone/gemfire/modules/session/Tomcat8SessionsJUnitTest.java new file mode 100644 index 0000000..df65690 --- /dev/null +++ b/extensions/geode-modules-tomcat8/src/test/java/com/gemstone/gemfire/modules/session/Tomcat8SessionsJUnitTest.java @@ -0,0 +1,32 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +package com.gemstone.gemfire.modules.session; + +import com.gemstone.gemfire.modules.session.catalina.Tomcat8DeltaSessionManager; +import com.gemstone.gemfire.test.junit.categories.UnitTest; +import org.junit.BeforeClass; +import org.junit.experimental.categories.Category; + +@Category(UnitTest.class) +public class Tomcat8SessionsJUnitTest extends TestSessionsTomcat8Base { + + // Set up the session manager we need + @BeforeClass + public static void setupClass() throws Exception { + setupServer(new Tomcat8DeltaSessionManager()); + } +} http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/a0a1fdc1/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/session/bootstrap/AbstractCache.java ---------------------------------------------------------------------- diff --git a/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/session/bootstrap/AbstractCache.java b/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/session/bootstrap/AbstractCache.java index 9704853..c14f829 100644 --- a/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/session/bootstrap/AbstractCache.java +++ b/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/session/bootstrap/AbstractCache.java @@ -90,7 +90,9 @@ public abstract class AbstractCache { rebalanceCache(); } } else if (eventType.equals(LifecycleTypeAdapter.STOP)) { - started.set(false); + // Close the cache +// closeCache(); + // TODO: Do we need to reset the started flag here? } } http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/a0a1fdc1/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/session/bootstrap/ClientServerCache.java ---------------------------------------------------------------------- diff --git a/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/session/bootstrap/ClientServerCache.java b/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/session/bootstrap/ClientServerCache.java index a4bd7a5..f8cff16 100644 --- a/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/session/bootstrap/ClientServerCache.java +++ b/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/session/bootstrap/ClientServerCache.java @@ -52,7 +52,7 @@ public class ClientServerCache extends AbstractCache { // If no cache exists, create one String message = null; - if (this.cache == null || this.cache.isClosed()) { + if (this.cache == null) { // enable pool subscription so that default cache can be used by hibernate module this.cache = new ClientCacheFactory(createDistributedSystemProperties()).create(); message = "Created "; http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/a0a1fdc1/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/session/bootstrap/PeerToPeerCache.java ---------------------------------------------------------------------- diff --git a/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/session/bootstrap/PeerToPeerCache.java b/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/session/bootstrap/PeerToPeerCache.java index 92c5f1f..b0b3b4a 100644 --- a/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/session/bootstrap/PeerToPeerCache.java +++ b/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/session/bootstrap/PeerToPeerCache.java @@ -55,7 +55,7 @@ public class PeerToPeerCache extends AbstractCache { // If no cache exists, create one String message = null; - if (this.cache == null || cache.isClosed()) { + if (this.cache == null) { this.cache = new CacheFactory(createDistributedSystemProperties()).create(); message = "Created "; } else { http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/a0a1fdc1/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/session/catalina/DeltaSession.java ---------------------------------------------------------------------- diff --git a/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/session/catalina/DeltaSession.java b/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/session/catalina/DeltaSession.java index 754376a..ff7133d 100644 --- a/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/session/catalina/DeltaSession.java +++ b/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/session/catalina/DeltaSession.java @@ -317,11 +317,9 @@ public class DeltaSession extends StandardSession implements DataSerializable, D } public void processExpired() { - DeltaSessionManager manager = (DeltaSessionManager) getManager(); - if (manager != null && manager.getLogger() != null && manager.getLogger().isDebugEnabled()) { + if (((DeltaSessionManager) getManager()).getLogger().isDebugEnabled()) { ((DeltaSessionManager) getManager()).getLogger().debug(this + ": Expired"); } - // Set expired (so region.destroy is not called again) setExpired(true); @@ -329,6 +327,7 @@ public class DeltaSession extends StandardSession implements DataSerializable, D expire(); // Update statistics + DeltaSessionManager manager = (DeltaSessionManager) getManager(); if (manager != null) { manager.getStatistics().incSessionsExpired(); } http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/a0a1fdc1/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/session/catalina/DeltaSessionInterface.java ---------------------------------------------------------------------- diff --git a/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/session/catalina/DeltaSessionInterface.java b/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/session/catalina/DeltaSessionInterface.java index a293432..1d3d1f7 100644 --- a/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/session/catalina/DeltaSessionInterface.java +++ b/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/session/catalina/DeltaSessionInterface.java @@ -49,5 +49,4 @@ public interface DeltaSessionInterface extends Session { void setOwner(Object manager); void activate(); - void processExpired(); } http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/a0a1fdc1/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/session/catalina/callback/SessionExpirationCacheListener.java ---------------------------------------------------------------------- diff --git a/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/session/catalina/callback/SessionExpirationCacheListener.java b/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/session/catalina/callback/SessionExpirationCacheListener.java index 4fd1136..5893c95 100644 --- a/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/session/catalina/callback/SessionExpirationCacheListener.java +++ b/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/session/catalina/callback/SessionExpirationCacheListener.java @@ -21,7 +21,6 @@ import com.gemstone.gemfire.cache.EntryEvent; import com.gemstone.gemfire.cache.Operation; import com.gemstone.gemfire.cache.util.CacheListenerAdapter; import com.gemstone.gemfire.modules.session.catalina.DeltaSession; -import com.gemstone.gemfire.modules.session.catalina.DeltaSessionInterface; import com.gemstone.gemfire.modules.session.catalina.DeltaSessionManager; import com.gemstone.gemfire.modules.util.ContextMapper; @@ -36,9 +35,9 @@ public class SessionExpirationCacheListener extends CacheListenerAdapter<String, // A Session expired. If it was destroyed by GemFire expiration, process it. // If it was destroyed via Session.invalidate, ignore it since it has // already been processed. - DeltaSessionInterface session = null; + DeltaSession session = null; if (event.getOperation() == Operation.EXPIRE_DESTROY) { - session = (DeltaSessionInterface) event.getOldValue(); + session = (DeltaSession) event.getOldValue(); } else { /* * This comes into play when we're dealing with an empty client proxy. We
