jackrabbit-oak-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Tomek Rękawek (JIRA) <j...@apache.org>
Subject [jira] [Created] (OAK-4882) Bottleneck in the asynchronous persistent cache
Date Tue, 04 Oct 2016 08:26:20 GMT
Tomek Rękawek created OAK-4882:

             Summary: Bottleneck in the asynchronous persistent cache
                 Key: OAK-4882
                 URL: https://issues.apache.org/jira/browse/OAK-4882
             Project: Jackrabbit Oak
          Issue Type: Bug
          Components: cache, documentmk
    Affects Versions: 1.4.8, 1.5.10
            Reporter: Tomek Rękawek
             Fix For: 1.6

The class responsible for accepting new cache operations which will be handled asynchronously
is [CacheActionDispatcher|https://github.com/apache/jackrabbit-oak/blob/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/async/CacheActionDispatcher.java].
In case of a high load, when the queue is full (=1024 entries), the [add()|https://github.com/apache/jackrabbit-oak/blob/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/async/CacheActionDispatcher.java#L86]
method removes the oldest 256 entries. However, we can't afford losing the updates (as it
may result in having stale entries in the cache), so all the removed entries are compacted
into one big invalidate action.

The compaction action ([CacheActionDispatcher#cleanTheQueue|https://github.com/apache/jackrabbit-oak/blob/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/async/CacheActionDispatcher.java#L97])
still holds the lock taken in add() method, so threads which tries to add something to the
queue have to wait until cleanTheQueue() ends.

Maybe we can optimise the CacheActionDispatcher#add->cleanTheQueue part, so it won't hold
the lock for the whole time.

This message was sent by Atlassian JIRA

View raw message