Bug 1200822 - JSR-107 Support for clustered caches in HotRod implementation
Summary: JSR-107 Support for clustered caches in HotRod implementation
Keywords:
Status: ASSIGNED
Alias: None
Product: JBoss Data Grid 6
Classification: JBoss
Component: Server
Version: 6.5.0
Hardware: Unspecified
OS: Unspecified
unspecified
high
Target Milestone: ---
: 7.0.0
Assignee: Tristan Tarrant
QA Contact: Martin Gencur
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2015-03-11 12:49 UTC by Matej Čimbora
Modified: 2015-07-08 09:47 UTC (History)
5 users (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
When creating a new cache (which is not defined in server configuration file) in HotRod implementation of JSR-107, the cache is created as <literal>local</literal> only in one of the servers. This behavior requires class <classname>org.jboss.as.controller.client.ModelControllerClient</classname> to be present on the classpath. As a workaround use a clustered cache defined in the server configuration file. This still requires <methodname>cacheManager.createCache(cacheName, configuration)</methodname> to be invoked before accessing the cache for the first time.
Clone Of:
Environment:
Last Closed:
Type: Bug
Embargoed:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Red Hat Issue Tracker ISPN-5286 0 Major Open JSR-107 Support for clustered caches in HotRod implementation 2018-08-10 15:58:57 UTC

Description Matej Čimbora 2015-03-11 12:49:31 UTC
Current implementation supports only using local caches - usage of different cache types leads to the following exceptions (when using cache which is included in configuration file): 

Client:
javax.cache.CacheException: ISPN021027: Failed to add local cache 'default' on the server
	at org.infinispan.jcache.remote.ServerManager$3.run(ServerManager.java:118)
	at org.infinispan.jcache.remote.ServerManager.withManagementClient(ServerManager.java:171)
	at org.infinispan.jcache.remote.ServerManager.addCache(ServerManager.java:104)
	at org.infinispan.jcache.remote.JCacheManager.create(JCacheManager.java:65)
	at org.infinispan.jcache.AbstractJCacheManager.createCache(AbstractJCacheManager.java:94)
	at org.infinispan.server.test.jcache.JCacheRemoteIT.testCachingConfiguration(JCacheRemoteIT.java:78)

Server:
10:47:29,896 ERROR [org.jboss.as.controller.management-operation] (management-handler-thread - 2) JBAS014612: Operation ("add") failed - address: ([
    ("subsystem" => "infinispan"),
    ("cache-container" => "clustered"),
    ("local-cache" => "default")
]): org.jboss.msc.service.DuplicateServiceException: Service jboss.infinispan.clustered.default.config is already registered
	at org.jboss.msc.service.ServiceRegistrationImpl.setInstance(ServiceRegistrationImpl.java:158) [jboss-msc-1.1.5.Final-redhat-1.jar:1.1.5.Final-redhat-1]
	at org.jboss.msc.service.ServiceControllerImpl.startInstallation(ServiceControllerImpl.java:236) [jboss-msc-1.1.5.Final-redhat-1.jar:1.1.5.Final-redhat-1]
	at org.jboss.msc.service.ServiceContainerImpl.install(ServiceContainerImpl.java:742) [jboss-msc-1.1.5.Final-redhat-1.jar:1.1.5.Final-redhat-1]
	at org.jboss.msc.service.ServiceTargetImpl.install(ServiceTargetImpl.java:243) [jboss-msc-1.1.5.Final-redhat-1.jar:1.1.5.Final-redhat-1]
	at org.jboss.msc.service.ServiceControllerImpl$ChildServiceTarget.install(ServiceControllerImpl.java:2433) [jboss-msc-1.1.5.Final-redhat-1.jar:1.1.5.Final-redhat-1]
	at org.jboss.msc.service.ServiceBuilderImpl.install(ServiceBuilderImpl.java:345) [jboss-msc-1.1.5.Final-redhat-1.jar:1.1.5.Final-redhat-1]
	at org.jboss.as.controller.OperationContextImpl$ContextServiceBuilder.install(OperationContextImpl.java:1688) [jboss-as-controller-7.5.0.Final-redhat-19.jar:7.5.0.Final-redhat-19]
	at org.jboss.as.clustering.infinispan.subsystem.CacheAdd.installCacheConfigurationService(CacheAdd.java:321)
	at org.jboss.as.clustering.infinispan.subsystem.CacheAdd.installRuntimeServices(CacheAdd.java:246)
	at org.jboss.as.clustering.infinispan.subsystem.CacheAdd.performRuntime(CacheAdd.java:205)
	at org.jboss.as.controller.AbstractAddStepHandler$1.execute(AbstractAddStepHandler.java:75) [jboss-as-controller-7.5.0.Final-redhat-19.jar:7.5.0.Final-redhat-19]
	at org.jboss.as.controller.AbstractOperationContext.executeStep(AbstractOperationContext.java:702) [jboss-as-controller-7.5.0.Final-redhat-19.jar:7.5.0.Final-redhat-19]
	at org.jboss.as.controller.AbstractOperationContext.doCompleteStep(AbstractOperationContext.java:537) [jboss-as-controller-7.5.0.Final-redhat-19.jar:7.5.0.Final-redhat-19]
	at org.jboss.as.controller.AbstractOperationContext.completeStepInternal(AbstractOperationContext.java:338) [jboss-as-controller-7.5.0.Final-redhat-19.jar:7.5.0.Final-redhat-19]
	at org.jboss.as.controller.AbstractOperationContext.executeOperation(AbstractOperationContext.java:314) [jboss-as-controller-7.5.0.Final-redhat-19.jar:7.5.0.Final-redhat-19]
	at org.jboss.as.controller.OperationContextImpl.executeOperation(OperationContextImpl.java:1144) [jboss-as-controller-7.5.0.Final-redhat-19.jar:7.5.0.Final-redhat-19]
	at org.jboss.as.controller.ModelControllerImpl.internalExecute(ModelControllerImpl.java:331) [jboss-as-controller-7.5.0.Final-redhat-19.jar:7.5.0.Final-redhat-19]
	at org.jboss.as.controller.ModelControllerImpl.execute(ModelControllerImpl.java:201) [jboss-as-controller-7.5.0.Final-redhat-19.jar:7.5.0.Final-redhat-19]
	at org.jboss.as.controller.remote.ModelControllerClientOperationHandler$ExecuteRequestHandler.doExecute(ModelControllerClientOperationHandler.java:219) [jboss-as-controller-7.5.0.Final-redhat-19.jar:7.5.0.Final-redhat-19]
	at org.jboss.as.controller.remote.ModelControllerClientOperationHandler$ExecuteRequestHandler.access$300(ModelControllerClientOperationHandler.java:146) [jboss-as-controller-7.5.0.Final-redhat-19.jar:7.5.0.Final-redhat-19]
	at org.jboss.as.controller.remote.ModelControllerClientOperationHandler$ExecuteRequestHandler$1$1.run(ModelControllerClientOperationHandler.java:168) [jboss-as-controller-7.5.0.Final-redhat-19.jar:7.5.0.Final-redhat-19]
	at org.jboss.as.controller.remote.ModelControllerClientOperationHandler$ExecuteRequestHandler$1$1.run(ModelControllerClientOperationHandler.java:164) [jboss-as-controller-7.5.0.Final-redhat-19.jar:7.5.0.Final-redhat-19]
	at java.security.AccessController.doPrivileged(Native Method) [rt.jar:1.7.0_60]
	at javax.security.auth.Subject.doAs(Subject.java:415) [rt.jar:1.7.0_60]
	at org.jboss.as.controller.AccessAuditContext.doAs(AccessAuditContext.java:94) [jboss-as-controller-7.5.0.Final-redhat-19.jar:7.5.0.Final-redhat-19]
	at org.jboss.as.controller.remote.ModelControllerClientOperationHandler$ExecuteRequestHandler$1.execute(ModelControllerClientOperationHandler.java:164) [jboss-as-controller-7.5.0.Final-redhat-19.jar:7.5.0.Final-redhat-19]
	at org.jboss.as.protocol.mgmt.AbstractMessageHandler$2$1.doExecute(AbstractMessageHandler.java:298) [jboss-as-protocol-7.5.0.Final-redhat-19.jar:7.5.0.Final-redhat-19]
	at org.jboss.as.protocol.mgmt.AbstractMessageHandler$AsyncTaskRunner.run(AbstractMessageHandler.java:537) [jboss-as-protocol-7.5.0.Final-redhat-19.jar:7.5.0.Final-redhat-19]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_60]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_60]
	at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_60]
	at org.jboss.threads.JBossThread.run(JBossThread.java:122) [jboss-threads-2.1.2.Final-redhat-1.jar:2.1.2.Final-redhat-1]


Furthermore, when using multiple nodes in the cluster and the cache is not amongst configured caches, it is created as 'local' only on one node (this relates to fact org.infinispan.jcache.remote.ServerManager is configured to use one specific management interface - which is btw hardcoded and cannot be changed). Exception can occur when trying to write into cache.
  
Client
javax.cache.CacheException: ISPN021022: Cache named 'custom' was not found.
	at org.infinispan.jcache.remote.JCacheManager.create(JCacheManager.java:75)
	at org.infinispan.jcache.AbstractJCacheManager.createCache(AbstractJCacheManager.java:94)
	at org.infinispan.server.test.jcache.JCacheRemoteIT.testCachingConfiguration(JCacheRemoteIT.java:78)

Server
10:59:01,034 ERROR [org.infinispan.server.hotrod.HotRodDecoder] (HotRodServerWorker-1) ISPN005003: Exception reported: org.infinispan.server.hotrod.CacheNotFoundException: Cache with name 'custom' not found amongst the configured caches
	at org.infinispan.server.hotrod.HotRodDecoder.getCache(HotRodDecoder.scala:102) [infinispan-server-hotrod-6.3.0-redhat-SNAPSHOT.jar:6.3.0-redhat-SNAPSHOT]
	at org.infinispan.server.hotrod.HotRodDecoder.getCache(HotRodDecoder.scala:29) [infinispan-server-hotrod-6.3.0-redhat-SNAPSHOT.jar:6.3.0-redhat-SNAPSHOT]
	at org.infinispan.server.core.AbstractProtocolDecoder.org$infinispan$server$core$AbstractProtocolDecoder$$decodeHeader(AbstractProtocolDecoder.scala:130) [infinispan-server-core-6.3.0-redhat-SNAPSHOT.jar:6.3.0-redhat-SNAPSHOT]
	at org.infinispan.server.core.AbstractProtocolDecoder.decodeDispatch(AbstractProtocolDecoder.scala:70) [infinispan-server-core-6.3.0-redhat-SNAPSHOT.jar:6.3.0-redhat-SNAPSHOT]
	at org.infinispan.server.core.AbstractProtocolDecoder.decode(AbstractProtocolDecoder.scala:61) [infinispan-server-core-6.3.0-redhat-SNAPSHOT.jar:6.3.0-redhat-SNAPSHOT]
	at io.netty.handler.codec.ReplayingDecoder.callDecode(ReplayingDecoder.java:362) [netty-all-4.0.18.Final-redhat-1.jar:4.0.18.Final-redhat-1]
	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:141) [netty-all-4.0.18.Final-redhat-1.jar:4.0.18.Final-redhat-1]
	at org.infinispan.server.core.AbstractProtocolDecoder.channelRead(AbstractProtocolDecoder.scala:459) [infinispan-server-core-6.3.0-redhat-SNAPSHOT.jar:6.3.0-redhat-SNAPSHOT]
	at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:341) [netty-all-4.0.18.Final-redhat-1.jar:4.0.18.Final-redhat-1]
	at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:327) [netty-all-4.0.18.Final-redhat-1.jar:4.0.18.Final-redhat-1]
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785) [netty-all-4.0.18.Final-redhat-1.jar:4.0.18.Final-redhat-1]
	at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:116) [netty-all-4.0.18.Final-redhat-1.jar:4.0.18.Final-redhat-1]
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:494) [netty-all-4.0.18.Final-redhat-1.jar:4.0.18.Final-redhat-1]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:461) [netty-all-4.0.18.Final-redhat-1.jar:4.0.18.Final-redhat-1]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:378) [netty-all-4.0.18.Final-redhat-1.jar:4.0.18.Final-redhat-1]
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:350) [netty-all-4.0.18.Final-redhat-1.jar:4.0.18.Final-redhat-1]
	at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116) [netty-all-4.0.18.Final-redhat-1.jar:4.0.18.Final-redhat-1]
	at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_60]

Comment 2 Tristan Tarrant 2015-04-07 09:59:41 UTC
We pass the TCK without this feauture. 
This will be fixed indirectly when we start supporting domain managed mode for server (scheduled for JDG 7), so that cache creation operations will be sent to all nodes.

Comment 3 Martin Gencur 2015-04-20 11:11:32 UTC
I'm afraid this cannot be ON_QA when we say that we will fix it later:) Setting target release 7.0 as per Tristan's comment.


Note You need to log in before you can comment on or make changes to this bug.