aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2021-03-19 11:27:51 +0100
committerMartin Polden <mpolden@mpolden.no>2021-03-19 11:27:51 +0100
commit1e12450b8b3bb9306d410de768eeb5fc83c1ca43 (patch)
treef9afa0807c91b947634dbf64d98b3c1067e1d0ac
parent0f20f06d090212293dfb13b438121dab6ec4ebf7 (diff)
Require non-empty IP pool for ready hosts
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java10
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java2
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java5
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OsUpgradeActivatorTest.java4
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/os/OsVersionsTest.java2
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ContainerImagesTest.java2
6 files changed, 14 insertions, 11 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java
index 4d0617c02fd..5135ae73ea1 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java
@@ -96,17 +96,17 @@ public final class Node implements Nodelike {
if (state == State.active)
requireNonEmpty(ipConfig.primary(), "Active node " + hostname + " must have at least one valid IP address");
+ if (state == State.ready && type.isHost()) {
+ requireNonEmpty(ipConfig.primary(), "A " + type + " must have at least one primary IP address in state " + state);
+ requireNonEmpty(ipConfig.pool().ipSet(), "A " + type + " must have a non-empty IP address pool in state " + state);
+ }
+
if (parentHostname.isPresent()) {
if (!ipConfig.pool().ipSet().isEmpty()) throw new IllegalArgumentException("A child node cannot have an IP address pool");
if (modelName.isPresent()) throw new IllegalArgumentException("A child node cannot have model name set");
if (switchHostname.isPresent()) throw new IllegalArgumentException("A child node cannot have switch hostname set");
}
- if (type.isHost() && state == State.ready) {
- requireNonEmpty(ipConfig.primary(), "A " + type + " must have at least one primary IP address in state " + state);
- if (type == NodeType.host) requireNonEmpty(ipConfig.pool().asSet(), "A " + type + " must have a non-empty IP address pool in state " + state);
- }
-
if (type != NodeType.host && reservedTo.isPresent())
throw new IllegalArgumentException("Only tenant hosts can be reserved to a tenant");
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java
index 6beeb2f3578..305f1b5952e 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java
@@ -452,7 +452,7 @@ public class DynamicProvisioningMaintainerTest {
dynamicProvisioningTester.hostProvisioner.overrideHostFlavor("default");
// Initial config server hosts are provisioned manually
- List<Node> provisionedHosts = tester.makeReadyNodes(3, "default", hostType).stream()
+ List<Node> provisionedHosts = tester.makeReadyNodes(3, "default", hostType, 1).stream()
.sorted(Comparator.comparing(Node::hostname))
.collect(Collectors.toList());
tester.prepareAndActivateInfraApplication(hostApp, hostType);
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java
index 9801233f396..27f5b45173b 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java
@@ -251,9 +251,12 @@ public class NodeFailTester {
private List<Node> createReadyNodes(int count, int startIndex, Optional<String> parentHostname, Flavor flavor, NodeType nodeType) {
List<Node> nodes = new ArrayList<>(count);
+ int lastOctetOfPoolAddress = 0;
for (int i = startIndex; i < startIndex + count; i++) {
String hostname = "host" + i;
- IP.Config ipConfig = new IP.Config(nodeRepository.nameResolver().resolveAll(hostname), Set.of());
+ Set<String> ipPool = nodeType.isHost() ? Set.of("127.0." + i + "." + (++lastOctetOfPoolAddress)) : Set.of();
+ IP.Config ipConfig = new IP.Config(nodeRepository.nameResolver().resolveAll(hostname),
+ ipPool);
Node.Builder builder = Node.create("node" + i, ipConfig, hostname, flavor, nodeType);
parentHostname.ifPresent(builder::parentHostname);
nodes.add(builder.build());
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OsUpgradeActivatorTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OsUpgradeActivatorTest.java
index 3f0b94170f6..5e8ce1ed328 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OsUpgradeActivatorTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OsUpgradeActivatorTest.java
@@ -39,11 +39,11 @@ public class OsUpgradeActivatorTest {
// Create infrastructure nodes
var configHostApplication = ApplicationId.from("hosted-vespa", "configserver-host", "default");
- var configHostNodes = tester.makeReadyNodes(3, "default", NodeType.confighost);
+ var configHostNodes = tester.makeReadyNodes(3, "default", NodeType.confighost, 1);
tester.prepareAndActivateInfraApplication(configHostApplication, NodeType.confighost, version0);
var tenantHostApplication = ApplicationId.from("hosted-vespa", "tenant-host", "default");
- var tenantHostNodes = tester.makeReadyNodes(3, "default", NodeType.host);
+ var tenantHostNodes = tester.makeReadyNodes(3, "default", NodeType.host, 1);
tester.prepareAndActivateInfraApplication(tenantHostApplication, NodeType.host, version0);
var allNodes = new ArrayList<>(configHostNodes);
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/os/OsVersionsTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/os/OsVersionsTest.java
index 8dbfbf44604..26c6f742052 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/os/OsVersionsTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/os/OsVersionsTest.java
@@ -255,7 +255,7 @@ public class OsVersionsTest {
}
private List<Node> provisionInfraApplication(int nodeCount, NodeType nodeType) {
- var nodes = tester.makeReadyNodes(nodeCount, "default", nodeType);
+ var nodes = tester.makeReadyNodes(nodeCount, "default", nodeType, 1);
tester.prepareAndActivateInfraApplication(infraApplication, nodeType);
return nodes.stream()
.map(Node::hostname)
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ContainerImagesTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ContainerImagesTest.java
index d8df7721717..7b84b7a31f3 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ContainerImagesTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ContainerImagesTest.java
@@ -42,7 +42,7 @@ public class ContainerImagesTest {
}
// Proxy host uses image used by child nodes (proxy nodes), which is overridden in this case (for preload purposes)
- var proxyHosts = tester.makeReadyNodes(2, "default", NodeType.proxyhost);
+ var proxyHosts = tester.makeReadyNodes(2, "default", NodeType.proxyhost, 1);
for (var host : proxyHosts) {
assertEquals(proxyImage, tester.nodeRepository().containerImages().imageFor(host.type()));
}