cayenne-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Andrus Adamchik (Commented) (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CAY-1652) Deadlock within DefaultEventManager while creating a new ObjectContext
Date Mon, 23 Jan 2012 21:23:40 GMT

    [ https://issues.apache.org/jira/browse/CAY-1652?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13191466#comment-13191466
] 

Andrus Adamchik commented on CAY-1652:
--------------------------------------

Anton,

Just removed one cause of the deadlock per CAY-1653. This may actually resolve your case (addListener).
However there is a very simple unit test at CAY-957 that shows that there's another deadlock
situation remains with multiple nested contexts... I will work on that next, but appreciate
if you could try the CAY-1653 fix, which is committed to trunk.  If you only care about this
change, and don't want the rest of the M4 stuff, you can locally build Cayenne  with r1234971
and r1234984 applied.
                
> Deadlock within DefaultEventManager while creating a new ObjectContext
> ----------------------------------------------------------------------
>
>                 Key: CAY-1652
>                 URL: https://issues.apache.org/jira/browse/CAY-1652
>             Project: Cayenne
>          Issue Type: Bug
>          Components: Core Library
>    Affects Versions: 3.1M3
>         Environment: OpenJDK Runtime Environment (build 1.6.0-b23)
> OpenJDK 64-Bit Server VM (build 20.0-b11, mixed mode)
>            Reporter: Anton Sakalouski
>            Assignee: Andrus Adamchik
>         Attachments: ThreadDump.txt
>
>
> We have apache cxf application which creates a new ObjectContext and writes some changes
to the database in one of its soap request interceptors. Approximately once in day we experience
the deadlock within DefaultEventManager. Here are brief details, I am enclosing the full thread
dump as well. 
> Found one Java-level deadlock:
> =============================
> "ajp-apr-/10.100.48.1-9201-exec-962":
>  waiting to lock monitor 0x000000093579d378 (object 0x00000008277ea450, a org.apache.cayenne.event.DispatchQueue),
>  which is held by "cayenne-edt-665651215-1"
> "cayenne-edt-665651215-1":
>  waiting to lock monitor 0x00000009415bec40 (object 0x000000082ac3aa78, a org.apache.cayenne.access.ObjectStore),
>  which is held by "ajp-apr-/10.100.48.1-9201-exec-956"
> "ajp-apr-/10.100.48.1-9201-exec-956":
>  waiting to lock monitor 0x000000093579bf20 (object 0x000000082ac36d00, a org.apache.cayenne.access.ObjectStore),
>  which is held by "cayenne-edt-665651215-1"
> Java stack information for the threads listed above:
> ===================================================
> "ajp-apr-/10.100.48.1-9201-exec-962":
> 	at org.apache.cayenne.event.DispatchQueue.addInvocation(DispatchQueue.java:63)
> 	- waiting to lock <0x00000008277ea450> (a org.apache.cayenne.event.DispatchQueue)
> 	at org.apache.cayenne.event.DefaultEventManager.addListener(DefaultEventManager.java:217)
> 	at org.apache.cayenne.event.DefaultEventManager.addListener(DefaultEventManager.java:171)
> 	at org.apache.cayenne.util.EventUtil.listenForSubjects(EventUtil.java:90)
> 	at org.apache.cayenne.util.EventUtil.listenForChannelEvents(EventUtil.java:57)
> 	at org.apache.cayenne.access.DataContext.attachToChannel(DataContext.java:162)
> 	at org.apache.cayenne.access.DataContext.<init>(DataContext.java:105)
> 	at ish.oncourse.services.persistence.ISHObjectContext.<init>(ISHObjectContext.java:24)
> 	at ish.oncourse.services.persistence.ISHObjectContextFactory.createdFromDataDomain(ISHObjectContextFactory.java:58)
> 	at org.apache.cayenne.configuration.server.DataContextFactory.createContext(DataContextFactory.java:54)
> 	at org.apache.cayenne.configuration.CayenneRuntime.getContext(CayenneRuntime.java:182)
> 	at ish.oncourse.services.persistence.CayenneService.newContext(CayenneService.java:65)
> 	at ish.oncourse.services.persistence.CayenneService.newNonReplicatingContext(CayenneService.java:73)
> 	at $ICayenneService_135046b9a1f.newNonReplicatingContext($ICayenneService_135046b9a1f.java)
> 	at ish.oncourse.services.system.CollegeService.recordWSAccess(CollegeService.java:141)
> 	at $ICollegeService_135046b9a1d.recordWSAccess($ICollegeService_135046b9a1d.java)
> 	at ish.oncourse.webservices.soap.v4.interceptors.CollegeRequestInterceptor.handleMessage(CollegeRequestInterceptor.java:69)
> 	at ish.oncourse.webservices.soap.v4.interceptors.CollegeRequestInterceptor.handleMessage(CollegeRequestInterceptor.java:35)
> 	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
> 	- locked <0x000000082b19f640> (a org.apache.cxf.phase.PhaseInterceptorChain)
> 	at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:118)
> 	at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:208)
> 	at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223)
> 	at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:205)
> 	at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:113)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:184)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:107)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:163)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> 	at org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:151)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:207)
> 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
> 	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
> 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
> 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
> 	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
> 	at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:308)
> 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
> 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
> 	at org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:188)
> 	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
> 	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1773)
> 	- locked <0x000000082b19f770> (a org.apache.tomcat.util.net.SocketWrapper)
> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
> 	at java.lang.Thread.run(Thread.java:679)
> "cayenne-edt-665651215-1":
> 	at org.apache.cayenne.access.ObjectStore.processSnapshotEvent(ObjectStore.java:581)
> 	- waiting to lock <0x000000082ac3aa78> (a org.apache.cayenne.access.ObjectStore)
> 	at org.apache.cayenne.access.DataContextMergeHandler.graphChanged(DataContextMergeHandler.java:99)
> 	at sun.reflect.GeneratedMethodAccessor125.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:616)
> 	at org.apache.cayenne.util.Invocation.fire(Invocation.java:202)
> 	at org.apache.cayenne.event.DefaultEventManager$Dispatch.fire(DefaultEventManager.java:400)
> 	at org.apache.cayenne.event.DispatchQueue.dispatchEvent(DispatchQueue.java:156)
> 	at org.apache.cayenne.event.DispatchQueue.dispatchEvent(DispatchQueue.java:57)
> 	- locked <0x00000008277ea450> (a org.apache.cayenne.event.DispatchQueue)
> 	at org.apache.cayenne.event.DefaultEventManager.dispatchEvent(DefaultEventManager.java:339)
> 	at org.apache.cayenne.event.DefaultEventManager.postEvent(DefaultEventManager.java:310)
> 	at org.apache.cayenne.BaseContext.fireDataChannelChanged(BaseContext.java:424)
> 	at org.apache.cayenne.access.DataContext.fireDataChannelChanged(DataContext.java:1244)
> 	at org.apache.cayenne.access.ObjectStore.processSnapshotEvent(ObjectStore.java:610)
> 	- locked <0x000000082ac36d00> (a org.apache.cayenne.access.ObjectStore)
> 	at org.apache.cayenne.access.ObjectStore.snapshotsChanged(ObjectStore.java:572)
> 	at sun.reflect.GeneratedMethodAccessor66.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:616)
> 	at org.apache.cayenne.util.Invocation.fire(Invocation.java:202)
> 	at org.apache.cayenne.event.DefaultEventManager$InvocationDispatch.fire(DefaultEventManager.java:420)
> 	at org.apache.cayenne.event.DefaultEventManager$DispatchThread.run(DefaultEventManager.java:469)
> "ajp-apr-/10.100.48.1-9201-exec-956":
> 	at org.apache.cayenne.access.ObjectStore.registerDiff(ObjectStore.java:183)
> 	- waiting to lock <0x000000082ac36d00> (a org.apache.cayenne.access.ObjectStore)
> 	at org.apache.cayenne.access.ObjectStore.arcDeleted(ObjectStore.java:1000)
> 	at org.apache.cayenne.util.ObjectContextGraphAction.handleArcPropertyChange(ObjectContextGraphAction.java:81)
> 	at org.apache.cayenne.util.ObjectContextGraphAction.handlePropertyChange(ObjectContextGraphAction.java:65)
> 	at org.apache.cayenne.BaseContext.propertyChanged(BaseContext.java:335)
> 	at org.apache.cayenne.CayenneDataObject.setToOneTarget(CayenneDataObject.java:278)
> 	at org.apache.cayenne.reflect.generic.DataObjectToOneProperty.setTarget(DataObjectToOneProperty.java:74)
> 	at org.apache.cayenne.graph.ChildDiffLoader$3.visitToOne(ChildDiffLoader.java:254)
> 	at org.apache.cayenne.reflect.generic.DataObjectToOneProperty.visit(DataObjectToOneProperty.java:87)
> 	at org.apache.cayenne.graph.ChildDiffLoader.arcDeleted(ChildDiffLoader.java:217)
> 	at org.apache.cayenne.access.ObjectDiff$ArcOperation.apply(ObjectDiff.java:440)
> 	at org.apache.cayenne.graph.CompoundDiff.apply(CompoundDiff.java:91)
> 	at org.apache.cayenne.access.ObjectStoreGraphDiff.apply(ObjectStoreGraphDiff.java:134)
> 	at org.apache.cayenne.access.DataContext.onContextFlush(DataContext.java:769)
> 	at org.apache.cayenne.BaseContext.onSync(BaseContext.java:373)
> 	at ish.oncourse.services.persistence.ISHObjectContext.onSync(ISHObjectContext.java:72)
> 	at org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:816)
> 	- locked <0x000000082ac3aa78> (a org.apache.cayenne.access.ObjectStore)
> 	at org.apache.cayenne.access.DataContext.commitChangesToParent(DataContext.java:746)
> 	at ish.oncourse.webservices.replication.services.TransactionGroupProcessorImpl.deleteObject(TransactionGroupProcessorImpl.java:248)
> 	at ish.oncourse.webservices.replication.services.TransactionGroupProcessorImpl.processStub(TransactionGroupProcessorImpl.java:185)
> 	at ish.oncourse.webservices.replication.services.TransactionGroupProcessorImpl.processGroup(TransactionGroupProcessorImpl.java:98)
> 	at $ITransactionGroupProcessor_135046b9aa3.processGroup($ITransactionGroupProcessor_135046b9aa3.java)
> 	at $ITransactionGroupProcessor_135046b9a4d.processGroup($ITransactionGroupProcessor_135046b9a4d.java)
> 	at ish.oncourse.webservices.replication.services.ReplicationServiceImpl.sendRecords(ReplicationServiceImpl.java:79)
> 	at $IReplicationService_135046b9a4a.sendRecords($IReplicationService_135046b9a4a.java)
> 	at $IReplicationService_135046b9a1e.sendRecords($IReplicationService_135046b9a1e.java)
> 	at ish.oncourse.webservices.soap.v4.ReplicationPortTypeImpl.sendRecords(ReplicationPortTypeImpl.java:342)
> 	at sun.reflect.GeneratedMethodAccessor114.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:616)
> 	at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:173)
> 	at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:89)
> 	at org.apache.cxf.jaxws.JAXWSMethodInvoker.invoke(JAXWSMethodInvoker.java:61)
> 	at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:75)
> 	at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58)
> 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
> 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
> 	at java.util.concurrent.FutureTask.run(FutureTask.java:166)
> 	at org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37)
> 	at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:106)
> 	- locked <0x000000082ac3abe8> (a org.apache.cxf.interceptor.ServiceInvokerInterceptor$2)
> 	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
> 	- locked <0x000000082ac65410> (a org.apache.cxf.phase.PhaseInterceptorChain)
> 	at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:118)
> 	at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:208)
> 	at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223)
> 	at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:205)
> 	at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:113)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:184)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:107)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:163)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> 	at org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:151)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:207)
> 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
> 	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
> 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
> 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
> 	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
> 	at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:308)
> 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
> 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
> 	at org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:188)
> 	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
> 	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1773)
> 	- locked <0x000000082aeb47e8> (a org.apache.tomcat.util.net.SocketWrapper)
> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
> 	at java.lang.Thread.run(Thread.java:679)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message