diff options
author | Harald Musum <musum@yahooinc.com> | 2023-04-18 13:27:15 +0200 |
---|---|---|
committer | Harald Musum <musum@yahooinc.com> | 2023-04-18 13:27:15 +0200 |
commit | 63750359c99fb968814fcfd6d2e0aea0ff2ec74f (patch) | |
tree | 97574e789ea2b66bc0ad657774f240b1fb0fcd9d | |
parent | 0e68174077b41501e7cb297a95d6326eb2537d19 (diff) |
FIx retiredOrNotUpGroups()
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 |