func (n *Node) restoreFromSnapshot(data []byte, forceNewCluster bool) error { var snapshot api.Snapshot if err := snapshot.Unmarshal(data); err != nil { return err } if snapshot.Version != api.Snapshot_V0 { return fmt.Errorf("unrecognized snapshot version %d", snapshot.Version) } if err := n.memoryStore.Restore(&snapshot.Store); err != nil { return err } n.cluster.Clear() if !forceNewCluster { for _, member := range snapshot.Membership.Members { if err := n.registerNode(&api.RaftMember{RaftID: member.RaftID, NodeID: member.NodeID, Addr: member.Addr}); err != nil { return err } } } for _, removedMember := range snapshot.Membership.Removed { n.cluster.RemoveMember(removedMember) } return nil }
func (n *Node) clusterSnapshot(data []byte) (api.ClusterSnapshot, error) { var snapshot api.Snapshot if err := snapshot.Unmarshal(data); err != nil { return snapshot.Membership, err } if snapshot.Version != api.Snapshot_V0 { return snapshot.Membership, fmt.Errorf("unrecognized snapshot version %d", snapshot.Version) } if err := n.memoryStore.Restore(&snapshot.Store); err != nil { return snapshot.Membership, err } return snapshot.Membership, nil }