jackrabbit-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Thomas Mueller (JIRA)" <j...@apache.org>
Subject [jira] Commented: (JCR-2746) Deadlock caused by ObservationDispatcher
Date Tue, 21 Sep 2010 07:32:33 GMT

    [ https://issues.apache.org/jira/browse/JCR-2746?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12912864#action_12912864
] 

Thomas Mueller commented on JCR-2746:
-------------------------------------

The bug in DefaultISMLocking was introduces with JCR-2089 (Use java.util.concurrent), revisions
995411 and 995412. I think the safe solution is to revert those to commits. Test case:

public void test() throws InterruptedException {
    final ISMLocking lock = new DefaultISMLocking();
    ReadLock r1 = lock.acquireReadLock(null);
    final InterruptedException[] ex = new InterruptedException[1];
    Thread thread = new Thread() {
        public void run() {
            try {
                lock.acquireWriteLock(null).release();
            } catch (InterruptedException e) {
                ex[0] = e;
            }
        }
    };
    thread.start();
    Thread.sleep(100);
    lock.acquireReadLock(null).release();
    r1.release();
    thread.join();
    if (ex[0] != null) {
        throw ex[0];
    }
}

This will result in a deadlock with the current DefaultISMLocking, but not with the old.


> Deadlock caused by ObservationDispatcher 
> -----------------------------------------
>
>                 Key: JCR-2746
>                 URL: https://issues.apache.org/jira/browse/JCR-2746
>             Project: Jackrabbit Content Repository
>          Issue Type: Bug
>          Components: jackrabbit-core, observation
>    Affects Versions: 2.0.0, 2.1.0, 2.1.1
>            Reporter: Jukka Zitting
>            Assignee: Thomas Mueller
>             Fix For: 2.2.0
>
>
> The rate-limitation code we added in JCR-2402 to prevent the observation queue from growing
too large was a good idea, but the current implementation is a bit troublesome since it blocks
the thread while it still holds the journal lock, the SISM reader lock, and the SessionState
lock. This can cause a deadlock under heavy workloads if any of the observation listeners
attempts to reuse the session (not recommended/supported, but can still happen) or write to
the repository (quite likely).
> To solve this problem we should move the rate-limiter code to outside the scope of any
internal locks.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message