You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@geode.apache.org by "Eric Shu (Jira)" <ji...@apache.org> on 2020/02/07 21:55:00 UTC
[jira] [Created] (GEODE-7780) Geode session management could update
a stale state and cause some session attributes to be lost if
enableLocalCache is set to true
Eric Shu created GEODE-7780:
-------------------------------
Summary: 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
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)