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

Joerg Hoh updated OAK-11782:
----------------------------
      Epic Link: OAK-11821
    Description: 
In AEM we often import large content packges via filevault. Tracking the 
process I frequently see this stacktrace:

{noformat}
at java.util.HashMap.putMapEntries(java.base@11.0.24/HashMap.java:508)
        at java.util.HashMap.<init>(java.base@11.0.24/HashMap.java:486)
        at 
org.apache.felix.framework.EventDispatcher.addListenerInfo(EventDispatcher.java:1028)
        at 
org.apache.felix.framework.EventDispatcher.addListener(EventDispatcher.java:243)
        - locked <0x000000058fdc1120> (a 
org.apache.felix.framework.EventDispatcher)
        at org.apache.felix.framework.Felix.addServiceListener(Felix.java:3642)
        at 
org.apache.felix.framework.BundleContextImpl.addServiceListener(BundleContextImpl.java:259)
        at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:298)
        - locked <0x00000007859b2bc0> (a 
org.osgi.util.tracker.ServiceTracker$Tracked)
        - locked <0x00000007859b29b0> (a org.osgi.util.tracker.ServiceTracker)
        at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:265)
        at 
org.apache.jackrabbit.oak.osgi.OsgiWhiteboard.track(OsgiWhiteboard.java:161)
        at 
org.apache.jackrabbit.oak.osgi.OsgiWhiteboard.track(OsgiWhiteboard.java:113)
        at 
org.apache.jackrabbit.oak.osgi.OsgiWhiteboard.track(OsgiWhiteboard.java:108)
        at 
org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.getService(WhiteboardUtils.java:186)
        at 
org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.getService(WhiteboardUtils.java:145)
        at 
org.apache.jackrabbit.oak.security.user.UserImporter.init(UserImporter.java:215)
        at 
org.apache.jackrabbit.oak.jcr.xml.ImporterImpl.<init>(ImporterImpl.java:169)
        at 
org.apache.jackrabbit.oak.jcr.xml.ImportHandler.<init>(ImportHandler.java:76)
        at 
org.apache.jackrabbit.oak.jcr.session.SessionImpl.getImportContentHandler(SessionImpl.java:527)
        at 
org.apache.jackrabbit.vault.fs.impl.io.DocViewImporter.createNewNode(DocViewImporter.java:1110)
        at 
org.apache.jackrabbit.vault.fs.impl.io.DocViewImporter.addNode(DocViewImporter.java:928)
        at 
org.apache.jackrabbit.vault.fs.impl.io.DocViewImporter.startDocViewNode(DocViewImporter.java:407)
        at 
org.apache.jackrabbit.vault.fs.impl.io.DocViewSAXHandler.startElement(DocViewSAXHandler.java:348)
        at 
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(java.xml@11.0.24/AbstractSAXParser.java:510)
{noformat}

In this area the JCR XML ImportHandler tries to get retrieven the UserMonitor 
service from the OSGI service registry. This is not per se a problem, but when 
installing packages of 10k+ nodes this overhead can take a significant amount 
of time (5-8% of the total duration); and according to my dumps the problem is 
not the actual retrieval of the service, but rather the creation of the Service 
Tracker.

To reduce this I suggest that we should make the Tracker a global object (a 
static member of the UserImporter class, being populated on first access), 
which will eliminate these frequent accesses to the OSGI Service Registry.





  was:

In AEM we often import large content packges via filevault. Tracking the 
process I frequently see this stacktrace:

{noformat}
at java.util.HashMap.putMapEntries(java.base@11.0.24/HashMap.java:508)
        at java.util.HashMap.<init>(java.base@11.0.24/HashMap.java:486)
        at 
org.apache.felix.framework.EventDispatcher.addListenerInfo(EventDispatcher.java:1028)
        at 
org.apache.felix.framework.EventDispatcher.addListener(EventDispatcher.java:243)
        - locked <0x000000058fdc1120> (a 
org.apache.felix.framework.EventDispatcher)
        at org.apache.felix.framework.Felix.addServiceListener(Felix.java:3642)
        at 
org.apache.felix.framework.BundleContextImpl.addServiceListener(BundleContextImpl.java:259)
        at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:298)
        - locked <0x00000007859b2bc0> (a 
org.osgi.util.tracker.ServiceTracker$Tracked)
        - locked <0x00000007859b29b0> (a org.osgi.util.tracker.ServiceTracker)
        at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:265)
        at 
org.apache.jackrabbit.oak.osgi.OsgiWhiteboard.track(OsgiWhiteboard.java:161)
        at 
org.apache.jackrabbit.oak.osgi.OsgiWhiteboard.track(OsgiWhiteboard.java:113)
        at 
org.apache.jackrabbit.oak.osgi.OsgiWhiteboard.track(OsgiWhiteboard.java:108)
        at 
org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.getService(WhiteboardUtils.java:186)
        at 
org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.getService(WhiteboardUtils.java:145)
        at 
org.apache.jackrabbit.oak.security.user.UserImporter.init(UserImporter.java:215)
        at 
org.apache.jackrabbit.oak.jcr.xml.ImporterImpl.<init>(ImporterImpl.java:169)
        at 
org.apache.jackrabbit.oak.jcr.xml.ImportHandler.<init>(ImportHandler.java:76)
        at 
org.apache.jackrabbit.oak.jcr.session.SessionImpl.getImportContentHandler(SessionImpl.java:527)
        at 
org.apache.jackrabbit.vault.fs.impl.io.DocViewImporter.createNewNode(DocViewImporter.java:1110)
        at 
org.apache.jackrabbit.vault.fs.impl.io.DocViewImporter.addNode(DocViewImporter.java:928)
        at 
org.apache.jackrabbit.vault.fs.impl.io.DocViewImporter.startDocViewNode(DocViewImporter.java:407)
        at 
org.apache.jackrabbit.vault.fs.impl.io.DocViewSAXHandler.startElement(DocViewSAXHandler.java:348)
        at 
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(java.xml@11.0.24/AbstractSAXParser.java:510)
{noformat}

In this area the JCR XML ImportHandler tries to get retrieven the UserMonitor 
service from the OSGI service registry. This is not per se a problem, but when 
installing packages of 10k+ nodes this overhead can take a significant amount 
of time (5-8% of the total duration); and according to my dumps the problem is 
not the actual retrieval of the service, but rather the creation of the Service 
Tracker.

To reduce this I suggest that we should make the Tracker a global object (a 
static member of the UserImporter class, being populated on first access), 
which will eliminate these frequent accesses to the OSGI Service Registry.






> UserImporter: use a global tracker for the UserMonitor.class
> ------------------------------------------------------------
>
>                 Key: OAK-11782
>                 URL: https://issues.apache.org/jira/browse/OAK-11782
>             Project: Jackrabbit Oak
>          Issue Type: Improvement
>          Components: jcr
>    Affects Versions: 1.78.0
>            Reporter: Joerg Hoh
>            Priority: Major
>
> In AEM we often import large content packges via filevault. Tracking the 
> process I frequently see this stacktrace:
> {noformat}
> at java.util.HashMap.putMapEntries(java.base@11.0.24/HashMap.java:508)
>       at java.util.HashMap.<init>(java.base@11.0.24/HashMap.java:486)
>       at 
> org.apache.felix.framework.EventDispatcher.addListenerInfo(EventDispatcher.java:1028)
>       at 
> org.apache.felix.framework.EventDispatcher.addListener(EventDispatcher.java:243)
>       - locked <0x000000058fdc1120> (a 
> org.apache.felix.framework.EventDispatcher)
>       at org.apache.felix.framework.Felix.addServiceListener(Felix.java:3642)
>       at 
> org.apache.felix.framework.BundleContextImpl.addServiceListener(BundleContextImpl.java:259)
>       at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:298)
>       - locked <0x00000007859b2bc0> (a 
> org.osgi.util.tracker.ServiceTracker$Tracked)
>       - locked <0x00000007859b29b0> (a org.osgi.util.tracker.ServiceTracker)
>       at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:265)
>       at 
> org.apache.jackrabbit.oak.osgi.OsgiWhiteboard.track(OsgiWhiteboard.java:161)
>       at 
> org.apache.jackrabbit.oak.osgi.OsgiWhiteboard.track(OsgiWhiteboard.java:113)
>       at 
> org.apache.jackrabbit.oak.osgi.OsgiWhiteboard.track(OsgiWhiteboard.java:108)
>       at 
> org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.getService(WhiteboardUtils.java:186)
>       at 
> org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.getService(WhiteboardUtils.java:145)
>       at 
> org.apache.jackrabbit.oak.security.user.UserImporter.init(UserImporter.java:215)
>       at 
> org.apache.jackrabbit.oak.jcr.xml.ImporterImpl.<init>(ImporterImpl.java:169)
>       at 
> org.apache.jackrabbit.oak.jcr.xml.ImportHandler.<init>(ImportHandler.java:76)
>       at 
> org.apache.jackrabbit.oak.jcr.session.SessionImpl.getImportContentHandler(SessionImpl.java:527)
>       at 
> org.apache.jackrabbit.vault.fs.impl.io.DocViewImporter.createNewNode(DocViewImporter.java:1110)
>       at 
> org.apache.jackrabbit.vault.fs.impl.io.DocViewImporter.addNode(DocViewImporter.java:928)
>       at 
> org.apache.jackrabbit.vault.fs.impl.io.DocViewImporter.startDocViewNode(DocViewImporter.java:407)
>       at 
> org.apache.jackrabbit.vault.fs.impl.io.DocViewSAXHandler.startElement(DocViewSAXHandler.java:348)
>       at 
> com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(java.xml@11.0.24/AbstractSAXParser.java:510)
> {noformat}
> In this area the JCR XML ImportHandler tries to get retrieven the UserMonitor 
> service from the OSGI service registry. This is not per se a problem, but 
> when installing packages of 10k+ nodes this overhead can take a significant 
> amount of time (5-8% of the total duration); and according to my dumps the 
> problem is not the actual retrieval of the service, but rather the creation 
> of the Service Tracker.
> To reduce this I suggest that we should make the Tracker a global object (a 
> static member of the UserImporter class, being populated on first access), 
> which will eliminate these frequent accesses to the OSGI Service Registry.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to