[jira] [Comment Edited] (OAK-4882) Bottleneck in the asynchronous persistent cache

2016-11-04 Thread JIRA

[ 
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 11/4/16 7:48 PM:
-

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], 
[r1766992|https://svn.apache.org/r1766992], 
[r1767661|https://svn.apache.org/r1767661], 
[r1767991|https://svn.apache.org/r1767991], 
[r1768084|https://svn.apache.org/r1768084].
1.4: [r1766970|https://svn.apche.org/r1766970], 
[r1766993|https://svn.apache.org/r1766993], 
[r1767662|https://svn.apache.org/r1767662], 
[r1767992|https://svn.apache.org/r1767992].


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], 
[r1766992|https://svn.apache.org/r1766992], 
[r1767661|https://svn.apache.org/r1767661], 
[r1767991|https://svn.apache.org/r1767991].
1.4: [r1766970|https://svn.apche.org/r1766970], 
[r1766993|https://svn.apache.org/r1766993], 
[r1767662|https://svn.apache.org/r1767662], 
[r1767992|https://svn.apache.org/r1767992].

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


[jira] [Comment Edited] (OAK-4882) Bottleneck in the asynchronous persistent cache

2016-11-04 Thread JIRA

[ 
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 11/4/16 8:25 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], 
[r1766992|https://svn.apache.org/r1766992], 
[r1767661|https://svn.apache.org/r1767661], 
[r1767991|https://svn.apache.org/r1767991].
1.4: [r1766970|https://svn.apche.org/r1766970], 
[r1766993|https://svn.apache.org/r1766993], 
[r1767662|https://svn.apache.org/r1767662], 
[r1767992|https://svn.apache.org/r1767992].


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], 
[r1766992|https://svn.apache.org/r1766992], 
[r1767661|https://svn.apache.org/r1767661], 
[r1767991|https://svn.apache.org/r1767991].
1.4: [r1766970|https://svn.apche.org/r1766970], 
[r1766993|https://svn.apache.org/r1766993], 
[r1767662|https://svn.apache.org/r1767662].

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


[jira] [Comment Edited] (OAK-4882) Bottleneck in the asynchronous persistent cache

2016-11-04 Thread JIRA

[ 
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 11/4/16 8:23 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], 
[r1766992|https://svn.apache.org/r1766992], 
[r1767661|https://svn.apache.org/r1767661], 
[r1767991|https://svn.apache.org/r1767991].
1.4: [r1766970|https://svn.apche.org/r1766970], 
[r1766993|https://svn.apache.org/r1766993], 
[r1767662|https://svn.apache.org/r1767662].


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], 
[r1766992|https://svn.apache.org/r1766992], 
[r1767661|https://svn.apache.org/r1767661].
1.4: [r1766970|https://svn.apche.org/r1766970], 
[r1766993|https://svn.apache.org/r1766993], 
[r1767662|https://svn.apache.org/r1767662].

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


[jira] [Comment Edited] (OAK-4882) Bottleneck in the asynchronous persistent cache

2016-11-02 Thread JIRA

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


[jira] [Comment Edited] (OAK-4882) Bottleneck in the asynchronous persistent cache

2016-11-02 Thread JIRA

[ 
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 11/2/16 12:43 PM:
--

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], 
[r1766992|https://svn.apache.org/r1766992], 
[r1767661|https://svn.apache.org/r1767661].
1.4: [r1766970|https://svn.apche.org/r1766970], 
[r1766993|https://svn.apache.org/r1766993], 
[r1767662|https://svn.apache.org/r1767662].


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], 
[r1766992|https://svn.apache.org/r1766992].
1.4: [r1766970|https://svna.apche.org/r1766970], 
[r1766993|https://svn.apache.org/r1766993].

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


[jira] [Comment Edited] (OAK-4882) Bottleneck in the asynchronous persistent cache

2016-10-28 Thread JIRA

[ 
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 9:45 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], 
[r1766992|https://svn.apache.org/r1766992].
1.4: [r1766970|https://svna.apche.org/r1766970], 
[r1766993|https://svn.apache.org/r1766993].


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], 
[r1766992|https://svn.apache.org/r1766992].
1.4: [r1766970|https://svna.apche.org/r1766970].

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


[jira] [Comment Edited] (OAK-4882) Bottleneck in the asynchronous persistent cache

2016-10-28 Thread JIRA

[ 
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 9:44 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], 
[r1766992|https://svn.apache.org/r1766992].
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]
1.4: [r1766970|https://svna.apche.org/r1766970].

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


[jira] [Comment Edited] (OAK-4882) Bottleneck in the asynchronous persistent cache

2016-10-28 Thread Chetan Mehrotra (JIRA)

[ 
https://issues.apache.org/jira/browse/OAK-4882?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15614788#comment-15614788
 ] 

Chetan Mehrotra edited comment on OAK-4882 at 10/28/16 8:50 AM:


[~tomek.rekawek] It would be helpful to invest in some benchmark which can 
reproduce the issue and validate any approach against that. Otherwise we may 
hit issue somewhere else. 

Also I would feel more comfortable if this change gets some more test runs 
before we merge it to branch. 


was (Author: chetanm):
[~tomek.rekawek] It would be helpful to invest in some benchmark which can 
reproduce the issue and validate any approach against that. Otherwise we may 
hit issue somewhere else. 

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


[jira] [Comment Edited] (OAK-4882) Bottleneck in the asynchronous persistent cache

2016-10-28 Thread JIRA

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