diff options
author | jonmv <venstad@gmail.com> | 2024-05-23 10:36:58 +0200 |
---|---|---|
committer | jonmv <venstad@gmail.com> | 2024-05-23 10:36:58 +0200 |
commit | bfc07dd812b9cb573cdd5ab1ebeb156be6f9ed50 (patch) | |
tree | 3bcd9dd67688dc494138e3c327551092c66d2b3c /node-repository | |
parent | 35d47beb9b8a98c8545ac2b740c086de83961a3b (diff) |
Separate out admin-only hosts in parent-host-not-ready message
Diffstat (limited to 'node-repository')
-rw-r--r-- | node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeList.java | 6 | ||||
-rw-r--r-- | node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Activator.java | 25 |
2 files changed, 22 insertions, 9 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeList.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeList.java index bed3d9fcb04..d282432d60f 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeList.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeList.java @@ -102,9 +102,9 @@ public class NodeList extends AbstractFilteringList<Node, NodeList> { return except(Set.of(node)); } - /** Returns the subset of nodes assigned to the given cluster type */ - public NodeList type(ClusterSpec.Type type) { - return matching(node -> node.allocation().isPresent() && node.allocation().get().membership().cluster().type().equals(type)); + /** Returns the subset of nodes assigned to the given cluster types */ + public NodeList type(ClusterSpec.Type... types) { + return matching(node -> node.allocation().isPresent() && Set.of(types).contains(node.allocation().get().membership().cluster().type())); } /** Returns the subset of nodes that run containers */ diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Activator.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Activator.java index 2ebc2350542..56d125abc47 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Activator.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Activator.java @@ -5,6 +5,7 @@ import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.ApplicationTransaction; import com.yahoo.config.provision.ClusterMembership; import com.yahoo.config.provision.ClusterSpec; +import com.yahoo.config.provision.ClusterSpec.Type; import com.yahoo.config.provision.Flavor; import com.yahoo.config.provision.HostSpec; import com.yahoo.config.provision.ParentHostUnavailableException; @@ -20,6 +21,7 @@ import com.yahoo.vespa.hosted.provision.node.Allocation; import java.time.Instant; import java.util.ArrayList; import java.util.Collection; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Optional; @@ -159,7 +161,7 @@ class Activator { .collect(Collectors.toUnmodifiableSet()); } - private static void validateParentHosts(ApplicationId application, NodeList allNodes, NodeList potentialChildren) { + static void validateParentHosts(ApplicationId application, NodeList allNodes, NodeList potentialChildren) { Set<String> parentHostnames = potentialChildren.stream() .map(Node::parentHostname) .flatMap(Optional::stream) @@ -169,13 +171,24 @@ class Activator { .matching(node -> parentHostnames.contains(node.hostname())) .hostnames(); + Set<String> applicationParentHostnames = new HashSet<>(parentHostnames); + applicationParentHostnames.removeIf(host -> allNodes.childrenOf(host).type(Type.combined, Type.container, Type.content).isEmpty()); + + Set<String> nonActiveApplicationHosts = new HashSet<>(nonActiveHosts); + nonActiveApplicationHosts.removeIf(host -> allNodes.childrenOf(host).type(Type.combined, Type.container, Type.content).isEmpty()); + if (nonActiveHosts.size() > 0) { - long numActive = parentHostnames.size() - nonActiveHosts.size(); + int numActiveApplication = applicationParentHostnames.size() - nonActiveApplicationHosts.size(); + int numActiveAdmin = parentHostnames.size() - nonActiveHosts.size() - numActiveApplication; var messageBuilder = new StringBuilder() - .append(numActive).append("/").append(parentHostnames.size()) - .append(" hosts for ") - .append(application) - .append(" have completed provisioning and bootstrapping, still waiting for "); + .append(numActiveApplication).append("/").append(applicationParentHostnames.size()) + .append(" application hosts"); + if (parentHostnames.size() > applicationParentHostnames.size()) + messageBuilder.append(" and ") + .append(numActiveAdmin).append("/").append(parentHostnames.size() - applicationParentHostnames.size()) + .append(" admin hosts"); + messageBuilder.append(" for ").append(application) + .append(" have completed provisioning and bootstrapping, still waiting for "); if (nonActiveHosts.size() <= 5) { messageBuilder.append(nonActiveHosts.stream() |