Hi Asad,

Servers A, B and C have the same replicated raft log and the
setConfiguration transactions are committed to the raft log.  A server can
have a different view only if it is lagged behind.  For example,
1) the cluster starts with conf(A, B, C)
2) Server A is disconnected from the network at log index 10.
3) Call setConfiguration with conf(B, C).  Servers B and C commit it to the
log, say at index 15.
As long as Server A has not updated its log to index 15, it will think that
the cluster conf is conf(A, B, C).  However, B and C will think that the
cluster conf is conf(B, C).

Since it requires a majority in the old conf and a majority in the new conf
to commit a setConfiguration log entry, some combinations are impossible,
e.g. B thinks cluster is conf(A,B) and C thinks cluster is conf(A,C) at the
same time.
Suppose conf(A,B) has a smaller log index than conf(A,C).  In order to
change conf(A,B) to any other conf, it requires a majority of conf(A,B)
(the old conf).  Since it only has two nodes, the majority is also two.
Both of them must have committed the setConfiguration log entry.

Tsz-Wo

Reply via email to