[infinispan-issues] [JBoss JIRA] (ISPN-9541) Module initialization is not thread-safe

Dan Berindei (JIRA) issues at jboss.org
Wed Sep 26 05:28:00 EDT 2018


    [ https://issues.jboss.org/browse/ISPN-9541?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13638613#comment-13638613 ] 

Dan Berindei commented on ISPN-9541:
------------------------------------

These server startup errors are probably related:

{noformat}
16:57:41,261 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-2) MSC000001: Failed to start service jboss.datagrid-infinispan-endpoint.hotrod.hotrod-connector: org.jboss.msc.service.StartException in service jboss.datagrid-infinispan-endpoint.hotrod.hotrod-connector: DGENDPT10004: Failed to start HotRodServer
	at org.infinispan.server.endpoint.subsystem.ProtocolServerService.start(ProtocolServerService.java:160)
	at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1736)
	at org.jboss.msc.service.ServiceControllerImpl$StartTask.execute(ServiceControllerImpl.java:1698)
	at org.jboss.msc.service.ServiceControllerImpl$ControllerTask.run(ServiceControllerImpl.java:1556)
	at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
	at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1985)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1487)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1378)
	at java.lang.Thread.run(Thread.java:748)
Caused by: org.infinispan.commons.CacheConfigurationException: ISPN005029: No task manager available to register the admin operations handler
	at org.infinispan.server.core.AbstractProtocolServer.registerAdminOperationsHandler(AbstractProtocolServer.java:70)
	at org.infinispan.server.core.AbstractProtocolServer.startInternal(AbstractProtocolServer.java:55)
	at org.infinispan.server.hotrod.HotRodServer.startInternal(HotRodServer.java:250)
	at org.infinispan.server.hotrod.HotRodServer.startInternal(HotRodServer.java:106)
	at org.infinispan.server.core.AbstractProtocolServer.start(AbstractProtocolServer.java:79)
	at org.infinispan.server.endpoint.subsystem.SecurityActions$6.run(SecurityActions.java:136)
	at org.infinispan.server.endpoint.subsystem.SecurityActions$6.run(SecurityActions.java:133)
	at org.infinispan.security.Security.doPrivileged(Security.java:44)
	at org.infinispan.server.endpoint.subsystem.SecurityActions.doPrivileged(SecurityActions.java:42)
	at org.infinispan.server.endpoint.subsystem.SecurityActions.startProtocolServer(SecurityActions.java:140)
	at org.infinispan.server.endpoint.subsystem.ProtocolServerService.startProtocolServer(ProtocolServerService.java:194)
	at org.infinispan.server.endpoint.subsystem.ProtocolServerService.start(ProtocolServerService.java:152)
	... 8 more
{noformat}

{noformat}
16:57:42,424 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-1) MSC000001: Failed to start service jboss.datagrid-infinispan-endpoint.rest.rest-connector: org.jboss.msc.service.StartException in service jboss.datagrid-infinispan-endpoint.rest.rest-connector: DGENDPT10016: Could not start the web context for the REST Server
	at org.infinispan.server.endpoint.subsystem.RestService.start(RestService.java:158)
	at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1736)
	at org.jboss.msc.service.ServiceControllerImpl$StartTask.execute(ServiceControllerImpl.java:1698)
	at org.jboss.msc.service.ServiceControllerImpl$ControllerTask.run(ServiceControllerImpl.java:1556)
	at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
	at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1985)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1487)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1378)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NullPointerException
	at org.infinispan.server.core.AbstractProtocolServer.registerTransportMBean(AbstractProtocolServer.java:115)
	at org.infinispan.server.core.AbstractProtocolServer.startTransport(AbstractProtocolServer.java:92)
	at org.infinispan.server.core.AbstractProtocolServer.startInternal(AbstractProtocolServer.java:61)
	at org.infinispan.rest.RestServer.startInternal(RestServer.java:85)
	at org.infinispan.rest.RestServer.startInternal(RestServer.java:23)
	at org.infinispan.server.core.AbstractProtocolServer.start(AbstractProtocolServer.java:79)
	at org.infinispan.server.endpoint.subsystem.RestService.start(RestService.java:155)
	... 8 more
{noformat}

https://ci.infinispan.org/job/Infinispan/job/PR-6247/1/testReport/junit/org.infinispan.server.test.client.hotrod/HotRodRemoteCacheLocalIT/testReplaceWithVersionWithLifespan/


> Module initialization is not thread-safe
> ----------------------------------------
>
>                 Key: ISPN-9541
>                 URL: https://issues.jboss.org/browse/ISPN-9541
>             Project: Infinispan
>          Issue Type: Bug
>          Components: Core, Server
>    Affects Versions: 9.4.0.CR3
>            Reporter: Dan Berindei
>            Assignee: Dan Berindei
>             Fix For: 9.4.0.Final
>
>
> In my ISPN-9127 fix I created a {{BasicComponentRegistry}} interface that represents a  mostly-read-only collection of components. It has {{replaceComponent()}} method and a {{rewire()}} method for testing purposes, but it turns out modules were also relying on the ability to replace existing components in order to work.
> Replacing global components is normally safe during the {{ModuleLifecycle.cacheManagerStarting()}}, because none of the components are started yet, so when a component starts later we can still start its dependencies first. But because some modules starts some global components, e.g. by calling {{manager.getCache(name)}}, that assumption breaks.
> The {{infinispan-server-event-logger}} module is a bit more sneaky: it doesn't replace a component, instead it replaces the actual implementation of the event logger in the {{EventLogManager}} component. Events that happen before the module's {{cacheManagerStarting()}} or after {{cacheManagerStopping()}} will be silently dropped from the persistent event log.
> I am investigating making the module a factory of factories. Instead of having a monolitic {{cacheManagerStarting()}} method, it could define a set of components that it can create, and a set of components that should be started before the cache manager is "running". We probably need a way to depend on other modules as well, maybe reusing the {{@Inject}} and {{@ComponentName}} annotations.



--
This message was sent by Atlassian JIRA
(v7.5.0#75005)


More information about the infinispan-issues mailing list