diff --git a/raft/doc.go b/raft/doc.go index 2926aa8f0..4d80727ab 100644 --- a/raft/doc.go +++ b/raft/doc.go @@ -24,6 +24,9 @@ Usage The primary object in raft is a Node. You either start a Node from scratch using raft.StartNode or start a Node from some initial state using raft.RestartNode. + +To start a node from scratch: + storage := raft.NewMemoryStorage() c := &Config{ ID: 0x01, @@ -35,6 +38,29 @@ using raft.StartNode or start a Node from some initial state using raft.RestartN } n := raft.StartNode(c, []raft.Peer{{ID: 0x02}, {ID: 0x03}}) +To restart a node from previous state: + + storage := raft.NewMemoryStorage() + + // recover the in-memory storage from persistent + // snapshot, state and entries. + storage.ApplySnapshot(snapshot) + storage.SetHardState(state) + storage.Append(entries) + + c := &Config{ + ID: 0x01, + ElectionTick: 10, + HeartbeatTick: 1, + Storage: storage, + MaxSizePerMsg: 4096, + MaxInflightMsgs: 256, + } + + // restart raft without peer information. + // peer information is already included in the storage. + n := raft.RestartNode(c) + Now that you are holding onto a Node you have a few responsibilities: First, you must read from the Node.Ready() channel and process the updates