Haha, Scott you're here too?

On Thu, Oct 25, 2012 at 2:06 PM, Scott Carlson <scott.a.carl...@gmail.com>wrote:

> We've setup TC 7.0.32 with Clustering and Tomcat Container Managed
> Authentication.   HTTPSessions and SSOSessions are clustered across the
> wire.  With logging turned way up, I can see the synchronization and I can
> see the sessions in the Tomcat Manager.
>
> When I "kill -9" one of the tomcats, I'm automatically swapped to the other
> leg, and I'm still logged in.  So it "works", unless I do a catalina.sh
> shutdown.  In that case, the SSO session is expired from the other leg.
>  The HTTPSession is still there, but because the SSO session is expired,
> I'm forced to login again.  This doesn't seem correct.  The DeltaSession
> looks at the notifyCluster parameter before sending a message to expire the
> HTTPSession, but the ClusterSingleSignOn valve has already sent its message
> to expire the SSO session by then.  So the SSO is missing for the session.
>
> When shutting down, the stack trace looks like this (with some relevant
> parameters replaced in line)  isExpireSessionsOnShutdown() == false
> ClusterSingleSignOn.deregister(SSOID) line: 274
> ClusterSingleSignOn(SingleSignOn).sessionEvent(SessionEvent) line: 247
>
> DeltaSession(StandardSession).fireSessionEvent(Session.SESSION_DESTROYED_EVENT,
> null) line: 1752
> DeltaSession(StandardSession).expire(true) line: 844
> DeltaSession.expire(true, false) line: 462
> DeltaManager.stopInternal() line: 967
> DeltaManager(LifecycleBase).stop() line: 232
> StandardContext.stopInternal() line: 5474
> StandardContext(LifecycleBase).stop() line: 232
>
>
> When doing a normal session invalidation (for logout), it ends up doing the
> same thing, which is correct.
> ClusterSingleSignOn.deregister(SSOID) line: 276
> ClusterSingleSignOn(SingleSignOn).sessionEvent(SessionEvent) line: 247
>
>
> DeltaSession(StandardSession).fireSessionEvent(Session.SESSION_DESTROYED_EVENT,
> null) line: 1752
>         DeltaSession(StandardSession).expire(true) line: 844
>         DeltaSession.expire(true, true) line: 462
>         DeltaSession.expire(true) line: 444
>         DeltaSession(StandardSession).expire() line: 742
>         DeltaSession(StandardSession).invalidate() line: 1253
> StandardSessionFacade.invalidate() line: 190
>
> So I can't just change the DeltaSession to ignore that event.  I can't just
> have expire not call the super, or the HTTPSessionListeners would not be
> called.
>
> I think this is a bug, but I don't see even a good fix for it.  Ideas? If
> this does look like a bug, I can log an issue for it.
>
>
> Relevant server.xml here:
> <Host name="localhost" appBase="webapps" unpackWARs="true"
> autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
>         <Valve
> className="org.apache.catalina.ha.authenticator.ClusterSingleSignOn" />
>         <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
> channelSendOptions="8">
>           <Manager className="org.apache.catalina.ha.session.DeltaManager"
> />
>           <Channel
> className="org.apache.catalina.tribes.group.GroupChannel">
>              ....
>           </Channel>
>           <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
> filter="" statistics="true" />
>           <Valve
> className="org.apache.catalina.ha.session.JvmRouteBinderValve" />
>           <ClusterListener
> className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"
> />
>           <ClusterListener
> className="org.apache.catalina.ha.session.ClusterSessionListener" />
>         </Cluster>
> </Host>
>
> The context XML just has a JDBCRealm realm configuration.
>

Reply via email to