Skip to content

Commit

Permalink
raft: Avoid multiple allocs when merging stable and unstable log
Browse files Browse the repository at this point in the history
Appending to an empty slice twice could (and often did) result in
multiple allocations. This was wasteful. We can avoid this by performing
a single allocation with the correct size and copying into it.
  • Loading branch information
nvanbenschoten committed Apr 26, 2019
1 parent cca0d5c commit b5593de
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions raft/log.go
Original file line number Diff line number Diff line change
Expand Up @@ -332,8 +332,10 @@ func (l *raftLog) slice(lo, hi, maxSize uint64) ([]pb.Entry, error) {
if hi > l.unstable.offset {
unstable := l.unstable.slice(max(lo, l.unstable.offset), hi)
if len(ents) > 0 {
ents = append([]pb.Entry{}, ents...)
ents = append(ents, unstable...)
combined := make([]pb.Entry, len(ents)+len(unstable))
n := copy(combined, ents)
copy(combined[n:], unstable)
ents = combined
} else {
ents = unstable
}
Expand Down

0 comments on commit b5593de

Please sign in to comment.