Skip to content

The parameter Should be C_old configuration in runFollower()? #635

@zivfuture

Description

@zivfuture

code here:

raft/raft.go

Line 242 in 8f99c15

if hasVote(r.configurations.latest, r.localID) {

see the comment please.

// it is makesense here
if r.configurations.latestIndex == 0 {
	if !didWarn {
		r.logger.Warn("no known peers, aborting election")
		didWarn = true
	}
} 
// The code is:  WHEN the configuration is committed AND current node is not a voter THEN  abort election
// Why handle this situation separately?
// Why not merge this  into the 'else' below?
else if r.configurations.latestIndex == r.configurations.committedIndex &&
	!hasVote(r.configurations.latest, r.localID) {
	if !didWarn {
		r.logger.Warn("not part of stable configuration, aborting election")
		didWarn = true
	}
} else {
	metrics.IncrCounter([]string{"raft", "transition", "heartbeat_timeout"}, 1)
       // The code is:
       // WHEN (configuration is uncommitted)  AND  current node is a voter THEN into candidate
       // WHEN (configuration is committed OR configuration is uncommitted)  AND  current node is not a voter THEN abort election.
       // 
       // Why not implement this logic in this way and delete the "else if" block:
       // WHEN (configuration is committed OR configuration is uncommitted)  AND  current node is a voter THEN into candidate
       // WHEN (configuration is committed OR configuration is uncommitted)  AND  current node is not a voter THEN abort election.
	if hasVote(r.configurations.latest, r.localID) {
		r.logger.Warn("heartbeat timeout reached, starting election", "last-leader-addr", lastLeaderAddr, "last-leader-id", lastLeaderID)
		r.setState(Candidate)
		return
	} else if !didWarn {
		r.logger.Warn("heartbeat timeout reached, not part of a stable configuration or a non-voter, not triggering a leader election")
		didWarn = true
	}
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions