| Flush, as it name implies, forces group members to flush their pending messages
while blocking them to send any additional messages. The process of flushing
acquiesces the group so that state transfer or a join can be done. It is also
called stop-the-world model as nobody will be able to send messages while a
flush is in process.
Flush is needed for:
(1) State transfer. When a member requests state transfer, the coordinator
tells everyone to stop sending messages and waits for everyone's ack. Then it asks
the application for its state and ships it back to the requester. After the
requester has received and set the state successfully, the coordinator tells
everyone to resume sending messages.
(2) View changes (e.g.a join). Before installing a new view V2, flushing would
ensure that all messages *sent* in the current view V1 are indeed *delivered*
in V1, rather than in V2 (in all non-faulty members). This is essentially
Virtual Synchrony.
author: Vladimir Blagojevic version: $Id$ since: 2.4 |