A month ago I published a quasi-academic paper, proposing 3 modifications to the Raft replication algorithm. I got some great review and feedback on the Raft mailing list. So based on that I have now updated the paper, hopefully to be much clearer than the first iteration.
The major change of this version is to add an explicit InitializeCluster step to the algorithm, which is also where the databaseId is generated. It turns out this allowed to simplify the other steps a lot, as it makes it very explicit that a server can join a cluster precisely in two ways: by initializing a new cluster itself, or being added to an existing cluster.
Hence the title of this updated paper is of course: 4 modifications to Raft consensus.
I would like to thank especially Oren Eini for his thorough feedback on the previous iteration of the paper.
Pre-vote
Hi, pre-vote doesn't seem to solve term inflation problem if the cluster is split between pre-vote and actual voting unless pre-voting takes place after every failed voting attempt. Perhaps this was the intention all the time but I read papers so that failed voting allows Candidate to keep its state and simply retry.
Regards
Vilho