Manik Surtani wrote:
The concurrent stack has done a great job in parallelizing delivery
of
messages from different senders, but is there a way to parallelize
this from the same sender as well? Now I know this doesn't make sense
in terms of JGroups messages (order needs to be maintained)
Not necessarily. Sometimes you just want reliable delivery but don't
care about ordering. To do that and still provide once-only delivery,
mark your message as OOB (out-of-band):
Message msg=new Message();
msg.setFlag(Message.OOB); // msg.clearFlag(Message.OOB) clears this
flag again
OR
use one of the RpcDispatcher.callRemoteMethod(s) methods with the OOB
parameter set to true.
but when you consider moving up one level of abstraction in JBC, this
causes a bottleneck. Consider, for example:
1. Using sync replication and BR.
2. 3 threads on cache1, working on disjoint data sets (no contention
at all, writes can be in parallel).
3. When it comes to replication to the same buddy, the concurrent
stack on the receiver will queue the 3 commits.
4. All parallelization achieved in 2. above is wasted since the
transactions need to queue anyway.
You can use the above mechanism. However, you have to make sure that any
thread
* uses synchronous replication
* the commits are synchronous as well
This won't work for asynchronous replication, but I don't think it is
needed here anyway right ?
--
Bela Ban
Lead JGroups / Clustering Team
JBoss - a division of Red Hat