[
https://issues.apache.org/jira/browse/OAK-4882?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15614762#comment-15614762
]
Tomek Rękawek edited comment on OAK-4882 at 10/28/16 8:43 AM:
--------------------------------------------------------------
I committed the async queue simplified as in the discussion above. The commit
also includes heuristics suggest by Chetan.
Trunk: [r1766966|https://svn.apache.org/r1766966]
1.4: [r1766970|https://svna.apche.org/r1766970].
was (Author: tomek.rekawek):
I committed the async queue simplified as in the discussion above. The commit
also includes heuristics suggest by Chetan.
Trunk: [r1766966|https://svn.apache.org/r1766966]
> 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.5.10, 1.4.8
> Reporter: Tomek Rękawek
> Assignee: Tomek Rękawek
> Fix For: 1.6, 1.5.13
>
> Attachments: OAK-4882.patch
>
>
> 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
(v6.3.4#6332)