Yicheng Qin
8490904f20
Merge pull request #1224 from unihorn/149
...
raft: msg.Denied -> msg.Reject
2014-10-02 12:24:09 -07:00
Yicheng Qin
fff918c672
raft: msg.Denied -> msg.Reject
...
Change the field name because it has msgDenied already.
2014-10-02 12:22:12 -07:00
Yicheng Qin
e4a6c9651a
raft: add removed
...
The usage of removed:
1. tell removed node about its removal explicitly using msgDenied
2. prevent removed node disrupt cluster progress by launching leader election
It is set when apply node removal, or receive msgDenied.
2014-10-01 14:57:38 -07:00
Xiang Li
d7b4e44a66
raft: heartbeat is only response for maintaining leader dominance
2014-09-29 16:57:43 -07:00
Xiang Li
51529cc3f2
raft: remove index field in msg AppResp
2014-09-28 21:13:53 -07:00
Xiang Li
adefd83855
raft: remove index field in msg voteResp
2014-09-28 21:13:43 -07:00
Xiang Li
86473d8a27
raft: add msg denied field
2014-09-28 21:13:33 -07:00
Yicheng Qin
1ca03d8e9d
raft: move logic to separate func
2014-09-24 10:23:44 -07:00
Yicheng Qin
b07be74a82
raft: stop tickElection when the node is not in peer list
...
This prevents the bug like this:
1. a node sends join to a cluster and succeeds
2. it starts with empty peers and waits for sync, but it have not
received anything
3. election timeout passes, and it promotes itself to leader
4. it commits some log entry
5. its log conflicts with the cluster's
2014-09-23 23:15:02 -07:00
Yicheng Qin
bc7b0108dc
raft: ConfigChange -> ConfChange
2014-09-23 12:02:44 -07:00
Yicheng Qin
d92931853e
raft: Config -> ConfigChange
...
Configure -> ProposeConfigChange
AddNode, RemoveNode -> ApplyConfigChange
2014-09-22 23:39:53 -07:00
Yicheng Qin
b82d70871f
raft: use EntryType in protobuf
2014-09-22 15:44:46 -07:00
Yicheng Qin
b801f1affe
raft: refine comment for raft.pendingConf
2014-09-22 15:44:46 -07:00
Yicheng Qin
ff6705b94b
raft: add Configure, AddNode, RemoveNode
...
Configure is used to propose config change. AddNode and RemoveNode is
used to apply cluster change to raft state machine. They are the
basics for dynamic configuration.
2014-09-22 15:43:13 -07:00
Xiang Li
ab61a8aa9a
*: init for on disk snap support
2014-09-17 13:56:12 -07:00
Yicheng Qin
023dc7cba2
etcdserver: add SYNC request
2014-09-16 13:42:03 -07:00
Yicheng Qin
cc8d8f2102
raft: remove unused raftpb.LastIndex
2014-09-15 14:34:23 -07:00
Xiang Li
f9c12e2053
Merge pull request #1075 from coreos/fix_heartbeat
...
raft: fix heartbeat
2014-09-15 10:04:12 -07:00
Yicheng Qin
38c074cb05
Merge pull request #1067 from unihorn/122
...
raft: write entry 0 into log
2014-09-15 10:00:49 -07:00
Xiang Li
21d116d3e1
raft: fix heartbeat
2014-09-15 09:58:22 -07:00
Yicheng Qin
140fd6d6c4
raft: restart using last written entry also
2014-09-15 09:56:33 -07:00
Xiang Li
e7ea6a374a
main: check node id is not noneid
2014-09-14 23:28:11 -07:00
Xiang Li
e085cc4e06
Merge pull request #1042 from unihorn/118
...
raft: set none to be 0
2014-09-14 22:32:37 -07:00
Yicheng Qin
da575c46fa
raft: remove unused field
2014-09-14 13:08:35 -07:00
Brandon Philips
98f9ee3613
raft: add useful comments
...
These comments were things I learned about the units, use case or
meaning of various fields and functions in the raft package.
2014-09-12 09:58:04 -07:00
Yicheng Qin
b50f96e2e1
raft: set none to be 0
2014-09-09 16:47:21 -07:00
Xiang Li
1a6e908971
*: add wal
2014-09-05 09:52:40 -07:00
Xiang Li
8dfa490e49
raft: fix ignore term
2014-09-04 14:33:51 -07:00
Xiang Li
8f4c615704
raft: leader should tick heartbeat
2014-09-03 22:01:31 -07:00
Blake Mizerany
8d9b7b1680
raft: remove entry type
2014-09-03 15:24:47 -07:00
Blake Mizerany
8463421448
raft: remove configuration
2014-09-03 15:23:05 -07:00
Xiang Li
3c77693881
raft: make tick send out messages. all state machine actions should be taken inside step function.
2014-09-03 10:17:09 -07:00
Xiang Li
966cfd6e8e
raft: fix elapsed reset
2014-09-03 09:20:20 -07:00
Blake Mizerany
d218034630
boom
2014-09-03 09:20:20 -07:00
Blake Mizerany
e8e588c67b
raft: move protobufs into raftpb
2014-09-03 09:20:17 -07:00
Blake Mizerany
ddd219f297
many: marshal message
2014-09-03 09:20:16 -07:00
Blake Mizerany
f87a6f3c1f
raft: sift proposals from other message types in Step
2014-09-03 09:20:14 -07:00
Blake Mizerany
134a962222
raft: move raft2 to raft
2014-09-03 09:20:14 -07:00
Blake Mizerany
0453d09af6
raft: moved into new raft
2014-09-03 09:20:11 -07:00
Blake Mizerany
f03c3bce05
raft: seperate dequeuing from slicing
2014-09-03 09:20:11 -07:00
Yicheng Qin
27c9a0535c
server: add tests for on-disk snapshot
2014-09-03 09:20:10 -07:00
Yicheng Qin
a28dc4559b
raft/etcd: recover node
2014-09-03 09:20:10 -07:00
Xiang Li
a5df254e53
raft: add clusterId to snapshot
2014-09-03 09:20:08 -07:00
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
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