You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by "Andrus Adamchik (JIRA)" <ji...@apache.org> on 2013/12/28 11:50:50 UTC

[jira] [Closed] (CAY-1868) Select contention with multiple contexts

     [ 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)