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