From 10ebf1a335c0037dd9de2851dfcb9ec59c9d2e9b Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Mon, 24 Nov 2014 16:36:59 -0800 Subject: [PATCH] raft: fix memoryStorage append --- raft/log.go | 2 +- raft/storage.go | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/raft/log.go b/raft/log.go index b13bd8b52..fd9ccdae1 100644 --- a/raft/log.go +++ b/raft/log.go @@ -81,7 +81,7 @@ func (l *raftLog) maybeAppend(index, logTerm, committed uint64, ents ...pb.Entry switch { case ci == 0: case ci <= l.committed: - panic("conflict with committed entry") + log.Panicf("conflict(%d) with committed entry [committed(%d)]", ci, l.committed) default: l.append(ci-1, ents[ci-from:]...) } diff --git a/raft/storage.go b/raft/storage.go index 94dddc498..9d62306e4 100644 --- a/raft/storage.go +++ b/raft/storage.go @@ -176,5 +176,12 @@ func (ms *MemoryStorage) Compact(i uint64, cs *pb.ConfState, data []byte) error func (ms *MemoryStorage) Append(entries []pb.Entry) { ms.Lock() defer ms.Unlock() + if len(entries) == 0 { + return + } + offset := entries[0].Index - ms.snapshot.Metadata.Index + if uint64(len(ms.ents)) >= offset { + ms.ents = ms.ents[:offset] + } ms.ents = append(ms.ents, entries...) }