Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func PrepareJoinCluster ¶
PrepareJoinCluster sends MemberAdd command to Prophet cluster, and returns the initial configuration of the Prophet cluster.
TL;TR: The join functionality is safe. With data, join does nothing, w/o data
and it is not a member of cluster, join does MemberAdd, it returns an error if Prophet tries to join itself, missing data or join a duplicated Prophet.
Etcd automatically re-joins the cluster if there is a data directory. So first it checks if there is a data directory or not. If there is, it returns an empty string (etcd will get the correct configurations from the data directory.)
If there is no data directory, there are following cases:
A new Prophet joins an existing cluster. What join does: MemberAdd, MemberList, then generate initial-cluster.
A failed Prophet re-joins the previous cluster. What join does: return an error. (etcd reports: raft log corrupted, truncated, or lost?)
A deleted Prophet joins to previous cluster. What join does: MemberAdd, MemberList, then generate initial-cluster. (it is not in the member list and there is no data, so we can treat it as a new Prophet.)
If there is a data directory, there are following special cases:
A failed Prophet tries to join the previous cluster but it has been deleted during its downtime. What join does: return "" (etcd will connect to other peers and find that the Prophet itself has been removed.)
A deleted Prophet joins the previous cluster. What join does: return "" (as etcd will read data directory and find that the Prophet itself has been removed, so an empty string is fine.)
Types ¶
This section is empty.