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