From f7f28b99840255e1115dc1e06d1d66ff5b343e39 Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Wed, 11 Nov 2015 09:45:05 -0800 Subject: [PATCH] raft: add doc to make restart clear, especially for configuration changed case --- raft/doc.go | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/raft/doc.go b/raft/doc.go index 6e3a1c81e..f750215ab 100644 --- a/raft/doc.go +++ b/raft/doc.go @@ -19,6 +19,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, @@ -30,6 +33,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