@@ -490,7 +490,7 @@ magma_fragmentation_percentage(BucketConfig) ->
490490-define (FS_SOFT_REBALANCE_NEEDED , 1 ).
491491-define (FS_OK , 0 ).
492492
493- bucket_failover_safety (BucketConfig , ActiveNodes , LiveNodes , NumGroups ) ->
493+ bucket_failover_safety (BucketConfig , ActiveNodes , LiveNodes , MaxReplicas ) ->
494494 ReplicaNum = num_replicas (BucketConfig ),
495495 case ReplicaNum of
496496 % % if replica count for bucket is 0 we cannot failover at all
@@ -532,31 +532,32 @@ bucket_failover_safety(BucketConfig, ActiveNodes, LiveNodes, NumGroups) ->
532532 end
533533 end ,
534534 ExtraSafety = bucket_extra_safety (
535- BaseSafety , ReplicaNum , ActiveNodes , NumGroups ),
535+ BaseSafety , ReplicaNum , ActiveNodes , MaxReplicas ),
536536 {BaseSafety , ExtraSafety }
537537 end .
538538
539- bucket_extra_safety (BaseSafety , _ReplicaNum , _ActiveNodes , _NumGroups )
539+ bucket_extra_safety (BaseSafety , _ReplicaNum , _ActiveNodes , _MaxReplicas )
540540 when BaseSafety =:= ? FS_HARD_NODES_NEEDED ->
541541 ok ;
542- bucket_extra_safety (_BaseSafety , ReplicaNum , ActiveNodes , NumGroups ) ->
543- case length (ActiveNodes ) =< ReplicaNum orelse NumGroups = < ReplicaNum of
542+ bucket_extra_safety (_BaseSafety , ReplicaNum , ActiveNodes , MaxReplicas ) ->
543+ case length (ActiveNodes ) =< ReplicaNum orelse MaxReplicas < ReplicaNum of
544544 true ->
545545 softNodesNeeded ;
546546 false ->
547547 ok
548548 end .
549549
550550failover_safety_rec (? FS_HARD_NODES_NEEDED , _ExtraSafety , _ ,
551- _ActiveNodes , _LiveNodes , _NumGroups ) ->
551+ _ActiveNodes , _LiveNodes , _MaxReplicas ) ->
552552 {? FS_HARD_NODES_NEEDED , ok };
553553failover_safety_rec (BaseSafety , ExtraSafety , [],
554- _ActiveNodes , _LiveNodes , _NumGroups ) ->
554+ _ActiveNodes , _LiveNodes , _MaxReplicas ) ->
555555 {BaseSafety , ExtraSafety };
556556failover_safety_rec (BaseSafety , ExtraSafety , [BucketConfig | RestConfigs ],
557- ActiveNodes , LiveNodes , NumGroups ) ->
557+ ActiveNodes , LiveNodes , MaxReplicas ) ->
558558 {ThisBaseSafety , ThisExtraSafety } =
559- bucket_failover_safety (BucketConfig , ActiveNodes , LiveNodes , NumGroups ),
559+ bucket_failover_safety (BucketConfig , ActiveNodes , LiveNodes ,
560+ MaxReplicas ),
560561 NewBaseSafety = case BaseSafety < ThisBaseSafety of
561562 true -> ThisBaseSafety ;
562563 _ -> BaseSafety
@@ -568,7 +569,7 @@ failover_safety_rec(BaseSafety, ExtraSafety, [BucketConfig | RestConfigs],
568569 ok
569570 end ,
570571 failover_safety_rec (NewBaseSafety , NewExtraSafety ,
571- RestConfigs , ActiveNodes , LiveNodes , NumGroups ).
572+ RestConfigs , ActiveNodes , LiveNodes , MaxReplicas ).
572573
573574-spec failover_warnings (map ()) -> [failoverNeeded | rebalanceNeeded |
574575 hardNodesNeeded | softNodesNeeded |
@@ -581,12 +582,13 @@ failover_warnings(Snapshot) ->
581582 KvGroups = ns_cluster_membership :get_nodes_server_groups (
582583 ActiveNodes , ServerGroups ),
583584
584- NumGroups =
585+ MaxReplicas =
585586 case ns_cluster_membership :rack_aware (KvGroups ) of
586587 true ->
587- length (KvGroups );
588+ ns_cluster_membership :get_max_replicas (
589+ length (ActiveNodes ), KvGroups );
588590 false ->
589- length (ActiveNodes )
591+ length (ActiveNodes ) - 1
590592 end ,
591593
592594 {BaseSafety0 , ExtraSafety }
@@ -595,7 +597,7 @@ failover_warnings(Snapshot) ->
595597 membase =:= bucket_type (C )],
596598 ActiveNodes ,
597599 LiveNodes ,
598- NumGroups ),
600+ MaxReplicas ),
599601 BaseSafety = case BaseSafety0 of
600602 ? FS_HARD_NODES_NEEDED -> hardNodesNeeded ;
601603 ? FS_FAILOVER_NEEDED -> failoverNeeded ;
0 commit comments