On Sep 28, 2011, at 4:06 PM, Galder Zamarreño wrote:

> 
> On Sep 27, 2011, at 6:50 PM, Dan Berindei wrote:
> 
>> On Tue, Sep 27, 2011 at 5:59 PM, Galder Zamarreño <gal...@redhat.com> wrote:
>>> Hi,
>>> 
>>> Re: https://issues.jboss.org/browse/ISPN-1384
>>> 
>>> I've had a look to this and this race condition could, in theory, be 
>>> resolved by making InboundInvocationHandlerImpl.handle() waiting for cache 
>>> not only to be defined, but to be started. Otherwise there'll always be a 
>>> potential race condition like the one showed in the log.
>>> 
>> 
>> Actually I think it would be enough to wait until the cache has
>> started joining (StateTransferManager.waitForJoinToStart()), that
>> means all the other components have finished starting.
> 
> Sounds good to me.

Couple of things:

1. In this particular case, waiting for that would work because this clustered 
get is a cluster wide one, so there's no need for this node to wait for state 
transfer to occur. InboundInvocationHandlerImpl.handle could be hacked to check 
on the cache's StateTransferManager.waitForJoinToStart() but seems a bit hacky.

2. In BaseStateTransferManagerImpl.start it says:

"   // needs to be AFTER the DistributionManager and *after* the cache loader 
manager (if any) inits and preloads"

CacheLoaderManagerImpl.preload has priority 56, compared to 
BaseStateTransferManagerImpl.start which has 21, so state transfer could start 
before preloading has occurred?


> 
>> 
>> With the asymmetric cache support in place I think we shouldn't have
>> to wait at all, since we'll send the join request only after all the
>> components have been started. We could either apply the commands (if
>> we implement the non-blocking state transfer option) or reject them
>> and tell the originator to retry after the state transfer is done (if
>> we keep the blocking state transfer, since the other nodes shouldn't
>> be sending commands to us anyway).
>> 
>>> In this particular case, this is clustered get command being received from 
>>> a clustered cache loader, which is arriving in the cache before this is 
>>> started (and the cache loader has been created, hence the NPE).
>>> 
>>> Another question, is there any reason why CacheLoader is not a named cache 
>>> component which can be initalised with a corresponding factory and to which 
>>> other components can be injected (i.e. marshaller, cache...etc)?
>>> 
>>> In this particular case, this would also resolve the issue because 
>>> ClusterCacheLoader.start() does nothing, so all the interceptor needs is a 
>>> proper instance of ClusterCacheLoader available. The factory makes these 
>>> available bejore inject.
>>> 
>>> Thoughts?
>>> 
>>> Cheers,
>>> 
>>> p.s. Dan, I am aware of https://issues.jboss.org/browse/ISPN-1324, maybe 
>>> you're solving this indirectly with the work for that JIRA?
>> 
>> With asymmetric caches in place I don't think we'll need/want
>> ISPN-1324 any more.
> 
> +1
> 
>> 
>> Cheers
>> Dan
>> 
>> 
>>> --
>>> Galder Zamarreño
>>> Sr. Software Engineer
>>> Infinispan, JBoss Cache
>>> 
>>> 
>>> _______________________________________________
>>> infinispan-dev mailing list
>>> infinispan-dev@lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/infinispan-dev
>>> 
>> 
>> _______________________________________________
>> infinispan-dev mailing list
>> infinispan-dev@lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/infinispan-dev
> 
> --
> Galder Zamarreño
> Sr. Software Engineer
> Infinispan, JBoss Cache
> 
> 
> _______________________________________________
> infinispan-dev mailing list
> infinispan-dev@lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/infinispan-dev

--
Galder Zamarreño
Sr. Software Engineer
Infinispan, JBoss Cache


_______________________________________________
infinispan-dev mailing list
infinispan-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/infinispan-dev

Reply via email to