Merge pull request #1820 from xiang90/fix_storage

raft: fix memory storage
release-2.0
Xiang Li 2014-12-01 21:25:17 -08:00
commit cb74b6812b
1 changed files with 20 additions and 6 deletions

View File

@ -179,13 +179,27 @@ func (ms *MemoryStorage) Append(entries []pb.Entry) {
if len(entries) == 0 {
return
}
offset := entries[0].Index - ms.snapshot.Metadata.Index
// do not append out of date entries
if offset < 0 {
first := ms.snapshot.Metadata.Index + 1
last := entries[0].Index + uint64(len(entries)) - 1
// shortcut if there is no new entry.
if last < first {
return
}
if uint64(len(ms.ents)) > offset {
ms.ents = append([]pb.Entry{}, ms.ents[:offset]...)
// truncate old entries
if first > entries[0].Index {
entries = entries[first-entries[0].Index:]
}
offset := entries[0].Index - ms.snapshot.Metadata.Index
switch {
case uint64(len(ms.ents)) > offset:
ms.ents = append([]pb.Entry{}, ms.ents[:offset]...)
ms.ents = append(ms.ents, entries...)
case uint64(len(ms.ents)) == offset:
ms.ents = append(ms.ents, entries...)
default:
log.Panicf("missing log entry [last: %d, append at: %d]",
ms.snapshot.Metadata.Index+uint64(len(ms.ents)), entries[0].Index)
}
ms.ents = append(ms.ents, entries...)
}