]
Galder Zamarreno commented on ISPN-399:
---------------------------------------
I've played around with the possibility of creating a cache when
gcr.getNamedComponentRegistry(cacheName); returns null but this won't work because
client code could be creating the configuration at runtime programatically. Hence,
it's impossible for InboundInvocationHandlerImpl to know about such configuration.
State transfer requests for non existing caches should not throw
exception
--------------------------------------------------------------------------
Key: ISPN-399
URL:
https://jira.jboss.org/jira/browse/ISPN-399
Project: Infinispan
Issue Type: Bug
Components: State transfer
Affects Versions: 4.0.0.Final, 4.1.0.ALPHA2
Reporter: Galder Zamarreno
Assignee: Galder Zamarreno
Fix For: 4.1.0.BETA1
Attachments: infinispan.log
I think this is my lucky week. Here comes another puzzle:
I'm trying to prototype having a separate cache for Hot Rod topology view information
and here's the sequence of events that happen:
1. Start 1st Hot Rod server which also starts up the Hot Rod topology cache (cache name =
___hotRodTopologyCache). JGroups local address is: eq-11980:
2010-04-13 17:13:36,056 3881 INFO
[org.infinispan.remoting.transport.jgroups.JGroupsTransport] (main:) Cache local address
is eq-11980, physical addresses are [127.0.0.1:7900]
2010-04-13 17:13:36,056 3881 TRACE [org.infinispan.factories.GlobalComponentRegistry]
(main:) Registering a shutdown hook. Configured behavior = DEFAULT
2010-04-13 17:13:36,057 3882 INFO [org.infinispan.factories.GlobalComponentRegistry]
(main:) Infinispan version: Infinispan 'Starobrno' 4.1.0.SNAPSHOT
2010-04-13 17:13:36,057 3882 TRACE [org.infinispan.factories.GlobalComponentRegistry]
(main:) Named component register, put org.infinispan.factories.ComponentRegistry@1d6fbb3
under ___hotRodTopologyCache in {}@ee6ad6
2. Start 2nd Hot Rod server which also starts up the Hot Rod topology cache (cache name =
___hotRodTopologyCache). JGroups local address is: eq-54009
2010-04-13 17:13:36,474 4299 INFO
[org.infinispan.remoting.transport.jgroups.JGroupsTransport] (main:) Cache local address
is eq-54009, physical addresses are [127.0.0.1:7901]
2010-04-13 17:13:36,474 4299 TRACE [org.infinispan.factories.GlobalComponentRegistry]
(main:) Registering a shutdown hook. Configured behavior = DEFAULT
2010-04-13 17:13:36,474 4299 INFO [org.infinispan.factories.GlobalComponentRegistry]
(main:) Infinispan version: Infinispan 'Starobrno' 4.1.0.SNAPSHOT
2010-04-13 17:13:36,474 4299 TRACE [org.infinispan.factories.GlobalComponentRegistry]
(main:) Named component register, put org.infinispan.factories.ComponentRegistry@1de007d
under ___hotRodTopologyCache in {}@b5ad68
3. Since topology caches are configured with fetch in memory state, when eq-54009 starts,
it requests eq-11980 to generate state:
2010-04-13 17:13:36,501 4326 TRACE
[org.infinispan.remoting.transport.jgroups.JGroupsTransport]
(STREAMING_STATE_TRANSFER-sender-1,Infinispan-Cluster,eq-11980:) Received request to
generate state for cache named '___hotRodTopologyCache'. Attempting to generate
state.
4. Now, let's send a put command to server in eq-11980 for brand new named cache
'hotRodReplSync'
2010-04-13 17:13:36,752 4577 TRACE [org.infinispan.server.hotrod.RequestResolver$]
(HotRodWorker-1-1:) Operation code: 1 has been matched to Some(PutRequest)
2010-04-13 17:13:36,754 4579 TRACE [org.infinispan.server.hotrod.HotRodDecoder$]
(HotRodWorker-1-1:) Decoded header HotRodHeader{op=PutRequest, messageId=1,
cacheName=hotRodReplSync, flag=NoFlag, clientIntelligence=0, topologyId=0}
5. Now eq-11980 attempts to fetch state from eq-54009 for cache
'hotRodReplSync':
2010-04-13 17:13:36,790 4615 INFO [org.infinispan.remoting.rpc.RpcManagerImpl]
(HotRodWorker-1-1:) Trying to fetch state from eq-54009
2010-04-13 17:13:36,792 4617 TRACE
[org.infinispan.remoting.transport.jgroups.JGroupsTransport]
(Incoming-1,Infinispan-Cluster,eq-11980:) Received state for cache named
'hotRodReplSync'. Attempting to apply state.
2010-04-13 17:13:36,792 4617 TRACE [org.infinispan.factories.GlobalComponentRegistry]
(Incoming-1,Infinispan-Cluster,eq-11980:) Named component register, get hotRodReplSync
from {___hotRodTopologyCache=org.infinispan.factories.ComponentRegistry@1d6fbb3,
hotRodReplSync=org.infinispan.factories.ComponentRegistry@19c5048}@ee6ad6
2010-04-13 17:13:36,792 4617 DEBUG
[org.infinispan.statetransfer.StateTransferManagerImpl]
(Incoming-1,Infinispan-Cluster,eq-11980:) Applying state
2010-04-13 17:13:36,792 4617 TRACE
[org.infinispan.remoting.transport.jgroups.JGroupsTransport]
(STREAMING_STATE_TRANSFER-sender-1,Infinispan-Cluster,eq-54009:) Received request to
generate state for cache named 'hotRodReplSync'. Attempting to generate state.
6. But eq-54009 does not have a 'hotRodReplSync' cache yet cos no requests have
been sent to the 2nd (eq-54009) server yet and hence fails with:
2010-04-13 17:13:36,792 4617 INFO
[org.infinispan.remoting.InboundInvocationHandlerImpl]
(STREAMING_STATE_TRANSFER-sender-1,Infinispan-Cluster,eq-54009:) Cache named
hotRodReplSync does not exist on this cache manager!
2010-04-13 17:13:36,794 4619 ERROR
[org.infinispan.remoting.transport.jgroups.JGroupsTransport]
(STREAMING_STATE_TRANSFER-sender-1,Infinispan-Cluster,eq-54009:) Caught while responding
to state transfer request
org.infinispan.statetransfer.StateTransferException: Cache named hotRodReplSync does not
exist on this cache manager!
at
org.infinispan.remoting.InboundInvocationHandlerImpl.getStateTransferManager(InboundInvocationHandlerImpl.java:85)
at
org.infinispan.remoting.InboundInvocationHandlerImpl.generateState(InboundInvocationHandlerImpl.java:77)
at
org.infinispan.remoting.transport.jgroups.JGroupsTransport.getState(JGroupsTransport.java:586)
IMO, 6 is a valid case and should not throw an error. As you can see here, a server might
not have had any requests for a cache yet, so might not have that cache started yet. The
most reasonable thing for eq-54009 to do here is not to serve any state instead of
throwing an error.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: