[ 
https://issues.apache.org/jira/browse/OAK-2815?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Thomas Mueller updated OAK-2815:
--------------------------------
    Labels:   (was: docs-impacting)

> Persistent cache may block commit
> ---------------------------------
>
>                 Key: OAK-2815
>                 URL: https://issues.apache.org/jira/browse/OAK-2815
>             Project: Jackrabbit Oak
>          Issue Type: Bug
>    Affects Versions: 1.2
>            Reporter: Marcel Reutegger
>            Assignee: Thomas Mueller
>             Fix For: 1.2.2, 1.3.0, 1.0.14
>
>         Attachments: OAK-2815.patch
>
>
> The persistent cache may block a commit for a rather long time if the 
> generation is switched during the commit. The default configuration tells the 
> persistent cache to compact the store when it is closed. This is exactly what 
> happens when a generation is switched.
> I think it would be best to disable compaction.
> I was able to reproduce it with the {{ContinuousRevisionGCTest}} in oak-run 
> with {{-DgarbageRatio=0.9}}, but it probably also happens with the default 
> garbage ratio of 0.5.
> Once the MVStore reaches 1GB, the console will show something like this:
> {noformat}
> Performed RevisionGC in 6.331 s 
> (VersionGCStats{ignoredGCDueToCheckPoint=false, deletedDocGCCount=54054, 
> splitDocGCCount=0, intermediateSplitDocGCCount=0, 
> timeToCollectDeletedDocs=622.8 ms, timeTakenToDeleteDocs=5.708 s})
> .................
> Performed RevisionGC in 9.232 s 
> (VersionGCStats{ignoredGCDueToCheckPoint=false, deletedDocGCCount=26026, 
> splitDocGCCount=0, intermediateSplitDocGCCount=0, 
> timeToCollectDeletedDocs=6.549 s, timeTakenToDeleteDocs=2.682 s})
> Performed RevisionGC in 1.269 s 
> (VersionGCStats{ignoredGCDueToCheckPoint=false, deletedDocGCCount=12012, 
> splitDocGCCount=0, intermediateSplitDocGCCount=0, 
> timeToCollectDeletedDocs=133.5 ms, timeTakenToDeleteDocs=1.134 s})
> Performed RevisionGC in 20.49 ms 
> (VersionGCStats{ignoredGCDueToCheckPoint=false, deletedDocGCCount=0, 
> splitDocGCCount=0, intermediateSplitDocGCCount=0, 
> timeToCollectDeletedDocs=19.50 ms, timeTakenToDeleteDocs=0.000 ns})
> .15:19:16.682 [DocumentNodeStore background update thread] INFO  
> o.a.j.o.p.document.DocumentNodeStore - Background operations stats (clean:0, 
> split:0, lock:35581, write:1, num:5)
> ............
> Performed RevisionGC in 8.449 s 
> (VersionGCStats{ignoredGCDueToCheckPoint=false, deletedDocGCCount=2002, 
> splitDocGCCount=0, intermediateSplitDocGCCount=0, 
> timeToCollectDeletedDocs=8.276 s, timeTakenToDeleteDocs=171.7 ms})
> {noformat}
> The background update thread had to wait 35 seconds for the 
> backgroundOperations lock, which was held by the committing thread:
> {noformat}
> "Thread-2" prio=5 tid=0x00007f986b9a7800 nid=0x6803 runnable 
> [0x0000000112780000]
>    java.lang.Thread.State: RUNNABLE
>       at org.h2.compress.CompressLZF.compress(CompressLZF.java:239)
>       at org.h2.mvstore.Page.write(Page.java:754)
>       at org.h2.mvstore.Page.writeUnsavedRecursive(Page.java:816)
>       at org.h2.mvstore.Page.writeUnsavedRecursive(Page.java:822)
>       at org.h2.mvstore.Page.writeUnsavedRecursive(Page.java:822)
>       at org.h2.mvstore.MVStore.storeNowTry(MVStore.java:1065)
>       at org.h2.mvstore.MVStore.storeNow(MVStore.java:981)
>       at org.h2.mvstore.MVStore.commitAndSave(MVStore.java:970)
>       - locked <0x00000007e15cccf0> (a org.h2.mvstore.MVStore)
>       at org.h2.mvstore.MVStore.beforeWrite(MVStore.java:2084)
>       at org.h2.mvstore.MVMap.beforeWrite(MVMap.java:1046)
>       at org.h2.mvstore.MVMap.copy(MVMap.java:1231)
>       at org.h2.mvstore.MVMap.copy(MVMap.java:1248)
>       at org.h2.mvstore.MVMap.copy(MVMap.java:1248)
>       at org.h2.mvstore.MVMap.copyFrom(MVMap.java:1218)
>       at org.h2.mvstore.MVStoreTool.compact(MVStoreTool.java:493)
>       at org.h2.mvstore.MVStoreTool.compact(MVStoreTool.java:458)
>       at org.h2.mvstore.MVStoreTool.compact(MVStoreTool.java:404)
>       at 
> org.apache.jackrabbit.oak.plugins.document.persistentCache.PersistentCache$1.closeStore(PersistentCache.java:235)
>       - locked <0x00000007c0c82760> (a 
> org.apache.jackrabbit.oak.plugins.document.persistentCache.PersistentCache$1)
>       at 
> org.apache.jackrabbit.oak.plugins.document.persistentCache.PersistentCache.switchGenerationIfNeeded(PersistentCache.java:372)
>       - locked <0x00000007c03a6c00> (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.LocalDiffCache$1.done(LocalDiffCache.java:98)
>       at 
> org.apache.jackrabbit.oak.plugins.document.Commit.applyToCache(Commit.java:602)
>       at 
> org.apache.jackrabbit.oak.plugins.document.CommitQueue.afterTrunkCommit(CommitQueue.java:127)
>       - locked <0x00000007c03a46f0> (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:644)
>       at 
> org.apache.jackrabbit.oak.plugins.document.DocumentNodeStoreBranch.persist(DocumentNodeStoreBranch.java:338)
>       at 
> org.apache.jackrabbit.oak.plugins.document.DocumentNodeStoreBranch.persist(DocumentNodeStoreBranch.java:304)
>       at 
> org.apache.jackrabbit.oak.plugins.document.DocumentNodeStoreBranch.access$200(DocumentNodeStoreBranch.java:52)
>       at 
> org.apache.jackrabbit.oak.plugins.document.DocumentNodeStoreBranch$InMemory.merge(DocumentNodeStoreBranch.java:541)
>       at 
> org.apache.jackrabbit.oak.plugins.document.DocumentNodeStoreBranch.merge0(DocumentNodeStoreBranch.java:230)
>       at 
> org.apache.jackrabbit.oak.plugins.document.DocumentNodeStoreBranch.merge(DocumentNodeStoreBranch.java:171)
>       at 
> org.apache.jackrabbit.oak.plugins.document.DocumentRootBuilder.merge(DocumentRootBuilder.java:158)
>       at 
> org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore.merge(DocumentNodeStore.java:1490)
>       at 
> org.apache.jackrabbit.oak.core.MutableRoot.commit(MutableRoot.java:247)
>       at 
> org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.commit(SessionDelegate.java:341)
>       at 
> org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.save(SessionDelegate.java:487)
>       at 
> org.apache.jackrabbit.oak.jcr.session.SessionImpl$8.performVoid(SessionImpl.java:424)
>       at 
> org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.performVoid(SessionDelegate.java:268)
>       at 
> org.apache.jackrabbit.oak.jcr.session.SessionImpl.save(SessionImpl.java:421)
>       at 
> org.apache.jackrabbit.oak.ContinuousRevisionGCTest$Writer.run(ContinuousRevisionGCTest.java:72)
>       at java.lang.Thread.run(Thread.java:745)
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to