diff options
2 files changed, 7 insertions, 5 deletions
diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/NodeStateChangeChecker.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/NodeStateChangeChecker.java index c25f0195e41..b98974cf27f 100644 --- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/NodeStateChangeChecker.java +++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/NodeStateChangeChecker.java @@ -316,7 +316,7 @@ public class NodeStateChangeChecker { sortSetIntoList(groupsWithNodesWantedStateNotUp))); } - Set<Integer> retiredOrNotUpGroups = retiredOrNotUpGroups(clusterState, MAINTENANCE); + Set<Integer> retiredOrNotUpGroups = retiredOrNotUpGroups(clusterState); int numberOfGroupsToConsider = retiredOrNotUpGroups.size(); // Subtract one group if node is in a group with nodes already retired or not up, since number of such groups wil // not increase if we allow node to go down @@ -561,10 +561,12 @@ public class NodeStateChangeChecker { } // groups with at least one node with the same state & description - private Set<Integer> retiredOrNotUpGroups(ClusterState clusterState, State... states) { + private Set<Integer> retiredOrNotUpGroups(ClusterState clusterState) { return clusterInfo.getAllNodeInfos().stream() - .filter(nodeInfo -> Set.of(states).contains(nodeInfo.getUserWantedState().getState()) - || Set.of(states).contains(clusterState.getNodeState(nodeInfo.getNode()).getState())) + .filter(nodeInfo -> (nodeInfo.getUserWantedState().getState() == RETIRED + || nodeInfo.getUserWantedState().getState() != UP + || clusterState.getNodeState(nodeInfo.getNode()).getState() == RETIRED + || clusterState.getNodeState(nodeInfo.getNode()).getState() != UP)) .map(NodeInfo::getGroup) .filter(Objects::nonNull) .filter(Group::isLeafGroup) diff --git a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/NodeStateChangeCheckerTest.java b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/NodeStateChangeCheckerTest.java index 4c55dfa2131..c4fd7cb69b9 100644 --- a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/NodeStateChangeCheckerTest.java +++ b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/NodeStateChangeCheckerTest.java @@ -201,7 +201,7 @@ public class NodeStateChangeCheckerTest { Result result = nodeStateChangeChecker.evaluateTransition(node, clusterState, SAFE, UP_NODE_STATE, MAINTENANCE_NODE_STATE); assertFalse(result.settingWantedStateIsAllowed(), result.toString()); assertFalse(result.wantedStateAlreadySet()); - assertEquals("At most 2 groups can have wanted state: [0, 1]", result.getReason()); + assertEquals("At most 2 groups can have wanted state: [0, 1, 2]", result.getReason()); } // Nodes in group 0 and 1 in maintenance, try to set storage node in group 2 to maintenance, should fail |