[infinispan-dev] InboundInvocationHandlerImpl optimization

Manik Surtani manik at jboss.org
Wed May 13 05:20:29 EDT 2009


This class is a bit of an anomaly.

There are 2 scopes in Infinispan - GLOBAL and NAMED_CACHE.  Some  
components are bound to a GLOBAL scope (such as a Transport and an  
RpcManager), while others are bound to NAMED_CACHE (such as  
Configuration, CommandsFactory, etc).

The problem is, you can inject a NAMED_CACHE component into another  
NAMED_CACHE component, or a GLOBAL component into a NAMED_CACHE one,  
but never a NAMED_CACHE component into a GLOBAL component.  (Guess why!)

So, the InboundInvocationHandler (IIH) is a GLOBAL component, since it  
is accessed by the Transport to dispatch RPC from remote hosts to  
local caches.  Now the IIH *needs* references to NAMED_CACHE  
components (such as the InterceptorChain, Configuration, etc) to be  
able to dispatch remote RPC to local caches.  And since these cannot  
be injected, they need to be looked up directly in the named cache's  
registry.

The reason why these are always looked up (and resulting in a  
Map.get()), and not cached in the IIH, is that you will just be  
recreating the maps again.  E.g., to cache Configurations in the IIH,  
the IIH would need to maintain a Map<String, Configuration> for all  
the named caches.  And a Map<String, CommandsFactory>.  Etc.  So, you  
still have a map lookup.  So why bother duplicating the map?

If you can think of a better way around this, I'd love to hear it.   
Like I said, I'm not overly happy about this component, but this is  
the best tradeoff between design simplicity and performance I could  
come up with so far.  :-)

On 13 May 2009, at 07:51, Mircea Markus wrote:

> Hi,
>
> There are several ComponentRegistry.getComponent() lookups in this  
> class:
> perform():
>   gcr.getNamedComponentRegistry(cacheName);
>   cr.getComponent(Configuration.class)
>   cr.getLocalComponent(CommandsFactory.class)
>   cr.getComponent(ResponseGenerator.class)
>
> applyState() and generateState() call (indirectly):
>   cr.getComponent(StateTransferManager.class);
>
> Now all this calls are indirectly map lookups. Another approach  
> would be to cache them in class members, wdyt?
>
> Cheers,
> Mircea
> _______________________________________________
> infinispan-dev mailing list
> infinispan-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/infinispan-dev

--
Manik Surtani
manik at jboss.org
Lead, Infinispan
Lead, JBoss Cache
http://www.infinispan.org
http://www.jbosscache.org







More information about the infinispan-dev mailing list