-
Type: Bug
-
Status: Resolved
-
Priority: Major
-
Resolution: Fixed
-
Affects Version/s: 6.0
-
Component/s: Events / Works, Redis
At startup, the WorkManager service is called first when the applicationStarted event is sent, whereas it needs Redis configuration to be loaded. This error is raised:
ERROR [localhost-startStop-1] [org.nuxeo.runtime.model.impl.RegistrationInfoImpl] Component notification of application started failed. java.lang.RuntimeException: Failed to initialize repository 'default': java.lang.NullPointerException at org.nuxeo.ecm.core.repository.RepositoryService.initializeRepository(RepositoryService.java:151) at org.nuxeo.ecm.core.repository.RepositoryService.applicationStarted(RepositoryService.java:102) at org.nuxeo.runtime.model.impl.RegistrationInfoImpl.notifyApplicationStarted(RegistrationInfoImpl.java:334) at org.nuxeo.runtime.osgi.OSGiRuntimeService.notifyComponentsOnStarted(OSGiRuntimeService.java:494) at org.nuxeo.runtime.osgi.OSGiRuntimeService.fireApplicationStarted(OSGiRuntimeService.java:532) at org.nuxeo.runtime.osgi.OSGiRuntimeService.frameworkEvent(OSGiRuntimeService.java:542) at org.nuxeo.osgi.OSGiAdapter.fireFrameworkEvent(OSGiAdapter.java:238) at org.nuxeo.osgi.application.loader.FrameworkLoader.doStart(FrameworkLoader.java:232) at org.nuxeo.osgi.application.loader.FrameworkLoader.start(FrameworkLoader.java:112) at org.nuxeo.runtime.deployment.NuxeoStarter.start(NuxeoStarter.java:121) at org.nuxeo.runtime.deployment.NuxeoStarter.contextInitialized(NuxeoStarter.java:89) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4994) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5492) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:649) at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:672) at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1861) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) Caused by: org.nuxeo.ecm.core.api.ClientException: java.lang.NullPointerException at org.nuxeo.ecm.core.api.UnrestrictedSessionRunner.runUnrestricted(UnrestrictedSessionRunner.java:158) at org.nuxeo.ecm.core.repository.RepositoryService.initializeRepository(RepositoryService.java:144) ... 23 more Caused by: java.lang.NullPointerException at org.nuxeo.ecm.core.work.WorkManagerImpl.isQueuingEnabled(WorkManagerImpl.java:235) at org.nuxeo.ecm.core.work.WorkManagerImpl.schedule(WorkManagerImpl.java:774) at org.nuxeo.ecm.core.work.WorkManagerImpl.schedule(WorkManagerImpl.java:757) at org.nuxeo.ecm.core.event.impl.AsyncEventExecutor.run(AsyncEventExecutor.java:77) at org.nuxeo.ecm.core.event.impl.EventServiceImpl.fireEventBundle(EventServiceImpl.java:338) at org.nuxeo.ecm.core.event.impl.EventServiceImpl.handleTxCommited(EventServiceImpl.java:507) at org.nuxeo.ecm.core.event.impl.EventServiceImpl.recordEvent(EventServiceImpl.java:477) at org.nuxeo.ecm.core.event.impl.EventServiceImpl.fireEvent(EventServiceImpl.java:282) at org.nuxeo.ecm.core.api.AbstractSession.notifyEvent(AbstractSession.java:277) at org.nuxeo.ecm.core.api.AbstractSession.save(AbstractSession.java:1603) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.nuxeo.ecm.core.api.TransactionalCoreSessionWrapper.invoke(TransactionalCoreSessionWrapper.java:131) at com.sun.proxy.$Proxy57.save(Unknown Source) at org.nuxeo.ecm.core.api.UnrestrictedSessionRunner.runUnrestricted(UnrestrictedSessionRunner.java:154) ... 24 more
So RedisComponent should have a lower applicationStarted order.
At shutdown, the RedisComponent is called first whereas the WorkManager is still active. Many errors like this one are thrown:
ERROR [WorkManagerImpl] Uncaught error on thread Nuxeo-Work-elasticSearchIndexing-69 redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool at redis.clients.util.Pool.getResource(Pool.java:42) at org.nuxeo.ecm.core.redis.RedisPoolExecutor.execute(RedisPoolExecutor.java:29) at org.nuxeo.ecm.core.redis.contribs.RedisWorkQueuing.removeScheduledWork(RedisWorkQueuing.java:794) at org.nuxeo.ecm.core.redis.contribs.RedisBlockingQueue.pollElement(RedisBlockingQueue.java:102) at org.nuxeo.ecm.core.work.NuxeoBlockingQueue.poll(NuxeoBlockingQueue.java:125) at org.nuxeo.ecm.core.redis.contribs.RedisBlockingQueue.poll(RedisBlockingQueue.java:76) at org.nuxeo.ecm.core.redis.contribs.RedisBlockingQueue.take(RedisBlockingQueue.java:58) at org.nuxeo.ecm.core.redis.contribs.RedisBlockingQueue.take(RedisBlockingQueue.java:37) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.IllegalStateException: Pool not open at org.apache.commons.pool2.impl.BaseGenericObjectPool.assertOpen(BaseGenericObjectPool.java:605) at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:405) at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:360) at redis.clients.util.Pool.getResource(Pool.java:40) ... 11 more