raft: avoid allocation of Raft entry due to logging
`raftpb.Entry.String` takes a pointer receiver, so calling it on a loop variable was causing the variable to escape. Removing the `.String()` call was enough to avoid the allocation, but this also avoids a memory copy and prevents similar bugs. This was responsible for 11.63% of total allocations in an experiment with https://github.com/nvanbenschoten/raft-toy.release-3.4
parent
cca0d5c1be
commit
24f35a9861
|
@ -1005,11 +1005,12 @@ func stepLeader(r *raft, m pb.Message) error {
|
||||||
return ErrProposalDropped
|
return ErrProposalDropped
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, e := range m.Entries {
|
for i := range m.Entries {
|
||||||
|
e := &m.Entries[i]
|
||||||
if e.Type == pb.EntryConfChange {
|
if e.Type == pb.EntryConfChange {
|
||||||
if r.pendingConfIndex > r.raftLog.applied {
|
if r.pendingConfIndex > r.raftLog.applied {
|
||||||
r.logger.Infof("propose conf %s ignored since pending unapplied configuration [index %d, applied %d]",
|
r.logger.Infof("propose conf %s ignored since pending unapplied configuration [index %d, applied %d]",
|
||||||
e.String(), r.pendingConfIndex, r.raftLog.applied)
|
e, r.pendingConfIndex, r.raftLog.applied)
|
||||||
m.Entries[i] = pb.Entry{Type: pb.EntryNormal}
|
m.Entries[i] = pb.Entry{Type: pb.EntryNormal}
|
||||||
} else {
|
} else {
|
||||||
r.pendingConfIndex = r.raftLog.lastIndex() + uint64(i) + 1
|
r.pendingConfIndex = r.raftLog.lastIndex() + uint64(i) + 1
|
||||||
|
|
Loading…
Reference in New Issue