FLUSH SPREAD

Message Types for Data and Membership Messages

Flush Spread uses the same service and membership types as Spread. In addition to these common types, Flush Spread also adds the following service types:
#define 	DONT_BLOCK
#define		FLUSH_REQ_MESS
#define		SUBGROUP_CAST
  1. DONT_BLOCK:

    This service type can be requested when making a receive call. If the receive call would block while receiving on the mailbox, the call will fail and return the error code WOULD_BLOCK. Currently, Spread client libraries (v3.14 and earlier) do not support non-blocking receives. This means that even if the caller sets the DONT_BLOCK service flag a call to receive may take longer than would normally be expected of a non-blocking I/O call. However, the call should never block permanently.

  2. FLUSH_REQ_MESS:

    This message type can be set upon returning from a receive call. It indicates that the received message was a flush request message for the group contained in sender. A flush request message is generated by Flush Spread when the underlying membership of that group changes. To install the new membership and make progress, the receiver must eventually respond to this signal by flushing that group by calling FL_flush. Receiving a flush request message is an important part of the view synchrony GCS semantics and has pretty drastic importance. See FL_receive for a full description of the restrictions incurred by and ramifications of receiving a flush request. Note that a flush request is neither a membership message nor a regular message. See the message type access functions for a macro to test if a message is a flush request message.

  3. SUBGROUP_CAST:

    This message type can be set upon returning from a receive call. It indicates that the received message was only multicasted to a subset of a group. This message was only sent to the members in the groups array in the range [0, *num_groups-1). The group that this subgroup-multicast occurred in is contained in groups[*num_groups-1].