In clusters with many members, a view can be large. Currently, when a new member joins, or an existing member leaves, the coordinator sends a view to all existing members and a JoinRsp to the new joiner(s).
The view currently contains all members, and the serialized VIEW message can be large.
The goal of this JIRA is therefore to reduce the size of the VIEW message sent to all members.
This can be done by:
- Sending the first view of a given coordinator as full view
- Sending subsequent views only as diffs (delta views)
- A delta view contains a view-id (can possibly be omitted), which is the previous view, and an array of members which left and members which joined
- When unmarshalling a delta-view, the receiver can create the new view as a copy of the old view, minus the left members, plus the joining members
- When the coordinator changes, the new coordinator always sends its first view as full view
- MergeViews are always sent as full views
- It should be possible to turn this behavior off, so a coordinator will always send full views, and to change this at runtime.
- The marshalling code needs to be able to handle both full- and delta- views.