aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository/src/main/java
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2024-05-23 10:36:58 +0200
committerjonmv <venstad@gmail.com>2024-05-23 10:36:58 +0200
commitbfc07dd812b9cb573cdd5ab1ebeb156be6f9ed50 (patch)
tree3bcd9dd67688dc494138e3c327551092c66d2b3c /node-repository/src/main/java
parent35d47beb9b8a98c8545ac2b740c086de83961a3b (diff)
Separate out admin-only hosts in parent-host-not-ready message
Diffstat (limited to 'node-repository/src/main/java')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeList.java6
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Activator.java25
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()