[ https://issues.apache.org/jira/browse/OAK-11894?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Joerg Hoh updated OAK-11894: ---------------------------- Fix Version/s: 1.86.0 > DocViewImport: Resolve the IdentifierManager lazily > --------------------------------------------------- > > Key: OAK-11894 > URL: https://issues.apache.org/jira/browse/OAK-11894 > Project: Jackrabbit Oak > Issue Type: Improvement > Components: jcr > Affects Versions: 1.84.0 > Reporter: Joerg Hoh > Assignee: Joerg Hoh > Priority: Major > Fix For: 1.86.0 > > > The ImporterImpl class always initializes the ImporterImpl.IdResolver, which > can block in import situations like this: > {noformat} > at jdk.internal.misc.Unsafe.park(java.base@21.0.2/Native Method) > - parking to wait for <0x00000007c6ce7000> (a > java.util.concurrent.Semaphore$FairSync) > at > java.util.concurrent.locks.LockSupport.parkNanos(java.base@21.0.2/LockSupport.java:269) > at > java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(java.base@21.0.2/AbstractQueuedSynchronizer.java:756) > at > java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos(java.base@21.0.2/AbstractQueuedSynchronizer.java:1126) > at > java.util.concurrent.Semaphore.tryAcquire(java.base@21.0.2/Semaphore.java:415) > at > org.apache.jackrabbit.oak.segment.scheduler.LockBasedScheduler.getHeadNodeState(LockBasedScheduler.java:219) > at > org.apache.jackrabbit.oak.segment.SegmentNodeStore.getRoot(SegmentNodeStore.java:199) > at > org.apache.jackrabbit.oak.core.MutableRoot.<init>(MutableRoot.java:174) > at > org.apache.jackrabbit.oak.core.ContentSessionImpl.getLatestRoot(ContentSessionImpl.java:109) > at > org.apache.jackrabbit.oak.jcr.xml.ImporterImpl$IdResolver.<init>(ImporterImpl.java:593) > at > org.apache.jackrabbit.oak.jcr.xml.ImporterImpl.<init>(ImporterImpl.java:159) > at > org.apache.jackrabbit.oak.jcr.xml.ImportHandler.<init>(ImportHandler.java:77) > at > org.apache.jackrabbit.oak.jcr.session.SessionImpl.getImportContentHandler(SessionImpl.java:528) > at > org.apache.jackrabbit.vault.fs.impl.io.DocViewImporter.createNewNode(DocViewImporter.java:1117) > {noformat} > As the IdentifierManager (for which construction the > {{ContentSessionImpl.getLastestRoot()}} is resolved) is not required all the > time (actually it's only required if conflicting UUID is detected), we can > save time and compute this only when required. > I benchmarked on an otherwise idle system a small improvement in the range of > 2-3%, but I suspect a major improvement in case there are concurrent write > operations during the package installation. -- This message was sent by Atlassian Jira (v8.20.10#820010)