// HardState contains term, vote and commit. // Snapshot contains data and snapshot metadata. func (n *node) saveToStorage(hardState raftpb.HardState, entries []raftpb.Entry, snapshot raftpb.Snapshot) { if !raft.IsEmptySnap(snapshot) { fmt.Printf("saveToStorage snapshot: %v\n", snapshot.String()) le, err := n.store.LastIndex() if err != nil { log.Fatalf("While retrieving last index: %v\n", err) } te, err := n.store.Term(le) if err != nil { log.Fatalf("While retrieving term: %v\n", err) } fmt.Printf("%d node Term for le: %v is %v\n", n.id, le, te) if snapshot.Metadata.Index <= le { fmt.Printf("%d node ignoring snapshot. Last index: %v\n", n.id, le) return } if err := n.store.ApplySnapshot(snapshot); err != nil { log.Fatalf("Applying snapshot: %v", err) } } if !raft.IsEmptyHardState(hardState) { n.store.SetHardState(hardState) } n.store.Append(entries) }