[ 
https://issues.apache.org/jira/browse/CAY-1868?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andrus Adamchik closed CAY-1868.
--------------------------------

    Resolution: Fixed

I just committed the latest patch to trunk and 3.1 branch. So now we've removed 
the contention point, and will deal with dirty lazy initialization code in 
ObjRelationship some other day. Thanks for the patch!

Postmortem notes:

1. You still left the "synchronized" keyword in the "refreshFromDeferredPath" 
method. I removed it myself (see r1553803).
2. I suggest before submitting patches that you do "git svn rebase" your work 
branch against the current state of the remote SVN branch. This way the patch 
can be applied cleanly by a reviewer (at least for some time until SVN state 
diverges again). From the patch structure it appears you haven't rebased for 
some time.


> Select contention with multiple contexts 
> -----------------------------------------
>
>                 Key: CAY-1868
>                 URL: https://issues.apache.org/jira/browse/CAY-1868
>             Project: Cayenne
>          Issue Type: Bug
>    Affects Versions: 3.1B2, 3.2M1
>            Reporter: Andrus Adamchik
>            Assignee: Andrus Adamchik
>             Fix For: 3.1B3, 3.2.M2
>
>         Attachments: cay1868.patch, cay1868v3_1.patch
>
>
> I am mostly using local cache and a single app-scoped ObjectContext for 
> selects. So I was oblivious to this issue. Today I tried shared cache and a 
> pool of app-scoped ObjectContexts randomly assigned to requests. I quickly 
> hit a contention point:
>  
>    java.lang.Thread.State: BLOCKED (on object monitor)
>         at 
> org.apache.cayenne.map.ObjRelationship.refreshFromDeferredPath(ObjRelationship.java:572)
>         - waiting to lock <0x424bf840> (a 
> org.apache.cayenne.map.ObjRelationship)
>         at 
> org.apache.cayenne.map.ObjRelationship.isToMany(ObjRelationship.java:431)
>         at 
> org.apache.cayenne.map.ObjRelationship.isOptional(ObjRelationship.java:310)
>         at 
> org.apache.cayenne.map.ObjRelationship.isSourceDefiningTargetPrecenseAndType(ObjRelationship.java:346)
>         at 
> org.apache.cayenne.access.DataDomainQueryAction.interceptRelationshipQuery(DataDomainQueryAction.java:239)
> ObjRelationship recalculating its 'toMany' value on every call is evil by 
> itself. Doing parts of it in a synchronized block is completely unacceptable. 
>  



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

Reply via email to