From c64c996c03575c1c571430d51699690c88015bf8 Mon Sep 17 00:00:00 2001 From: Max Neverov Date: Tue, 16 Apr 2024 08:28:43 +0200 Subject: [PATCH] Revert quorum calculation: `(active - 1) < 1+((len(m)-1)/2)` calculates quorum after a member is deleted. Signed-off-by: Max Neverov --- server/etcdserver/server.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/server/etcdserver/server.go b/server/etcdserver/server.go index 2f88bdec3..2eebb421d 100644 --- a/server/etcdserver/server.go +++ b/server/etcdserver/server.go @@ -1592,13 +1592,14 @@ func (s *EtcdServer) mayRemoveMember(id types.ID) error { } // protect quorum if some members are down - since := time.Now().Add(-HealthInterval) - if !isConnectedToQuorumSince(s.r.transport, since, s.MemberID(), s.cluster.Members()) { + m := s.cluster.VotingMembers() + active := numConnectedSince(s.r.transport, time.Now().Add(-HealthInterval), s.MemberID(), m) + if (active - 1) < 1+((len(m)-1)/2) { lg.Warn( "rejecting member remove request; local member has not been connected to all peers, reconfigure breaks active quorum", zap.String("local-member-id", s.MemberID().String()), zap.String("requested-member-remove", id.String()), - zap.Int("active-peers", numConnectedSince(s.r.transport, since, s.MemberID(), s.cluster.Members())), + zap.Int("active-peers", active), zap.Error(errors.ErrUnhealthy), ) return errors.ErrUnhealthy