[infinispan-dev] StressTest: Can JGroups provide a callback to do marshalling after real_dests have been calculated?

Galder Zamarreno galder at redhat.com
Thu Oct 29 06:19:23 EDT 2009


Hi Bela & co,

While investigating your stress test, I've found a few interesting 
things. I'm gonna split in 2 emails:

1.- First of all, a week ago filled 
https://jira.jboss.org/jira/browse/ISPN-237 jira in order for dist 
commands that should only affect the local machine not to go remove. 
While investigating your stress test, I've found out that JGroups' 
MessageDispatcher.castMessage already does that!

         if(tmp != null && 
tmp.getOpt(Channel.LOCAL).equals(Boolean.FALSE)) {
             if(local_addr == null) {
                 local_addr=tmp.getAddress();
             }
             if(local_addr != null) {
                 real_dests.removeElement(local_addr);
             }
         }

That code empties the real_dests if the target is the local address. So, 
you're probably wondering why I filled 
https://jira.jboss.org/jira/browse/ISPN-237? It's because marshalling 
happens before the code above gets executed. In fact, it happens at the 
beginning of ReplicationTask.call() and the JGroups optimization happens 
when castMessage() is called from ReplicationTask.call().

So, I think my fix for https://jira.jboss.org/jira/browse/ISPN-237 is 
not optimal. JGroups already knows when the call should stay local, so 
ISPN should need to do this calculation again, it's wasteful code. The 
real fix would be to somehow be able to do marshalling only if the code 
in MessageDispatcher.castMessage() said that real_dests was not empty.

Bela, do you think JGroups could be enhanced to have a callback after 
the code shown above where we can invoke marshalling?

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



More information about the infinispan-dev mailing list