Details
-
Improvement
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
Description
The persistent cache usually stores data in a background thread, but sometimes (if a lot of data is added quickly) the foreground thread is blocked.
Even worse, switching the cache file can happen in a foreground thread, with the following stack trace.
"127.0.0.1 [1428931262206] POST /bin/replicate.json HTTP/1.1" prio=5 tid=0x00007fe5df819800 nid=0x9907 runnable [0x0000000113fc4000] java.lang.Thread.State: RUNNABLE ... at org.h2.mvstore.MVStoreTool.compact(MVStoreTool.java:404) at org.apache.jackrabbit.oak.plugins.document.persistentCache.PersistentCache$1.closeStore(PersistentCache.java:213) - locked <0x0000000782483050> (a org.apache.jackrabbit.oak.plugins.document.persistentCache.PersistentCache$1) at org.apache.jackrabbit.oak.plugins.document.persistentCache.PersistentCache.switchGenerationIfNeeded(PersistentCache.java:350) - locked <0x0000000782455710> (a org.apache.jackrabbit.oak.plugins.document.persistentCache.PersistentCache) at org.apache.jackrabbit.oak.plugins.document.persistentCache.NodeCache.write(NodeCache.java:85) at org.apache.jackrabbit.oak.plugins.document.persistentCache.NodeCache.put(NodeCache.java:130) at org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore.applyChanges(DocumentNodeStore.java:1060) at org.apache.jackrabbit.oak.plugins.document.Commit.applyToCache(Commit.java:599) at org.apache.jackrabbit.oak.plugins.document.CommitQueue.afterTrunkCommit(CommitQueue.java:127) - locked <0x0000000781890788> (a org.apache.jackrabbit.oak.plugins.document.CommitQueue) at org.apache.jackrabbit.oak.plugins.document.CommitQueue.done(CommitQueue.java:83) at org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore.done(DocumentNodeStore.java:637)
To avoid blocking the foreground thread, one solution is to store all data in a separate thread. If there is too much data added, then some of the data is not stored. If possible, the data that was not referenced a lot, and / or old revisions of documents (if new revisions are available).
Attachments
Attachments
Issue Links
- blocks
-
OAK-3286 Persistent Cache improvements
- Resolved
- is duplicated by
-
OAK-2686 Persistent cache: log activity and timing data, and possible optimizations
- Resolved
-
OAK-2745 PersistentCache should rely on eviction callback to add entry to the persistent cache
- Resolved
- is related to
-
OAK-4882 Bottleneck in the asynchronous persistent cache
- Closed
-
OAK-7559 CacheActionDispatcher not memory bound
- Closed
- relates to
-
OAK-2815 Persistent cache may block commit
- Closed
-
OAK-4123 Persistent cache: allow to configure the add data concurrency
- Closed
- requires
-
OAK-3997 Include eviction cause to the LIRS removal callback
- Closed