[ https://issues.apache.org/jira/browse/OAK-2761?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Tomek Rękawek updated OAK-2761: ------------------------------- Attachment: OAK-2761-1.2.patch > Persistent cache: add data in a different thread > ------------------------------------------------ > > Key: OAK-2761 > URL: https://issues.apache.org/jira/browse/OAK-2761 > Project: Jackrabbit Oak > Issue Type: Improvement > Components: cache, core, mongomk > Reporter: Thomas Mueller > Assignee: Thomas Mueller > Labels: resilience > Fix For: 1.4 > > Attachments: AsyncCacheTest.patch, OAK-2761-1.2.patch, > OAK-2761-trunk.patch > > > 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. > {noformat} > "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) > {noformat} > 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). -- This message was sent by Atlassian JIRA (v6.3.4#6332)