397 Commits

Author SHA1 Message Date
Yicheng Qin
8eac28350d raft: avoid unexpected self-bootstrap state machine 2014-09-03 09:05:12 -07:00
Xiang Li
62bdcf6f49 raft: range over sm.ins 2014-09-03 09:05:12 -07:00
Blake Mizerany
5778c49689 raft: set term in reset 2014-09-03 09:05:11 -07:00
Blake Mizerany
67808f8db1 raft: remove vestigial canStep 2014-09-03 09:05:11 -07:00
Blake Mizerany
6044b1a0d7 raft: break Step into pieces 2014-09-03 09:05:11 -07:00
Xiang Li
f387e3e27d raft: add Entry.isConfig 2014-09-03 09:05:11 -07:00
Xiang Li
3817661f82 raft: rename ConfigAdd/ConfigRemove -> AddNode/RemoveNode 2014-09-03 09:05:11 -07:00
Xiang Li
9f315ffe10 raft: make entry type public 2014-09-03 09:05:11 -07:00
Blake Mizerany
15a8b46359 raft: add/remove -> addNode/removeNode 2014-09-03 09:05:11 -07:00
Blake Mizerany
e5b9e22518 raft: Step returns ok 2014-09-03 09:05:11 -07:00
Blake Mizerany
a10461f60d raft: Add/Remove -> add/remove 2014-09-03 09:05:11 -07:00
Blake Mizerany
abd2448931 raft: addr -> id 2014-09-03 09:05:10 -07:00
Xiang Li
1a75beb57c raft: add confAdd and confRemove entry type 2014-09-03 09:05:09 -07:00
Xiang Li
989f41477d raft: rename peer -> peers 2014-09-03 09:05:09 -07:00
Xiang Li
8ce6b94e05 raft: add and remove 2014-09-03 09:05:09 -07:00
Xiang Li
d293c4915c raft: fix pendingConf 2014-09-03 09:05:09 -07:00
Xiang Li
c03fbf68d6 raft: add conf safety
To make configuration change safe without adding configuration protocol:

1. We only allow to add/remove one node at a time.

2. We only allow one uncommitted configuration entry in the log.

These two rules can make sure there is no disjoint quorums in both current cluster and the
future(after applied any number of committed entries or uncommitted entries in log) clusters.

We add a type field in Entry structure for two reasons:

1. Statemachine needs to know if there is a pending configuration change.

2. Configuration entry should be executed by raft package rather application who is using raft.
2014-09-03 09:05:09 -07:00
Xiang Li
853a458a0d raft: change ins from array to map 2014-09-03 09:05:09 -07:00
Yicheng Qin
f9c299da8b raft: return after handling msgBeat
It makes the workflow more clear.
2014-09-03 09:05:09 -07:00
Xiang Li
28f87c2a43 raft: use sm.maybeCommit; should not call log.maybeCommit directly 2014-09-03 09:05:08 -07:00
Xiang Li
c32d34166e raft: leader updates its own match; tries to commit after a prop 2014-09-03 09:05:08 -07:00
Xiang Li
6fa74b0e33 raft: do bcast when receiving msgBeat 2014-09-03 09:05:08 -07:00
Xiang Li
09d1575eeb raft: node.tick 2014-09-03 09:05:08 -07:00
Xiang Li
eff3aadba1 raft: add full stop to every function comment 2014-09-03 09:05:08 -07:00
Xiang Li
167ef7e8b0 raft: test leader replies to appResp 2014-09-03 09:05:08 -07:00
Xiang Li
9bb7265d64 raft: leader only sends append to the unsynced peer when get a bad appResp 2014-09-03 09:05:07 -07:00
Xiang Li
88674a623a raft: use if statement to handle voteResp 2014-09-03 09:05:07 -07:00
Xiang Li
828a8cf326 raft: leader denies vote with the same term 2014-09-03 09:05:07 -07:00
Xiang Li
93b08502e4 raft: check voteFor 2014-09-03 09:05:07 -07:00
Yicheng Qin
c1c45575be raft: ins: []*index -> []index
It could make raft faster, use less storage.
2014-09-03 09:05:07 -07:00
Xiang Li
2066ff5acb raft: candidate should become leader directly if it is a one node cluster 2014-09-03 09:05:07 -07:00
Xiang Li
0cdd1b58a4 raft: rename log.commit to log.committed 2014-09-03 09:05:07 -07:00
Xiang Li
1f0e13e956 raft: remove sm.voteWorthy 2014-09-03 09:05:06 -07:00
Xiang Li
bee9d8bea5 raft: add log.maybeAppend 2014-09-03 09:05:06 -07:00
Xiang Li
b70be19653 raft: add log.maybeCommit 2014-09-03 09:05:06 -07:00
Xiang Li
092461d7c8 raft: rename log.len to log.lastIndex 2014-09-03 09:05:06 -07:00
Xiang Li
8f3d109c18 raft: rename log.isOk to log.matchTerm 2014-09-03 09:05:06 -07:00
Xiang Li
4c609ec59c raft: new log struct 2014-09-03 09:05:06 -07:00
Xiang Li
cb7b75c15f raft: remove unused function maybeAppend
Signed-off-by: Blake Mizerany <blake.mizerany@gmail.com>
2014-09-03 09:05:06 -07:00
Xiang Li
74737b76cc raft: leader commit and test
Signed-off-by: Blake Mizerany <blake.mizerany@gmail.com>
2014-09-03 09:05:06 -07:00
Xiang Li
c223eca938 raft: clean stateMachine 2014-09-03 09:05:06 -07:00
Xiang Li
ab79550693 raft: use becomeFollower in cadidate state 2014-09-03 09:05:06 -07:00
Xiang Li
73e3394d2d raft: reverse sort to figure out the ci 2014-09-03 09:05:05 -07:00
Blake Mizerany
8ddcd9799d raft: go fmt 2014-09-03 09:05:05 -07:00
Blake Mizerany
6e0a668455 raft: add Node.Next 2014-09-03 09:05:05 -07:00
Blake Mizerany
50e0db4038 raft: attempt first version of Interface 2014-09-03 09:05:05 -07:00
Blake Mizerany
8d7be33dd8 raft: move to raft pkg 2014-09-03 09:05:05 -07:00