From 60817932a6aa62f7b7a7d525c363856e37320c00 Mon Sep 17 00:00:00 2001 From: Waldemar Quevedo Date: Thu, 11 Mar 2021 23:28:57 -0800 Subject: [PATCH] raft: Fixes to cluster size check for streams Signed-off-by: Waldemar Quevedo --- server/raft.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/server/raft.go b/server/raft.go index e7ae18f3..8460eb5e 100644 --- a/server/raft.go +++ b/server/raft.go @@ -317,7 +317,7 @@ func (s *Server) startRaftNode(cfg *RaftConfig) (RaftNode, error) { if err != nil { return nil, err } - if ps == nil || ps.clusterSize < 2 { + if ps == nil || (len(ps.knownPeers) < 2 && ps.clusterSize < 2) { return nil, errors.New("raft: cluster too small") } @@ -1933,9 +1933,13 @@ func (n *raft) applyCommit(index uint64) error { // FIXME(dlc) - Check if this is us?? if _, ok := n.peers[oldPeer]; ok { // We should decrease our cluster size since we are tracking this peer. - n.debug("Decreasing our clustersize: %d -> %d", n.csz, n.csz-1) - n.csz-- - n.qn = n.csz/2 + 1 + if n.csz > 1 { + n.debug("Decreasing our clustersize: %d -> %d", n.csz, n.csz-1) + n.csz-- + n.qn = n.csz/2 + 1 + } else { + n.warn("Not decreasing further our clustersize: %d", n.csz) + } delete(n.peers, oldPeer) } n.writePeerState(&peerState{n.peerNames(), n.csz})