Hi Robert,

Regarding the question in the subject line "Why does loading classes reach
into the service registry?"
This is most likely to see if there are any registered weaving hooks which
can weave the class bytes.

Best regards,

David

[1]
https://osgi.org/specification/osgi.core/7.0.0/framework.weavinghooks.html

On Fri, 22 Feb 2019 at 10:39, Robert Munteanu <[email protected]> wrote:

> Hi,
>
> I was looking for the root cause of this failure. It looks like the
> Sling repository startup failed once and then it was interrupted. The
> interrupt happened during class initialisation and then the
> InitialContent Oak class was marked as unavailable ( see stack traces
> below ).
>
> 1st startup attempt, interrupted
>
> 21.02.2019 14:50:50.292 *ERROR* [Apache Sling Repository Startup Thread
> #1] org.apache.sling.jcr.oak.server.internal.OakSlingRepositoryManager
> start: Uncaught Throwable trying to access Repository, calling
> stopRepository()
> java.lang.ExceptionInInitializerError: null
>         at
> org.apache.sling.jcr.oak.server.internal.OakSlingRepositoryManager.acquireRepository(OakSlingRepositoryManager.java:144)
> [org.apache.sling.jcr.oak.server:1.2.0]
>         at
> org.apache.sling.jcr.base.AbstractSlingRepositoryManager.initializeAndRegisterRepositoryService(AbstractSlingRepositoryManager.java:481)
> [org.apache.sling.jcr.base:3.0.6]
>         at
> org.apache.sling.jcr.base.AbstractSlingRepositoryManager.access$300(AbstractSlingRepositoryManager.java:86)
> [org.apache.sling.jcr.base:3.0.6]
>         at
> org.apache.sling.jcr.base.AbstractSlingRepositoryManager$4.run(AbstractSlingRepositoryManager.java:462)
> [org.apache.sling.jcr.base:3.0.6]
> Caused by: java.lang.RuntimeException: java.lang.InterruptedException
>         at
> org.apache.felix.framework.ServiceRegistry.getService(ServiceRegistry.java:369)
>         at org.apache.felix.framework.Felix.getService(Felix.java:3954)
>         at
> org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.transformClass(BundleWiringImpl.java:2383)
>         at
> org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.findClass(BundleWiringImpl.java:2081)
>         at
> org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1565)
>         at
> org.apache.felix.framework.BundleWiringImpl.access$300(BundleWiringImpl.java:79)
>         at
> org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1982)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
>         at
> org.apache.jackrabbit.oak.plugins.tree.factories.RootFactory.createSystemRoot(RootFactory.java:80)
> [org.apache.jackrabbit.oak-core:1.8.8]
>         at
> org.apache.jackrabbit.oak.InitialContent.initialize(InitialContent.java:134)
> [org.apache.jackrabbit.oak-core:1.8.8]
>         at
> org.apache.jackrabbit.oak.InitialContent.createInitialContent(InitialContent.java:74)
> [org.apache.jackrabbit.oak-core:1.8.8]
>         at
> org.apache.jackrabbit.oak.InitialContent.<clinit>(InitialContent.java:70)
> [org.apache.jackrabbit.oak-core:1.8.8]
>         ... 4 common frames omitted
> Caused by: java.lang.InterruptedException: null
>         at
> java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1302)
>         at
> java.util.concurrent.CountDownLatch.await(CountDownLatch.java:231)
>         at
> org.apache.felix.framework.ServiceRegistry.getService(ServiceRegistry.java:365)
>         ... 15 common frames omitted
>
> 2nd startup attempt, blocked due to a NoClassDefFoundError
>
>
> 21.02.2019 14:50:50.310 *ERROR* [Apache Sling Repository Startup Thread
> #2] org.apache.sling.jcr.oak.server.internal.OakSlingRepositoryManager
> start: Uncaught Throwable trying to access Repository, calling
> stopRepository()
> java.lang.NoClassDefFoundError: Could not initialize class
> org.apache.jackrabbit.oak.InitialContent
>         at
> org.apache.sling.jcr.oak.server.internal.OakSlingRepositoryManager.acquireRepository(OakSlingRepositoryManager.java:144)
> [org.apache.sling.jcr.oak.server:1.2.0]
>         at
> org.apache.sling.jcr.base.AbstractSlingRepositoryManager.initializeAndRegisterRepositoryService(AbstractSlingRepositoryManager.java:481)
> [org.apache.sling.jcr.base:3.0.6]
>         at
> org.apache.sling.jcr.base.AbstractSlingRepositoryManager.access$300(AbstractSlingRepositoryManager.java:86)
> [org.apache.sling.jcr.base:3.0.6]
>         at
> org.apache.sling.jcr.base.AbstractSlingRepositoryManager$4.run(AbstractSlingRepositoryManager.java:462)
> [org.apache.sling.jcr.base:3.0.6]
>
> Looking at the Oak code it looks it runs the 'createInitialContent'
> method in a class initialiser, but on the other hand I don't see
> anything that could reach into the service registry and therefore can
> not argue that it is doing interruptible calls and should be changed.
>
>
> https://github.com/apache/jackrabbit-oak/blob/jackrabbit-oak-1.8.8/oak-core/src/main/java/org/apache/jackrabbit/oak/InitialContent.java#L70
>
> https://github.com/apache/jackrabbit-oak/blob/jackrabbit-oak-1.8.8/oak-core/src/main/java/org/apache/jackrabbit/oak/InitialContent.java#L134
>
> https://github.com/apache/jackrabbit-oak/blob/jackrabbit-oak-1.8.8/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/tree/factories/RootFactory.java#L80
>
> How can we approach this problem to ensure that such interrupts are
> gracefully handled?
>
> Thanks,
>
> Robert
>
>

Reply via email to