377 Commits

Author SHA1 Message Date
Yicheng Qin
9203f68894 server: add /v2/stats/self 2014-09-03 09:20:07 -07:00
Blake Mizerany
c19932c9ba raft: prune unnecessary logging - fixes #15 2014-09-03 09:20:04 -07:00
Xiang Li
8e06333d45 raft: make State a protobuf type 2014-09-03 09:20:03 -07:00
Yicheng Qin
15029381e1 raft: fix promotable 2014-09-03 09:20:02 -07:00
Yicheng Qin
01c40fcf50 raft: not recover from outdated snapshot 2014-09-03 09:20:02 -07:00
Yicheng Qin
ba63cf666d raft: add recover 2014-09-03 09:20:02 -07:00
Xiang Li
6030261363 etcd/raft: add snap 2014-09-03 09:20:02 -07:00
Xiang Li
611d564865 raft: remove unused prevTerm field 2014-09-03 09:20:01 -07:00
Xiang Li
54b4f52e48 raft: add index to entry 2014-09-03 09:20:01 -07:00
Yicheng Qin
88e5bce63d wip: wal glue 2014-09-03 09:19:59 -07:00
Xiang Li
b383cd5acf raft: refactor recover 2014-09-03 09:19:59 -07:00
Yicheng Qin
2bd74bc328 raft: add Load 2014-09-03 09:19:59 -07:00
Xiang Li
311db876b0 raft: add unstableState 2014-09-03 09:19:58 -07:00
Xiang Li
1288e1f39d raft: log->raftlog 2014-09-03 09:19:58 -07:00
Xiang Li
c7d1beaaa5 raft: add first level logging
We log the message to step and the state of the statemachine before and after
stepping the message.
2014-09-03 09:19:58 -07:00
Xiang Li
2665cc1cc8 raft: heartbeat should not contain entries 2014-09-03 09:19:57 -07:00
Xiang Li
060de128a7 raft: add clusterId 2014-09-03 09:19:56 -07:00
Yicheng Qin
9793c518ab raft: forbid to use none as id 2014-09-03 09:19:56 -07:00
Xiang Li
bea28933d3 raft: init lead to none 2014-09-03 09:19:52 -07:00
Xiang Li
3921295b21 raft: update lead to none when receives vaild msgVote 2014-09-03 09:19:50 -07:00
Yicheng Qin
f1853b4364 raft: add msgDenial to deny removed nodes 2014-09-03 09:19:49 -07:00
Yicheng Qin
690edb2c56 raft: update lead for follower sm when receiving msgApp
Or follower may take `none` as its leader forever if it just launched
a failed election whose term is the same as the current leader.
2014-09-03 09:19:49 -07:00
Xiang Li
2ff3ce74c5 raft: add sm.Index 2014-09-03 09:05:14 -07:00
Xiang Li
0886e0ddf4 raft: change term to atomicInt 2014-09-03 09:05:14 -07:00
Xiang Li
30f4d9faea raft: change index and term to int64 2014-09-03 09:05:14 -07:00
Xiang Li
e11c7f35b4 raft: add atomicInt 2014-09-03 09:05:14 -07:00
Xiang Li
2af0ad505a raft: make id int64 2014-09-03 09:05:12 -07:00
Xiang Li
5651272ec8 raft: handle snapshot message 2014-09-03 09:05:12 -07:00
Xiang Li
2a11c1487c raft: sm.compact and sm.restore 2014-09-03 09:05:12 -07:00
Yicheng Qin
62a90e77b3 raft: send Normal with nil Data when leader is elected out 2014-09-03 09:05:12 -07:00
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