raft/storage.go
func (ms *MemoryStorage) Append(entries []pb.Entry) error {
	if len(entries) == 0 {
		return nil
	}

	ms.Lock()
	defer ms.Unlock()

	first := ms.firstIndex()
	last := entries[0].Index + uint64(len(entries)) - 1

	// shortcut if there is no new entry.
	if last < first {
		return nil
	}
	// truncate compacted entries
	if first > entries[0].Index {
		entries = entries[first-entries[0].Index:]
	}

	offset := entries[0].Index - ms.ents[0].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:
		raftLogger.Panicf("missing log entry [last: %d, append at: %d]",
			ms.lastIndex(), entries[0].Index)
	}
	return nil
}
func (ms *MemoryStorage) Append(entries []pb.Entry) error {
	if len(entries) == 0 {
		return nil
	}

	ms.Lock()
	defer ms.Unlock()

	first := ms.firstIndex()
	last := entries[0].Index + uint64(len(entries)) - 1

	// shortcut if there is no new entry.
	if last < first {
		return nil
	}
	// truncate compacted entries
	if first > entries[0].Index {
		entries = entries[first-entries[0].Index:]
	}

	offset := entries[0].Index - ms.ents[0].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:
		raftLogger.Panicf("missing log entry [last: %d, append at: %d]",
			ms.lastIndex(), entries[0].Index)
	}
	return nil
}
func ( ms * MemoryStorage ) Append ( entries [ ] pb . Entry ) error { if len ( entries ) == 0 { return nil } ms . Lock ( ) defer ms . Unlock ( ) first := ms . firstIndex ( ) last := entries [ 0 ] . Index + uint64 ( len ( entries ) ) - 1 // shortcut if there is no new entry. if last < first { return nil } // truncate compacted entries if first > entries [ 0 ] . Index { entries = entries [ first - entries [ 0 ] . Index : ] } offset := entries [ 0 ] . Index - ms . ents [ 0 ] . 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 : raftLogger . Panicf ( " " , ms . lastIndex ( ) , entries [ 0 ] . Index ) } return nil }
// Append the new entries to storage.
// TODO (xiangli): ensure the entries are continuous and
// entries[0].Index > ms.entries[0].Index
Append the new entries to storage . TODO ( xiangli ) : ensure the entries are continuous and entries [ 0 ] . Index > ms . entries [ 0 ] . Index