You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@jackrabbit.apache.org by Shailesh Mangal <sh...@getzephyr.com> on 2010/07/15 21:00:32 UTC

Blocked thread in JackRabbit version 1.6.2

Hi,

When we have multiple threads trying to access data from under same node and few 
thread writing to other nodes under the same parent nodes, we seem to run into 
deadlocks. Profiler reports one thread blocked and others in wait state. Here is 
the stack trace of the blocked thread. Wondering if this indicates a issue in 
our code or in jackrabbit. We are not using search and have disabled search 
managers (hence, probably this bug is not relevant). 

JackRabbit Version: 1.6.2



Stacks at 5:35:12


http-8081-Processor25 [BLOCKED] CPU time: 0:09
org.apache.jackrabbit.core.state.LocalItemStateManager.getItemState(ItemId)
org.apache.jackrabbit.core.state.SessionItemStateManager.getItemState(ItemId)
org.apache.jackrabbit.core.ItemManager.getItemData(ItemId, Path, boolean)
org.apache.jackrabbit.core.ItemManager.getItem(ItemId, Path)
org.apache.jackrabbit.core.ItemManager.getItem(ItemId)
org.apache.jackrabbit.core.lock.LockManagerImpl.refresh(PathMap$Element)
org.apache.jackrabbit.core.lock.LockManagerImpl.nodeAdded(Path)
org.apache.jackrabbit.core.lock.LockManagerImpl.onEvent(EventIterator)
org.apache.jackrabbit.core.observation.EventConsumer.consumeEvents(EventStateCollection)

org.apache.jackrabbit.core.observation.ObservationDispatcher.dispatchEvents(EventStateCollection)

org.apache.jackrabbit.core.observation.EventStateCollection.dispatch()
org.apache.jackrabbit.core.state.SharedItemStateManager$Update.end()
org.apache.jackrabbit.core.state.SharedItemStateManager.update(ChangeLog, 
EventStateCollectionFactory)
org.apache.jackrabbit.core.state.LocalItemStateManager.update(ChangeLog)
org.apache.jackrabbit.core.state.XAItemStateManager.update(ChangeLog)
org.apache.jackrabbit.core.state.LocalItemStateManager.update()
org.apache.jackrabbit.core.BatchedItemOperations.update()
org.apache.jackrabbit.core.WorkspaceImpl.internalCopy(String, WorkspaceImpl, 
String, int)
org.apache.jackrabbit.core.WorkspaceImpl.copy(String, String)
com.thed.repository.TestcaseContentsManager.copyTestCases(Long, Long, Map)
sun.reflect.GeneratedMethodAccessor356.invoke(Object, Object[])
sun.reflect.DelegatingMethodAccessorImpl.invoke(Object, Object[])
java.lang.reflect.Method.invoke(Object, Object[])
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(Object, 
Method, Object[])
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint()
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(MethodInvocation)

org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(Object, Method, 
Object[])
$Proxy53.copyNodes(Long, Long, Map)
sun.reflect.GeneratedMethodAccessor356.invoke(Object, Object[])
sun.reflect.DelegatingMethodAccessorImpl.invoke(Object, Object[])
java.lang.reflect.Method.invoke(Object, Object[])
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(Object, 
Method, Object[])
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint()
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
com.thed.util.MethodCallInterceptor.invoke(MethodInvocation)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(Object, Method, 
Object[])
$Proxy54.copyNodes(Long, Long, Map)
sun.reflect.NativeMethodAccessorImpl.invoke0(Method, Object, Object[])
sun.reflect.NativeMethodAccessorImpl.invoke(Object, Object[])
sun.reflect.DelegatingMethodAccessorImpl.invoke(Object, Object[])
java.lang.reflect.Method.invoke(Object, Object[])
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(Object, 
Method, Object[])
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint()
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
com.thed.util.MethodCallInterceptor.invoke(MethodInvocation)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(Object, Method, 
Object[])
$Proxy54.copyNodes(Long, Long, Map)
...
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(Object, 
Method, Object[])
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint()
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(MethodInvocation)

org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(Object, Method, 
Object[])
...
sun.reflect.GeneratedMethodAccessor355.invoke(Object, Object[])
sun.reflect.DelegatingMethodAccessorImpl.invoke(Object, Object[])
java.lang.reflect.Method.invoke(Object, Object[])
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(Object, 
Method, Object[])
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint()
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
com.thed.util.MethodCallInterceptor.invoke(MethodInvocation)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(Object, Method, 
Object[])
...
sun.reflect.NativeMethodAccessorImpl.invoke0(Method, Object, Object[])
sun.reflect.NativeMethodAccessorImpl.invoke(Object, Object[])
sun.reflect.DelegatingMethodAccessorImpl.invoke(Object, Object[])
java.lang.reflect.Method.invoke(Object, Object[])
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(Object, 
Method, Object[])
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint()
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
...
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(Object, Method, 
Object[])
$Proxy98.copyTCRCatalogTree(Long, Long, Long, Long, Long)
com.thed.server.remote.CatalogUtilService.copyTCRCatalogTree(Long, Long, Long, 
Long, Long)
com.thed.server.remote.CatalogUtilService$$FastClassByCGLIB$$d73025.invoke(int, 
Object, Object[])
net.sf.cglib.proxy.MethodProxy.invoke(Object, Object[])
org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint()

org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
com.thed.util.MethodCallInterceptor.invoke(MethodInvocation)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Object,
Method, Object[], MethodProxy)
...
sun.reflect.NativeMethodAccessorImpl.invoke0(Method, Object, Object[])
sun.reflect.NativeMethodAccessorImpl.invoke(Object, Object[])
sun.reflect.DelegatingMethodAccessorImpl.invoke(Object, Object[])
java.lang.reflect.Method.invoke(Object, Object[])
flex.messaging.services.remoting.adapters.JavaAdapter.invoke(Message)
flex.messaging.services.RemotingService.serviceMessage(Message)
flex.messaging.MessageBroker.routeMessageToService(Message, Endpoint)
flex.messaging.endpoints.AbstractEndpoint.serviceMessage(Message)
flex.messaging.endpoints.amf.MessageBrokerFilter.invoke(ActionContext)
flex.messaging.endpoints.amf.LegacyFilter.invoke(ActionContext)
flex.messaging.endpoints.amf.SessionFilter.invoke(ActionContext)
flex.messaging.endpoints.amf.BatchProcessFilter.invoke(ActionContext)
flex.messaging.endpoints.amf.SerializationFilter.invoke(ActionContext)
flex.messaging.endpoints.BaseHTTPEndpoint.service(HttpServletRequest, 
HttpServletResponse)
flex.messaging.MessageBrokerServlet.service(HttpServletRequest, 
HttpServletResponse)
javax.servlet.http.HttpServlet.service(ServletRequest, ServletResponse)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ServletRequest, 
ServletResponse)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ServletRequest, 
ServletResponse)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(HttpServletRequest,
HttpServletResponse, FilterChain)
com.thed.util.spring.RefreshableOpenSessionInViewFilter.doFilterInternal(HttpServletRequest,
HttpServletResponse, FilterChain)
org.springframework.web.filter.OncePerRequestFilter.doFilter(ServletRequest, 
ServletResponse, FilterChain)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ServletRequest, 
ServletResponse)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ServletRequest, 
ServletResponse)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(HttpServletRequest,
HttpServletResponse, FilterChain)
org.springframework.web.filter.OncePerRequestFilter.doFilter(ServletRequest, 
ServletResponse, FilterChain)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ServletRequest, 
ServletResponse)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ServletRequest, 
ServletResponse)
org.apache.catalina.core.StandardWrapperValve.invoke(Request, Response)
org.apache.catalina.core.StandardContextValve.invoke(Request, Response)
org.apache.catalina.core.StandardHostValve.invoke(Request, Response)
org.apache.catalina.valves.ErrorReportValve.invoke(Request, Response)
org.apache.catalina.core.StandardEngineValve.invoke(Request, Response)
org.apache.catalina.connector.CoyoteAdapter.service(Request, Response)
org.apache.coyote.http11.Http11Processor.process(InputStream, OutputStream)
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(TcpConnection,
Object[])
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(Socket, TcpConnection, 
Object[])
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(Object[])
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run()
java.lang.Thread.run()

- Shailesh

AW: Blocked thread in JackRabbit version 1.6.2

Posted by KÖLL Claus <C....@TIROL.GV.AT>.
Hi,

Do you have a Testcase to rebuild the problem ?
Please feel free to file a jira issue.

greets
claus

-----Ursprüngliche Nachricht-----
Von: Shailesh Mangal [mailto:shailesh.mangal@getzephyr.com] 
Gesendet: Donnerstag, 15. Juli 2010 21:01
An: users@jackrabbit.apache.org
Betreff: Blocked thread in JackRabbit version 1.6.2

Hi,

When we have multiple threads trying to access data from under same node and few 
thread writing to other nodes under the same parent nodes, we seem to run into 
deadlocks. Profiler reports one thread blocked and others in wait state. Here is 
the stack trace of the blocked thread. Wondering if this indicates a issue in 
our code or in jackrabbit. We are not using search and have disabled search 
managers (hence, probably this bug is not relevant). 

JackRabbit Version: 1.6.2



Stacks at 5:35:12


http-8081-Processor25 [BLOCKED] CPU time: 0:09
org.apache.jackrabbit.core.state.LocalItemStateManager.getItemState(ItemId)
org.apache.jackrabbit.core.state.SessionItemStateManager.getItemState(ItemId)
org.apache.jackrabbit.core.ItemManager.getItemData(ItemId, Path, boolean)
org.apache.jackrabbit.core.ItemManager.getItem(ItemId, Path)
org.apache.jackrabbit.core.ItemManager.getItem(ItemId)
org.apache.jackrabbit.core.lock.LockManagerImpl.refresh(PathMap$Element)
org.apache.jackrabbit.core.lock.LockManagerImpl.nodeAdded(Path)
org.apache.jackrabbit.core.lock.LockManagerImpl.onEvent(EventIterator)
org.apache.jackrabbit.core.observation.EventConsumer.consumeEvents(EventStateCollection)

org.apache.jackrabbit.core.observation.ObservationDispatcher.dispatchEvents(EventStateCollection)

org.apache.jackrabbit.core.observation.EventStateCollection.dispatch()
org.apache.jackrabbit.core.state.SharedItemStateManager$Update.end()
org.apache.jackrabbit.core.state.SharedItemStateManager.update(ChangeLog, 
EventStateCollectionFactory)
org.apache.jackrabbit.core.state.LocalItemStateManager.update(ChangeLog)
org.apache.jackrabbit.core.state.XAItemStateManager.update(ChangeLog)
org.apache.jackrabbit.core.state.LocalItemStateManager.update()
org.apache.jackrabbit.core.BatchedItemOperations.update()
org.apache.jackrabbit.core.WorkspaceImpl.internalCopy(String, WorkspaceImpl, 
String, int)
org.apache.jackrabbit.core.WorkspaceImpl.copy(String, String)
com.thed.repository.TestcaseContentsManager.copyTestCases(Long, Long, Map)
sun.reflect.GeneratedMethodAccessor356.invoke(Object, Object[])
sun.reflect.DelegatingMethodAccessorImpl.invoke(Object, Object[])
java.lang.reflect.Method.invoke(Object, Object[])
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(Object, 
Method, Object[])
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint()
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(MethodInvocation)

org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(Object, Method, 
Object[])
$Proxy53.copyNodes(Long, Long, Map)
sun.reflect.GeneratedMethodAccessor356.invoke(Object, Object[])
sun.reflect.DelegatingMethodAccessorImpl.invoke(Object, Object[])
java.lang.reflect.Method.invoke(Object, Object[])
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(Object, 
Method, Object[])
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint()
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
com.thed.util.MethodCallInterceptor.invoke(MethodInvocation)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(Object, Method, 
Object[])
$Proxy54.copyNodes(Long, Long, Map)
sun.reflect.NativeMethodAccessorImpl.invoke0(Method, Object, Object[])
sun.reflect.NativeMethodAccessorImpl.invoke(Object, Object[])
sun.reflect.DelegatingMethodAccessorImpl.invoke(Object, Object[])
java.lang.reflect.Method.invoke(Object, Object[])
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(Object, 
Method, Object[])
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint()
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
com.thed.util.MethodCallInterceptor.invoke(MethodInvocation)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(Object, Method, 
Object[])
$Proxy54.copyNodes(Long, Long, Map)
...
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(Object, 
Method, Object[])
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint()
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(MethodInvocation)

org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(Object, Method, 
Object[])
...
sun.reflect.GeneratedMethodAccessor355.invoke(Object, Object[])
sun.reflect.DelegatingMethodAccessorImpl.invoke(Object, Object[])
java.lang.reflect.Method.invoke(Object, Object[])
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(Object, 
Method, Object[])
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint()
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
com.thed.util.MethodCallInterceptor.invoke(MethodInvocation)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(Object, Method, 
Object[])
...
sun.reflect.NativeMethodAccessorImpl.invoke0(Method, Object, Object[])
sun.reflect.NativeMethodAccessorImpl.invoke(Object, Object[])
sun.reflect.DelegatingMethodAccessorImpl.invoke(Object, Object[])
java.lang.reflect.Method.invoke(Object, Object[])
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(Object, 
Method, Object[])
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint()
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
...
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(Object, Method, 
Object[])
$Proxy98.copyTCRCatalogTree(Long, Long, Long, Long, Long)
com.thed.server.remote.CatalogUtilService.copyTCRCatalogTree(Long, Long, Long, 
Long, Long)
com.thed.server.remote.CatalogUtilService$$FastClassByCGLIB$$d73025.invoke(int, 
Object, Object[])
net.sf.cglib.proxy.MethodProxy.invoke(Object, Object[])
org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint()

org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
com.thed.util.MethodCallInterceptor.invoke(MethodInvocation)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed()
org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Object,
Method, Object[], MethodProxy)
...
sun.reflect.NativeMethodAccessorImpl.invoke0(Method, Object, Object[])
sun.reflect.NativeMethodAccessorImpl.invoke(Object, Object[])
sun.reflect.DelegatingMethodAccessorImpl.invoke(Object, Object[])
java.lang.reflect.Method.invoke(Object, Object[])
flex.messaging.services.remoting.adapters.JavaAdapter.invoke(Message)
flex.messaging.services.RemotingService.serviceMessage(Message)
flex.messaging.MessageBroker.routeMessageToService(Message, Endpoint)
flex.messaging.endpoints.AbstractEndpoint.serviceMessage(Message)
flex.messaging.endpoints.amf.MessageBrokerFilter.invoke(ActionContext)
flex.messaging.endpoints.amf.LegacyFilter.invoke(ActionContext)
flex.messaging.endpoints.amf.SessionFilter.invoke(ActionContext)
flex.messaging.endpoints.amf.BatchProcessFilter.invoke(ActionContext)
flex.messaging.endpoints.amf.SerializationFilter.invoke(ActionContext)
flex.messaging.endpoints.BaseHTTPEndpoint.service(HttpServletRequest, 
HttpServletResponse)
flex.messaging.MessageBrokerServlet.service(HttpServletRequest, 
HttpServletResponse)
javax.servlet.http.HttpServlet.service(ServletRequest, ServletResponse)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ServletRequest, 
ServletResponse)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ServletRequest, 
ServletResponse)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(HttpServletRequest,
HttpServletResponse, FilterChain)
com.thed.util.spring.RefreshableOpenSessionInViewFilter.doFilterInternal(HttpServletRequest,
HttpServletResponse, FilterChain)
org.springframework.web.filter.OncePerRequestFilter.doFilter(ServletRequest, 
ServletResponse, FilterChain)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ServletRequest, 
ServletResponse)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ServletRequest, 
ServletResponse)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(HttpServletRequest,
HttpServletResponse, FilterChain)
org.springframework.web.filter.OncePerRequestFilter.doFilter(ServletRequest, 
ServletResponse, FilterChain)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ServletRequest, 
ServletResponse)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ServletRequest, 
ServletResponse)
org.apache.catalina.core.StandardWrapperValve.invoke(Request, Response)
org.apache.catalina.core.StandardContextValve.invoke(Request, Response)
org.apache.catalina.core.StandardHostValve.invoke(Request, Response)
org.apache.catalina.valves.ErrorReportValve.invoke(Request, Response)
org.apache.catalina.core.StandardEngineValve.invoke(Request, Response)
org.apache.catalina.connector.CoyoteAdapter.service(Request, Response)
org.apache.coyote.http11.Http11Processor.process(InputStream, OutputStream)
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(TcpConnection,
Object[])
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(Socket, TcpConnection, 
Object[])
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(Object[])
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run()
java.lang.Thread.run()

- Shailesh