[infinispan-dev] Prepare and Rollback messages order

Sebastiano Peluso peluso at gsd.inesc-id.pt
Thu May 31 05:21:44 EDT 2012


Hi all,

I have a question about the messages order guaranteed in the execution 
of the 2PC for committing a transaction in Infinispan (all versions).

In particular I have noticed that both in replication and distribution 
mode the RollbackCommand command is multicast by using a priority queue. 
This means that:
     1) In replication mode, the visitRollbackCommand method of the 
ReplicationInterceptor class invokes the broadcastRpcCommand method on 
the RpcManager by using a true value for the usePriorityQueue parameter;
     2) In distribution mode, the visitRollbackCommand method of the 
DistributionInterceptor class invokes the invokeRemotely method on the 
RpcManager by using a true value for the usePriorityQueue parameter.

Therefore the JGroups' packets containing the RollbackCommand commands 
will be marked with the org.jgroups.Message.OOB and will be sent and 
received by means of the Jgroups' out-of-band (OOB) thread pool.

If I'm not wrong until now, I deduce that since OBB threads don't 
guarantee ordering, then it can happen that a message M2 multicast by 
node N1 after it has multicast message M1, can be delivered to a node N2 
before message M1. So the sending order is M1 -> M2 and the delivery 
order is M2 -> M1 [1].

If this is true as well, I can have runs in which the PreparedCommand 
command of a transaction T involved in the execution of a 2PC, can be 
received by a 2PC's participant node after a RollbackCommand command for 
T, even if the JGroups' messages containing the PrepareCommand commands 
are actually managed by means of the JGroups's regular thread pool.

For instance, we can consider a scenario in which a transaction T 
requests a commit on node N0 and N0 multicasts the T's prepare message 
on a large set of nodes (e.g. 100 nodes) S={N1,...,N100}. If the lock 
acquisition fails on at least one of the 100 nodes, N0 can multicasts a 
rollback message without waiting for the reply of the prepare from all 
the nodes in S. This means that the last rollback message can be 
delivered to a node in S, say N100, before the T's prepare message and 
that the locks successfully acquired by N100 for T will not be released 
anymore.

Am I missing anything?

Thanks.

Best Regards,

     Sebastiano Peluso


[1] http://www.jgroups.org/manual/html/user-advanced.html


-- 
Sebastiano Peluso, PhD student

Department of Computer, Control and Management Engineering
Sapienza University of Rome
Via Ariosto 25, 00185, Rome, Italy
Tel. +39 06 77274108
Webpage http://www.dis.uniroma1.it/~peluso

Distributed Systems Group, INESC-ID
Instituto Superior Técnico
Rua Alves Redol 9, 1000-029, Lisbon, Portugal
Webpage http://www.gsd.inesc-id.pt/~peluso



More information about the infinispan-dev mailing list