Skip to content

Commit

Permalink
raft: Really avoid scanning raft log in becomeLeader
Browse files Browse the repository at this point in the history
I meant to do this in etcd-io#9073, but sent the PR before it was finished.
The last log index is known directly; there is no need to fetch any
entries here.
  • Loading branch information
bdarnell committed Jun 26, 2018
1 parent 8f6348a commit 20422c5
Showing 1 changed file with 1 addition and 7 deletions.
8 changes: 1 addition & 7 deletions raft/raft.go
Original file line number Diff line number Diff line change
Expand Up @@ -694,19 +694,13 @@ func (r *raft) becomeLeader() {
r.tick = r.tickHeartbeat
r.lead = r.id
r.state = StateLeader
ents, err := r.raftLog.entries(r.raftLog.committed+1, noLimit)
if err != nil {
r.logger.Panicf("unexpected error getting uncommitted entries (%v)", err)
}

// Conservatively set the pendingConfIndex to the last index in the
// log. There may or may not be a pending config change, but it's
// safe to delay any future proposals until we commit all our
// pending log entries, and scanning the entire tail of the log
// could be expensive.
if len(ents) > 0 {
r.pendingConfIndex = ents[len(ents)-1].Index
}
r.pendingConfIndex = r.raftLog.lastIndex()

r.appendEntry(pb.Entry{Data: nil})
r.logger.Infof("%x became leader at term %d", r.id, r.Term)
Expand Down

0 comments on commit 20422c5

Please sign in to comment.