We attempt to auto configure as much as possible to reduce the load on the user.
N, N - control node N, Y - virtual host Y, N - regular host Y, Y - regular host and virtual host
Control node opens a TCP server and is the root of a multicast domain
Regular host searches for a multicast (broadcast?) domain as a node
Virtual host is the root of a multicast (broadcast?) domain
When a node first boots up, it may need to connect to a multicast network using an agreed upon address. Rather than attempt to assign this address at configuration time, we select it at runtime. We require a method for all nodes on a portion of the messaging network to agree upon the selected multicast address. As multiple experiment may be active at the same time, we also need to need to avoid address collision between experiments on the control plane.
To meet these needs, each daemon that wants to join one or more multicast groups starts with a discovery protocol on a known multicast address on a single interface and maintains the socket as long as they are active.
In each broadcast domain, there are two types of nodes:
- Tree Root - picks the multicast address
- Tree Node - finds a root (and group) to talk with
The messages sent are:
- DISCOVER (no data)
- CHOSING (address, experimentID)
- USING (address, experimentID)
A tree root’s states are:
- Starting
- Choosing
- Chosen
A tree node’s states are:
- Searching
- Chosen