aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Musum <musum@yahooinc.com>2023-04-18 13:27:15 +0200
committerHarald Musum <musum@yahooinc.com>2023-04-18 13:27:15 +0200
commit63750359c99fb968814fcfd6d2e0aea0ff2ec74f (patch)
tree97574e789ea2b66bc0ad657774f240b1fb0fcd9d
parent0e68174077b41501e7cb297a95d6326eb2537d19 (diff)
FIx retiredOrNotUpGroups()
-rw-r--r--clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/NodeStateChangeChecker.java10
-rw-r--r--clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/NodeStateChangeCheckerTest.java2
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