Cool, thanks for the quick fix. I'm seeing other issues that look like race condititions to me, but I've yet to find a consistent pattern.
I'll test this and let you know how it goes. Trygve On Thu, Jan 15, 2009 at 2:31 PM, Gianny Damour <[email protected]> wrote: > Hi Trygve, > > This was a bug and it is now fixed; I also changed the log level as ERROR > was indeed inappropriate. > > You will need to get a snapshot version of wadi-core as this was a problem > with WADI which was not properly re-initiating replicas when sessions were > evacuated from a node shutting down to all the remaining nodes. I will > review more closely the re-initialisation of replicas in the case of normal > shutdown over the week-end as there is still a problem in a very specific > race condition (I do not think that you will be able to observe it). > > > You can get the snapshot there: > > http://snapshots.repository.codehaus.org/org/codehaus/wadi/wadi-core/2.2-SNAPSHOT/wadi-core-2.2-20090115.131018-1.jar > > > The simplest thing is to replace > > repository/org/codehaus/wadi/wadi-core/2.1/wadi-core-2.1.jar > > with this snapshot version. You can also install this artefact in your repo > with a version number higher than 2.1. and it will be transparently > picked-up instead of 2.1. > > > I will need to cut a release of WADI very soon as these fixes need to be > included in G 2.2. So, you should not have to use this snapshot for more > than 3-4 days. > > Thanks, > Gianny > > On 14/01/2009, at 11:47 PM, Trygve Hardersen wrote: > >> Great, thanks a lot Gianny. >> >> I updated the source and I'm no longer getting the error. I am however >> seeing this upon session invalidation: >> >> 13:29:01,528 INFO [HybridRelocater] Unknown session [a4gezreo2fd4] >> 13:29:03,532 ERROR [StandardManager] Could not acquire session >> [a4gezreo2fd4] >> >> I guess this is because the browser is redirected after session >> invalidation but still includes the old session ID in the request. If so the >> log message from the StandardManager should probably not be at the ERROR >> level as it is a very common situation. Non-critical nevertheless. >> >> There is still an issue if I stop one of the nodes gracefully (i.e. >> $GERONIMO_HOME/bin/shutdown.sh). On subsequent requests I'm getting this >> error: >> >> 13:34:39,808 ERROR [log] /profile >> org.codehaus.wadi.replication.manager.ReplicationKeyNotFoundException: Key >> [v9ekd9eipx2h] does not exist >> at >> org.codehaus.wadi.replication.manager.basic.SyncReplicationManager.update(SyncReplicationManager.java:147) >> at >> org.codehaus.wadi.core.session.AbstractReplicableSession.onEndProcessing(AbstractReplicableSession.java:49) >> at >> org.codehaus.wadi.core.session.AtomicallyReplicableSession.onEndProcessing(AtomicallyReplicableSession.java:58) >> at >> org.codehaus.wadi.web.impl.WebInvocation.invoke(WebInvocation.java:121) >> at >> org.codehaus.wadi.core.contextualiser.MemoryContextualiser.handleLocally(MemoryContextualiser.java:71) >> at >> org.codehaus.wadi.core.contextualiser.AbstractExclusiveContextualiser.handle(AbstractExclusiveContextualiser.java:94) >> at >> org.codehaus.wadi.core.contextualiser.AbstractMotingContextualiser.contextualise(AbstractMotingContextualiser.java:37) >> at >> org.codehaus.wadi.core.manager.StandardManager.processStateful(StandardManager.java:150) >> at >> org.codehaus.wadi.core.manager.StandardManager.contextualise(StandardManager.java:142) >> at >> org.codehaus.wadi.core.manager.ClusteredManager.contextualise(ClusteredManager.java:81) >> at >> org.apache.geronimo.jetty6.cluster.wadi.WADIClusteredPreHandler$WADIWebClusteredInvocation.invoke(WADIClusteredPreHandler.java:72) >> at >> org.apache.geronimo.jetty6.cluster.AbstractClusteredPreHandler.handle(AbstractClusteredPreHandler.java:39) >> at >> org.apache.geronimo.jetty6.cluster.ClusteredSessionHandler.handle(ClusteredSessionHandler.java:51) >> at >> org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726) >> at >> org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) >> at >> org.apache.geronimo.jetty6.handler.TwistyWebAppContext.access$101(TwistyWebAppContext.java:40) >> at >> org.apache.geronimo.jetty6.handler.TwistyWebAppContext$TwistyHandler.handle(TwistyWebAppContext.java:65) >> at >> org.apache.geronimo.jetty6.handler.ThreadClassloaderHandler.handle(ThreadClassloaderHandler.java:46) >> at >> org.apache.geronimo.jetty6.handler.InstanceContextHandler.handle(InstanceContextHandler.java:67) >> at >> org.apache.geronimo.jetty6.handler.UserTransactionHandler.handle(UserTransactionHandler.java:48) >> at >> org.apache.geronimo.jetty6.handler.ComponentContextHandler.handle(ComponentContextHandler.java:47) >> at >> org.apache.geronimo.jetty6.handler.TwistyWebAppContext.handle(TwistyWebAppContext.java:59) >> at >> org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:285) >> at >> org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126) >> at >> org.apache.tiles.servlet.context.ServletTilesRequestContext.forward(ServletTilesRequestContext.java:198) >> at >> org.apache.tiles.servlet.context.ServletTilesRequestContext.dispatch(ServletTilesRequestContext.java:179) >> at >> org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:675) >> at >> org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:631) >> at >> org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:307) >> at >> no.jotta.backup.web.gui.profile.servlets.ProfileServlet.doGet(ProfileServlet.java:74) >> at javax.servlet.http.HttpServlet.service(HttpServlet.java:693) >> at javax.servlet.http.HttpServlet.service(HttpServlet.java:806) >> at >> org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) >> at >> org.apache.geronimo.jetty6.InternalJettyServletHolder.handle(InternalJettyServletHolder.java:65) >> at >> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093) >> at >> no.jotta.backup.web.gui.pub.filters.AppFilter.doFilter(AppFilter.java:131) >> at >> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) >> at >> no.jotta.backup.web.toolbox.filters.CacheControlFilter.doFilter(CacheControlFilter.java:135) >> at >> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) >> at >> org.mortbay.servlet.UserAgentFilter.doFilter(UserAgentFilter.java:81) >> at org.mortbay.servlet.GzipFilter.doFilter(GzipFilter.java:129) >> at >> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) >> at >> org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360) >> at >> org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) >> at >> org.apache.geronimo.jetty6.handler.JettySecurityHandler.handle(JettySecurityHandler.java:114) >> at >> org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) >> at >> org.apache.geronimo.jetty6.cluster.ClusteredSessionHandler.doHandle(ClusteredSessionHandler.java:59) >> at >> org.apache.geronimo.jetty6.cluster.ClusteredSessionHandler$ActualHandler.handle(ClusteredSessionHandler.java:66) >> at >> org.apache.geronimo.jetty6.cluster.AbstractClusteredPreHandler$WebClusteredInvocation.invokeLocally(AbstractClusteredPreHandler.java:71) >> at >> org.apache.geronimo.jetty6.cluster.wadi.WADIClusteredPreHandler$WADIWebClusteredInvocation.access$000(WADIClusteredPreHandler.java:52) >> at >> org.apache.geronimo.jetty6.cluster.wadi.WADIClusteredPreHandler$WADIWebClusteredInvocation$1.doFilter(WADIClusteredPreHandler.java:64) >> at >> org.codehaus.wadi.web.impl.WebInvocation.invoke(WebInvocation.java:116) >> at >> org.codehaus.wadi.core.contextualiser.MemoryContextualiser.handleLocally(MemoryContextualiser.java:71) >> at >> org.codehaus.wadi.core.contextualiser.AbstractExclusiveContextualiser.handle(AbstractExclusiveContextualiser.java:94) >> at >> org.codehaus.wadi.core.contextualiser.AbstractMotingContextualiser.contextualise(AbstractMotingContextualiser.java:37) >> at >> org.codehaus.wadi.core.manager.StandardManager.processStateful(StandardManager.java:150) >> at >> org.codehaus.wadi.core.manager.StandardManager.contextualise(StandardManager.java:142) >> at >> org.codehaus.wadi.core.manager.ClusteredManager.contextualise(ClusteredManager.java:81) >> at >> org.apache.geronimo.jetty6.cluster.wadi.WADIClusteredPreHandler$WADIWebClusteredInvocation.invoke(WADIClusteredPreHandler.java:72) >> at >> org.apache.geronimo.jetty6.cluster.AbstractClusteredPreHandler.handle(AbstractClusteredPreHandler.java:39) >> at >> org.apache.geronimo.jetty6.cluster.ClusteredSessionHandler.handle(ClusteredSessionHandler.java:51) >> at >> org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726) >> at >> org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) >> at >> org.apache.geronimo.jetty6.handler.TwistyWebAppContext.access$101(TwistyWebAppContext.java:40) >> at >> org.apache.geronimo.jetty6.handler.TwistyWebAppContext$TwistyHandler.handle(TwistyWebAppContext.java:65) >> at >> org.apache.geronimo.jetty6.handler.ThreadClassloaderHandler.handle(ThreadClassloaderHandler.java:46) >> at >> org.apache.geronimo.jetty6.handler.InstanceContextHandler.handle(InstanceContextHandler.java:58) >> at >> org.apache.geronimo.jetty6.handler.UserTransactionHandler.handle(UserTransactionHandler.java:48) >> at >> org.apache.geronimo.jetty6.handler.ComponentContextHandler.handle(ComponentContextHandler.java:47) >> at >> org.apache.geronimo.jetty6.handler.TwistyWebAppContext.handle(TwistyWebAppContext.java:59) >> at >> org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206) >> at >> org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114) >> at >> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139) >> at org.mortbay.jetty.Server.handle(Server.java:324) >> at >> org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505) >> at >> org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:828) >> at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514) >> at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) >> at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380) >> at >> org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395) >> at org.apache.geronimo.pool.ThreadPool$1.run(ThreadPool.java:214) >> at >> org.apache.geronimo.pool.ThreadPool$ContextClassLoaderRunnable.run(ThreadPool.java:344) >> at >> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) >> at >> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) >> at java.lang.Thread.run(Thread.java:619) >> >> If I start a new session with the browser the problem goes away, but it >> seems to persist as long as the unknown session ID is included in the >> request. >> >> If I kill one of the nodes (using kill -9 PID) this problem does not >> occur. Only on clean shutdowns. >> >> Thanks again for your help! >> >> Trygve >> >> On Wed, Jan 14, 2009 at 9:05 AM, Gianny Damour >> <[email protected]> wrote: >> Hi Trygve, >> >> This was a regression and it is now fixed. >> >> If you are building from source 2.2-SNAPSHOT, then here are the steps to >> apply the fix: >> >> 1. update plugins/jetty/geronimo-jetty6-clustering-wadi >> 2. build geronimo-jetty6-clustering-wadi >> 3. copy resulting artefact to your repository under >> repository/org/apache/geronimo/modules/geronimo-jetty6-clustering-wadi/2.2-SNAPSHOT/ >> >> Let us know if you are not building from source and I will push a >> snapshot. >> >> Thanks, >> Gianny >> > >
