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,