diff --git a/raft/log.go b/raft/log.go index 5d2e63596..16cc3fb13 100644 --- a/raft/log.go +++ b/raft/log.go @@ -272,11 +272,16 @@ func (l *raftLog) slice(lo uint64, hi uint64) []pb.Entry { } else if err != nil { panic(err) // TODO(bdarnell) } - ents = append(ents, storedEnts...) + ents = storedEnts } if hi > l.unstable.offset { unstable := l.unstable.slice(max(lo, l.unstable.offset), hi) - ents = append(ents, unstable...) + if len(ents) > 0 { + ents = append([]pb.Entry{}, ents...) + ents = append(ents, unstable...) + } else { + ents = unstable + } } return ents } diff --git a/raft/raft.go b/raft/raft.go index c62858369..3ab36d52b 100644 --- a/raft/raft.go +++ b/raft/raft.go @@ -407,12 +407,10 @@ func (r *raft) poll(id uint64, v bool) (granted int) { } func (r *raft) Step(m pb.Message) error { - // TODO(bmizerany): this likely allocs - prevent that. - defer func() { r.Commit = r.raftLog.committed }() - if m.Type == pb.MsgHup { log.Printf("raft: %x is starting a new election at term %d", r.id, r.Term) r.campaign() + r.Commit = r.raftLog.committed return nil } @@ -434,6 +432,7 @@ func (r *raft) Step(m pb.Message) error { return nil } r.step(r, m) + r.Commit = r.raftLog.committed return nil }