[
https://issues.apache.org/jira/browse/GEODE-7780?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17032703#comment-17032703
]
Eric Shu commented on GEODE-7780:
---------------------------------
Please note when using sticky session set on tomcat servers, this issue would
not occur without tomcat server failover. If connection to one Tomcat server
failed and then fail over to another tomcat server, this issue could
potentially occur if there are events still in HARegionQueue for the particular
session.
> Geode session management could update a stale state and cause some session
> attributes to be lost if enableLocalCache is set to true
> -----------------------------------------------------------------------------------------------------------------------------------
>
> Key: GEODE-7780
> URL: https://issues.apache.org/jira/browse/GEODE-7780
> Project: Geode
> Issue Type: Bug
> Components: http session
> Reporter: Eric Shu
> Priority: Major
>
> I have analyzed the test failure
> (https://issues.apache.org/jira/browse/GEODE-7753) and found out the cause.
> What happened is that for every session get (get through geode client local
> caching), geode session management will do a put of that session to reset the
> lastAccessTime on all servers and local caches used by Tomcat servers.
> Please see the code below:
> {code:java}
> public void commit() {
> if (!isValidInternal())
> throw new IllegalStateException("commit: Session " + getId() + "
> already invalidated");
> // (STRING_MANAGER.getString("deltaSession.commit.ise", getId()));
> synchronized (this.changeLock) {
> // Jens - there used to be a check to only perform this if the queue is
> // empty, but we want this to always run so that the lastAccessedTime
> // will be updated even when no attributes have been changed.
> DeltaSessionManager mgr = (DeltaSessionManager) this.manager;
> if (this.enableGatewayDeltaReplication && mgr.isPeerToPeer()) {
> setCurrentGatewayDeltaEvent(
> new DeltaSessionAttributeEventBatch(this.sessionRegionName,
> this.id, this.eventQueue));
> }
> this.hasDelta = true;
> this.applyRemotely = true;
> putInRegion(getOperatingRegion(), true, null);
> this.eventQueue.clear();
> }
> }
> {code}
> However, because this is a client local cache, the get could have stale data
> (some delta updates have not been delivered yet through HARegionQueue). This
> new update will update on server to be a staled data (lost some of the
> attributes).
> The stack shows the get and the following put of the session are:
> {noformat}
> at
> org.apache.geode.internal.cache.LocalRegion.get(LocalRegion.java:1312)
> at
> org.apache.geode.internal.cache.AbstractRegion.get(AbstractRegion.java:436)
> at
> org.apache.geode.modules.session.catalina.AbstractSessionCache.getSession(AbstractSessionCache.java:69)
> at
> org.apache.geode.modules.session.catalina.DeltaSessionManager.findSession(DeltaSessionManager.java:340)
> at
> org.apache.catalina.connector.Request.doGetSession(Request.java:2951)
> at
> org.apache.catalina.connector.Request.getSessionInternal(Request.java:2677)
> at
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:460)
> at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
> at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
> at
> org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668)
> at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
> at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
> at
> org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
> at
> org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
> at
> org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:770)
> at
> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
> at
> org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
> at
> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
> at java.lang.Thread.run(Thread.java:748)
> {noformat}
> and
> {noformat}
> at
> org.apache.geode.internal.cache.LocalRegion.put(LocalRegion.java:1628)
> at
> org.apache.geode.modules.session.catalina.DeltaSession.putInRegion(DeltaSession.java:442)
> at
> org.apache.geode.modules.session.catalina.DeltaSession.commit(DeltaSession.java:469)
> at
> org.apache.geode.modules.session.catalina.DeltaSessionFacade.commit(DeltaSessionFacade.java:36)
> at
> org.apache.geode.modules.session.catalina.CommitSessionValve.invoke(CommitSessionValve.java:56)
> at
> org.apache.geode.modules.session.catalina.JvmRouteBinderValve.invoke(JvmRouteBinderValve.java:45)
> at
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
> at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
> at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
> at
> org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668)
> at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
> at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
> at
> org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
> at
> org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
> at
> org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:770)
> at
> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
> at
> org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
> at
> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
> at java.lang.Thread.run(Thread.java:748)
> {noformat}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)