"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "server/etcdserver/server.go" between
etcd-3.5.6.tar.gz and etcd-3.5.7.tar.gz

About: etcd is a distributed reliable key-value store for the most critical data of a distributed system (written in "Go").

server.go  (etcd-3.5.6):server.go  (etcd-3.5.7)
skipping to change at line 1747 skipping to change at line 1747
return ErrNotEnoughStartedMembers return ErrNotEnoughStartedMembers
} }
return nil return nil
} }
// check whether the learner catches up with leader or not. // check whether the learner catches up with leader or not.
// Note: it will return nil if member is not found in cluster or if member is no t learner. // Note: it will return nil if member is not found in cluster or if member is no t learner.
// These two conditions will be checked before apply phase later. // These two conditions will be checked before apply phase later.
func (s *EtcdServer) isLearnerReady(id uint64) error { func (s *EtcdServer) isLearnerReady(id uint64) error {
if err := s.waitAppliedIndex(); err != nil {
return err
}
rs := s.raftStatus() rs := s.raftStatus()
// leader's raftStatus.Progress is not nil // leader's raftStatus.Progress is not nil
if rs.Progress == nil { if rs.Progress == nil {
return ErrNotLeader return ErrNotLeader
} }
var learnerMatch uint64 var learnerMatch uint64
isFound := false isFound := false
leaderID := rs.ID leaderID := rs.ID
for memberID, progress := range rs.Progress { for memberID, progress := range rs.Progress {
if id == memberID { if id == memberID {
// check its status // check its status
learnerMatch = progress.Match learnerMatch = progress.Match
isFound = true isFound = true
break break
} }
} }
if isFound { // We should return an error in API directly, to avoid the request
leaderMatch := rs.Progress[leaderID].Match // being unnecessarily delivered to raft.
// the learner's Match not caught up with leader yet if !isFound {
if float64(learnerMatch) < float64(leaderMatch)*readyPercent { return membership.ErrIDNotFound
return ErrLearnerNotReady }
}
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 return nil
} }
func (s *EtcdServer) mayRemoveMember(id types.ID) error { func (s *EtcdServer) mayRemoveMember(id types.ID) error {
if !s.Cfg.StrictReconfigCheck { if !s.Cfg.StrictReconfigCheck {
return nil return nil
} }
 End of changes. 2 change blocks. 
6 lines changed or deleted 14 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)