aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config-provisioning/abi-spec.json3
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/NodeType.java7
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/DockerHostCapacity.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/FlavorConfigBuilder.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java2
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DockerHostCapacityTest.java20
6 files changed, 33 insertions, 3 deletions
diff --git a/config-provisioning/abi-spec.json b/config-provisioning/abi-spec.json
index 91907af75c4..a2f914ca6f7 100644
--- a/config-provisioning/abi-spec.json
+++ b/config-provisioning/abi-spec.json
@@ -673,7 +673,8 @@
"public boolean isDockerHost()",
"public java.lang.String description()",
"public com.yahoo.config.provision.NodeType childNodeType()",
- "public java.util.List childNodeTypes()"
+ "public java.util.List childNodeTypes()",
+ "public boolean supportsChild(com.yahoo.config.provision.NodeType)"
],
"fields": [
"public static final enum com.yahoo.config.provision.NodeType tenant",
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/NodeType.java b/config-provisioning/src/main/java/com/yahoo/config/provision/NodeType.java
index 009d8fd73cb..93f2602cacc 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/NodeType.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/NodeType.java
@@ -71,4 +71,11 @@ public enum NodeType {
return childNodeTypes;
}
+ /**
+ * @param type Child {@link NodeType}
+ * @return true if the {@link NodeType} can run on this host, false otherwise.
+ */
+ public boolean supportsChild(NodeType type) {
+ return isDockerHost() && childNodeTypes.contains(type);
+ }
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/DockerHostCapacity.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/DockerHostCapacity.java
index 781dae020b9..f46cde995d7 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/DockerHostCapacity.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/DockerHostCapacity.java
@@ -71,7 +71,7 @@ public class DockerHostCapacity {
NodeResources freeCapacityOf(Node host, boolean excludeInactive) {
// Only hosts have free capacity
- if (host.type() != NodeType.host) return new NodeResources(0, 0, 0, 0);
+ if (!host.type().supportsChild(NodeType.tenant)) return new NodeResources(0, 0, 0, 0);
NodeResources hostResources = hostResourcesCalculator.availableCapacityOf(host.flavor().resources());
return allNodes.childrenOf(host).asList().stream()
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/FlavorConfigBuilder.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/FlavorConfigBuilder.java
index 55bea5b83a7..c7a86b283ca 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/FlavorConfigBuilder.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/FlavorConfigBuilder.java
@@ -42,6 +42,8 @@ public class FlavorConfigBuilder {
flavorConfigBuilder.addFlavor(flavorName, 2. /* cpu*/, 4. /* mem GB*/, 4. /*disk GB*/, 0.5, /* bandwidth Gbps*/ Flavor.Type.DOCKER_CONTAINER);
else if (flavorName.equals("host"))
flavorConfigBuilder.addFlavor(flavorName, 7. /* cpu*/, 10. /* mem GB*/, 12. /*disk GB*/, 5 /* bandwidth Gbps*/, Flavor.Type.BARE_METAL);
+ else if (flavorName.equals("devhost"))
+ flavorConfigBuilder.addFlavor(flavorName, 4. /* cpu*/, 8. /* mem GB*/, 10 /*disk GB*/, 10 /* bandwidth Gbps*/, Flavor.Type.BARE_METAL);
else
flavorConfigBuilder.addFlavor(flavorName, 1. /* cpu*/, 3. /* mem GB*/, 2. /*disk GB*/, 3 /* bandwidth Gbps*/, Flavor.Type.BARE_METAL);
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java
index f80ccff94e9..a0d81385cad 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java
@@ -138,7 +138,7 @@ public class NodePrioritizer {
NodeResources wantedResources = resources(requestedNodes);
for (Node host : candidates) {
- if (host.type() != NodeType.host) continue;
+ if (!host.type().supportsChild(requestedNodes.type())) continue;
if (host.status().wantToRetire()) continue;
boolean hostHasCapacityForWantedFlavor = capacity.hasCapacity(host, wantedResources);
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DockerHostCapacityTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DockerHostCapacityTest.java
index a41b61fd352..e2015cfd30a 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DockerHostCapacityTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DockerHostCapacityTest.java
@@ -105,6 +105,26 @@ public class DockerHostCapacityTest {
capacity.freeCapacityOf(host3, false));
}
+ @Test
+ public void devhostCapacityTest() {
+ // Dev host can assign both configserver and tenant containers.
+
+ var nodeFlavors = FlavorConfigBuilder.createDummies("devhost", "container");
+ var devHost = Node.create("devhost", new IP.Config(Set.of("::1"), generateIPs(2, 10)), "devhost", Optional.empty(), Optional.empty(), nodeFlavors.getFlavorOrThrow("devhost"), NodeType.devhost);
+
+ var cfg = Node.createDockerNode(Set.of("::2"), "cfg", "devhost", resources1, NodeType.config);
+
+ var nodes = new ArrayList<>(List.of(cfg));
+ var capacity = new DockerHostCapacity(new LockedNodeList(nodes, () -> {}), hostResourcesCalculator);
+ assertTrue(capacity.hasCapacity(devHost, resources1));
+
+ var container1 = Node.createDockerNode(Set.of("::3"), "container1", "devhost", resources1, NodeType.tenant);
+ nodes = new ArrayList<>(List.of(cfg, container1));
+ capacity = new DockerHostCapacity(new LockedNodeList(nodes, () -> {}), hostResourcesCalculator);
+ assertFalse(capacity.hasCapacity(devHost, resources1));
+
+ }
+
private Set<String> generateIPs(int start, int count) {
// Allow 4 containers
Set<String> ipAddressPool = new LinkedHashSet<>();