Skip to content

Commit

Permalink
Merge pull request #15096 from ahrtr/3.5_promote_non_exist_id_20230113
Browse files Browse the repository at this point in the history
[3.5] etcdserver: return membership.ErrIDNotFound when the memberID not found
  • Loading branch information
serathius authored Jan 17, 2023
2 parents 816c2e2 + 53300ec commit 638c6f1
Showing 1 changed file with 14 additions and 6 deletions.
20 changes: 14 additions & 6 deletions server/etcdserver/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -1744,6 +1744,10 @@ func (s *EtcdServer) mayPromoteMember(id types.ID) error {
// Note: it will return nil if member is not found in cluster or if member is not learner.
// These two conditions will be checked before apply phase later.
func (s *EtcdServer) isLearnerReady(id uint64) error {
if err := s.waitAppliedIndex(); err != nil {
return err
}

rs := s.raftStatus()

// leader's raftStatus.Progress is not nil
Expand All @@ -1763,12 +1767,16 @@ func (s *EtcdServer) isLearnerReady(id uint64) error {
}
}

if isFound {
leaderMatch := rs.Progress[leaderID].Match
// the learner's Match not caught up with leader yet
if float64(learnerMatch) < float64(leaderMatch)*readyPercent {
return ErrLearnerNotReady
}
// We should return an error in API directly, to avoid the request
// being unnecessarily delivered to raft.
if !isFound {
return membership.ErrIDNotFound
}

leaderMatch := rs.Progress[leaderID].Match
// the learner's Match not caught up with leader yet
if float64(learnerMatch) < float64(leaderMatch)*readyPercent {
return ErrLearnerNotReady
}

return nil
Expand Down

0 comments on commit 638c6f1

Please sign in to comment.