[ https://issues.apache.org/jira/browse/OAK-4882?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15629029#comment-15629029 ]
Tomek Rękawek edited comment on OAK-4882 at 11/2/16 1:51 PM: ------------------------------------------------------------- Using stats from OAK-5038 it is possible to measure how many entries are rejected because of the full queue. It seems that the don't-write-persisted-entries-again condition helps a great deal here. After enabling it, the queue performance is enough to process all the entries (nothing is rejected at all). As a test I started Sling-based CMS on Mongo - it creates a lot of content during its initialisation. was (Author: tomek.rekawek): Using stats from OAK-5038 it is possible to measure how many entries are rejected because of the full queue. It seems that the don't-write-persisted-entries-again condition helps a great deal here. After enabling it, the queue performance is enough to process all the entries (nothing is rejected at all). As a test I started Sling-based CMS on Mongo - it creates a lot of content during its initialisation. I think we should use the same heuristics for the default, synchronous case. > 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, 1.4.10 > > 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)