When multiple nodes in a computer network perform work on a shared entity,
an arbitration process is used to ensure changes made by more than one
node to the same data is propagated to each of the nodes holding the
shared entity and that the changes are applied in the same order on each
of the nodes. An arbitration cycle for a particular entity is begun on a
node ("instigator") when the node broadcasts a proposal message for a
change to the entity to the other nodes or when the node ("observer")
receives such a proposal message. Multiple nodes can be instigators
during a single arbitration cycle. Each node that receives a proposal
message sends a response message to the corresponding instigator. The
arbitration cycle is closed to additional proposal messages after one
instigator has received responses from all the nodes that share the
entity. After each instigator node receives all the proposals in the
arbitration cycle, it determines whether it is the winner of the
arbitration cycle and broadcasts a closure message if it is. Each node
determines an order in which to apply the changes proposed in the
arbitration cycle when it knows it has received all the proposals in the
arbitration cycle as determined by the sending or receiving of the
closure message.