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
- 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.
- 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.
- 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].