[infinispan-issues] [JBoss JIRA] (ISPN-3777) ThreadLocal in AbstractInvocationContextContainer is leaking instances of LocalTxInvocationContext

Marko Lukša (JIRA) jira-events at lists.jboss.org
Mon Dec 9 06:20:06 EST 2013


    [ https://issues.jboss.org/browse/ISPN-3777?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12929442#comment-12929442 ] 

Marko Lukša commented on ISPN-3777:
-----------------------------------

Well, for starters, if there's an exception before the interceptor chain is invoked, the ThreadLocal will already be set and the interceptor obviously will not be called. 
Also, with async ops, the ThreadLocal is set in the calling thread, while the command and interceptors are invoked inside the async thread. (Actually, the threadlocal is never even set in the async thread. Apparently it is never used?)
                
> ThreadLocal in AbstractInvocationContextContainer is leaking instances of LocalTxInvocationContext
> --------------------------------------------------------------------------------------------------
>
>                 Key: ISPN-3777
>                 URL: https://issues.jboss.org/browse/ISPN-3777
>             Project: Infinispan
>          Issue Type: Bug
>    Affects Versions: 6.0.0.Final
>            Reporter: Marko Lukša
>            Assignee: Marko Lukša
>            Priority: Critical
>
> When running CapeDwarf log tests on Infinispan 6.0.0 & Wildfly, we're seeing lots of retained instances of LocalTxInvocationContext. 
> So far I've seen the instances that are not removed are created at the following two points:
> {code}
> java.lang.Exception: Creation stack
> 	at org.infinispan.context.impl.LocalTxInvocationContext.<init>(LocalTxInvocationContext.java:42)
> 	at org.infinispan.context.TransactionalInvocationContextContainer.createInvocationContext(TransactionalInvocationContextContainer.java:100)
> 	at org.infinispan.CacheImpl.getInvocationContext(CacheImpl.java:615)
> 	at org.infinispan.CacheImpl.getInvocationContextWithImplicitTransaction(CacheImpl.java:599)
> 	at org.infinispan.CacheImpl.getInvocationContextWithImplicitTransactionForAsyncOps(CacheImpl.java:569)
> 	at org.infinispan.CacheImpl.putAsync(CacheImpl.java:996)
> 	at org.infinispan.DecoratedCache.putAsync(DecoratedCache.java:238)
> 	at org.infinispan.AbstractDelegatingCache.putAsync(AbstractDelegatingCache.java:131)
> 	at org.jboss.capedwarf.log.CapedwarfLogService$AsyncLogWriter.put(CapedwarfLogService.java:378)
> 	at org.jboss.capedwarf.log.CapedwarfLogService.requestFinished(CapedwarfLogService.java:348)
> 	at sun.reflect.GeneratedMethodAccessor74.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:606)
> 	at org.jboss.capedwarf.aspects.proxy.AspectContext.proceed(AspectContext.java:47)
> 	at org.jboss.capedwarf.aspects.DisableSocketsAspect.invoke(DisableSocketsAspect.java:43)
> 	at org.jboss.capedwarf.aspects.proxy.AspectWrapper.invoke(AspectWrapper.java:50)
> 	at org.jboss.capedwarf.aspects.proxy.AspectContext.proceed(AspectContext.java:52)
> 	at org.jboss.capedwarf.aspects.GlobalTimeLimitAspect.invoke(GlobalTimeLimitAspect.java:44)
> 	at org.jboss.capedwarf.aspects.proxy.AspectWrapper.invoke(AspectWrapper.java:50)
> 	at org.jboss.capedwarf.aspects.proxy.AspectContext.proceed(AspectContext.java:52)
> 	at org.jboss.capedwarf.aspects.proxy.AspectHandler.invoke(AspectHandler.java:60)
> 	at org.jboss.capedwarf.log.ExposedLogService_$$_jvst183_0.requestFinished(ExposedLogService_$$_jvst183_0.java)
> 	at org.jboss.capedwarf.appidentity.GAEListener.requestDestroyed(GAEListener.java:125)
> 	at io.undertow.servlet.core.ApplicationListeners.requestDestroyed(ApplicationListeners.java:225)
> 	at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:282)
> 	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:226)
> 	at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:72)
> 	at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:145)
> 	at io.undertow.server.Connectors.executeRootHandler(Connectors.java:139)
> 	at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:638)
> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
> 	at java.lang.Thread.run(Thread.java:744)
> {code}
> and 
> {code}
> java.lang.Exception: Creation stack
> 	at org.infinispan.context.impl.LocalTxInvocationContext.<init>(LocalTxInvocationContext.java:42)
> 	at org.infinispan.context.TransactionalInvocationContextContainer.createTxInvocationContext(TransactionalInvocationContextContainer.java:110)
> 	at org.infinispan.transaction.TransactionCoordinator.commit(TransactionCoordinator.java:145)
> 	at org.infinispan.transaction.synchronization.SynchronizationAdapter.afterCompletion(SynchronizationAdapter.java:58)
> 	at com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple.afterCompletion(SynchronizationImple.java:96)
> 	at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.afterCompletion(TwoPhaseCoordinator.java:532)
> 	at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.end(TwoPhaseCoordinator.java:101)
> 	at com.arjuna.ats.arjuna.AtomicAction.commit(AtomicAction.java:162)
> 	at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1170)
> 	at com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.commit(BaseTransaction.java:126)
> 	at com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.commit(BaseTransactionManagerDelegate.java:75)
> 	at org.infinispan.CacheImpl.executeCommandAndCommitIfNeeded(CacheImpl.java:1306)
> 	at org.infinispan.CacheImpl.putInternal(CacheImpl.java:869)
> 	at org.infinispan.CacheImpl.put(CacheImpl.java:861)
> 	at org.infinispan.DecoratedCache.put(DecoratedCache.java:401)
> 	at org.infinispan.AbstractDelegatingCache.put(AbstractDelegatingCache.java:276)
> 	at org.jboss.capedwarf.log.CapedwarfLogService$SyncLogWriter.put(CapedwarfLogService.java:390)
> 	at org.jboss.capedwarf.log.CapedwarfLogService.requestFinished(CapedwarfLogService.java:348)
> 	at sun.reflect.GeneratedMethodAccessor70.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:606)
> 	at org.jboss.capedwarf.aspects.proxy.AspectContext.proceed(AspectContext.java:47)
> 	at org.jboss.capedwarf.aspects.DisableSocketsAspect.invoke(DisableSocketsAspect.java:43)
> 	at org.jboss.capedwarf.aspects.proxy.AspectWrapper.invoke(AspectWrapper.java:50)
> 	at org.jboss.capedwarf.aspects.proxy.AspectContext.proceed(AspectContext.java:52)
> 	at org.jboss.capedwarf.aspects.GlobalTimeLimitAspect.invoke(GlobalTimeLimitAspect.java:44)
> 	at org.jboss.capedwarf.aspects.proxy.AspectWrapper.invoke(AspectWrapper.java:50)
> 	at org.jboss.capedwarf.aspects.proxy.AspectContext.proceed(AspectContext.java:52)
> 	at org.jboss.capedwarf.aspects.proxy.AspectHandler.invoke(AspectHandler.java:60)
> 	at org.jboss.capedwarf.log.ExposedLogService_$$_jvst8b1_0.requestFinished(ExposedLogService_$$_jvst8b1_0.java)
> 	at org.jboss.capedwarf.appidentity.GAEListener.requestDestroyed(GAEListener.java:125)
> 	at io.undertow.servlet.core.ApplicationListeners.requestDestroyed(ApplicationListeners.java:225)
> 	at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:282)
> 	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:226)
> 	at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:72)
> 	at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:145)
> 	at io.undertow.server.Connectors.executeRootHandler(Connectors.java:139)
> 	at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:638)
> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
> 	at java.lang.Thread.run(Thread.java:744)
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira



More information about the infinispan-issues mailing list