aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--athenz-identity-provider-service/src/test/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/identitydocument/IdentityDocumentGeneratorTest.java7
-rw-r--r--athenz-identity-provider-service/src/test/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/instanceconfirmation/InstanceValidatorTest.java10
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java102
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java14
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeCandidate.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisionedHost.java8
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java34
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java96
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTester.java21
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityCheckerTester.java18
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporterTest.java6
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java9
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/SpareCapacityMaintainerTest.java20
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/node/IPTest.java3
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializerTest.java9
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerAllocationTest.java3
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/HostCapacityTest.java25
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java26
18 files changed, 219 insertions, 194 deletions
diff --git a/athenz-identity-provider-service/src/test/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/identitydocument/IdentityDocumentGeneratorTest.java b/athenz-identity-provider-service/src/test/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/identitydocument/IdentityDocumentGeneratorTest.java
index f92f02f7908..edda5593e79 100644
--- a/athenz-identity-provider-service/src/test/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/identitydocument/IdentityDocumentGeneratorTest.java
+++ b/athenz-identity-provider-service/src/test/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/identitydocument/IdentityDocumentGeneratorTest.java
@@ -59,17 +59,14 @@ public class IdentityDocumentGeneratorTest {
Node parentNode = Node.create("ostkid",
new IP.Config(Set.of("127.0.0.1"), Set.of()),
parentHostname,
- Optional.empty(),
- Optional.empty(),
new MockNodeFlavors().getFlavorOrThrow("default"),
- Optional.empty(),
- NodeType.host, Optional.empty());
+ NodeType.host).build();
Node containerNode = Node.createDockerNode(Set.of("::1"),
containerHostname,
parentHostname,
new MockNodeFlavors().getFlavorOrThrow("default").resources(),
NodeType.tenant)
- .with(allocation);
+ .allocation(allocation).build();
NodeRepository nodeRepository = mock(NodeRepository.class);
when(nodeRepository.getNode(eq(parentHostname))).thenReturn(Optional.of(parentNode));
when(nodeRepository.getNode(eq(containerHostname))).thenReturn(Optional.of(containerNode));
diff --git a/athenz-identity-provider-service/src/test/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/instanceconfirmation/InstanceValidatorTest.java b/athenz-identity-provider-service/src/test/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/instanceconfirmation/InstanceValidatorTest.java
index 5e965761874..c5dbd9dd7b2 100644
--- a/athenz-identity-provider-service/src/test/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/instanceconfirmation/InstanceValidatorTest.java
+++ b/athenz-identity-provider-service/src/test/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/instanceconfirmation/InstanceValidatorTest.java
@@ -224,14 +224,8 @@ public class InstanceValidatorTest {
MockNodeFlavors flavors = new MockNodeFlavors();
List<Node> nodeList = new ArrayList<>();
for (int i = 0; i < num; i++) {
- Node node = Node.create("foo" + i,
- new IP.Config(Set.of("::1" + i, "::2" + i, "::3" + i), Set.of()),
- "foo" + i,
- Optional.empty(),
- Optional.empty(),
- flavors.getFlavorOrThrow("default"),
- Optional.empty(),
- NodeType.tenant, Optional.empty());
+ Node node = Node.create("foo" + i, new IP.Config(Set.of("::1" + i, "::2" + i, "::3" + i), Set.of()),
+ "foo" + i, flavors.getFlavorOrThrow("default"), NodeType.tenant).build();
nodeList.add(node);
}
return nodeList;
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 e288f08a681..3858e112707 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
@@ -51,19 +51,16 @@ public final class Node implements Nodelike {
/** The current allocation of this node, if any */
private final Optional<Allocation> allocation;
- /** Creates a node in the initial state (reserved) */
- public static Node createDockerNode(Set<String> ipAddresses, String hostname, String parentHostname, NodeResources resources, NodeType type) {
- return new Node("fake-" + hostname, new IP.Config(ipAddresses, Set.of()), hostname, Optional.of(parentHostname),
- new Flavor(resources), Status.initial(), State.reserved,
- Optional.empty(), History.empty(), type, new Reports(), Optional.empty(), Optional.empty(),
- Optional.empty());
+ /** Creates a node builder in the initial state (reserved) */
+ public static Node.Builder createDockerNode(Set<String> ipAddresses, String hostname, String parentHostname, NodeResources resources, NodeType type) {
+ return new Node.Builder("fake-" + hostname, hostname, new Flavor(resources), State.reserved, type)
+ .ipConfig(ipAddresses, Set.of())
+ .parentHostname(parentHostname);
}
- /** Creates a node in the initial state (provisioned) */
- public static Node create(String openStackId, IP.Config ipConfig, String hostname, Optional<String> parentHostname,
- Optional<String> modelName, Flavor flavor, Optional<TenantName> reservedTo, NodeType type, Optional<String> switchHostname) {
- return new Node(openStackId, ipConfig, hostname, parentHostname, flavor, Status.initial(), State.provisioned,
- Optional.empty(), History.empty(), type, new Reports(), modelName, reservedTo, switchHostname);
+ /** Creates a node builder in the initial state (provisioned) */
+ public static Node.Builder create(String openStackId, IP.Config ipConfig, String hostname, Flavor flavor, NodeType type) {
+ return new Node.Builder(openStackId, hostname, flavor, State.provisioned, type).ipConfig(ipConfig);
}
/** Creates a node. See also the {@code create} helper methods. */
@@ -484,4 +481,87 @@ public final class Node implements Nodelike {
}
+ public static class Builder {
+ private final String id;
+ private final String hostname;
+ private final Flavor flavor;
+ private final State state;
+ private final NodeType type;
+
+ private String parentHostname;
+ private String modelName;
+ private TenantName reservedTo;
+ private String switchHostname;
+ private Allocation allocation;
+ private IP.Config ipConfig;
+ private Status status;
+ private Reports reports;
+ private History history;
+
+ private Builder(String id, String hostname, Flavor flavor, State state, NodeType type) {
+ this.id = id;
+ this.hostname = hostname;
+ this.flavor = flavor;
+ this.state = state;
+ this.type = type;
+ }
+
+ public Builder parentHostname(String parentHostname) {
+ this.parentHostname = parentHostname;
+ return this;
+ }
+
+ public Builder modelName(String modelName) {
+ this.modelName = modelName;
+ return this;
+ }
+
+ public Builder reservedTo(TenantName reservedTo) {
+ this.reservedTo = reservedTo;
+ return this;
+ }
+
+ public Builder switchHostname(String switchHostname) {
+ this.switchHostname = switchHostname;
+ return this;
+ }
+
+ public Builder allocation(Allocation allocation) {
+ this.allocation = allocation;
+ return this;
+ }
+
+ public Builder ipConfig(IP.Config ipConfig) {
+ this.ipConfig = ipConfig;
+ return this;
+ }
+
+ public Builder ipConfig(Set<String> primary, Set<String> pool) {
+ this.ipConfig = new IP.Config(primary, pool);
+ return this;
+ }
+
+ public Builder status(Status status) {
+ this.status = status;
+ return this;
+ }
+
+ public Builder reports(Reports reports) {
+ this.reports = reports;
+ return this;
+ }
+
+ public Builder history(History history) {
+ this.history = history;
+ return this;
+ }
+
+ public Node build() {
+ return new Node(id, Optional.ofNullable(ipConfig).orElse(IP.Config.EMPTY), hostname, Optional.ofNullable(parentHostname),
+ flavor, Optional.ofNullable(status).orElseGet(Status::initial), state, Optional.ofNullable(allocation),
+ Optional.ofNullable(history).orElseGet(History::empty), type, Optional.ofNullable(reports).orElseGet(Reports::new),
+ Optional.ofNullable(modelName), Optional.ofNullable(reservedTo), Optional.ofNullable(switchHostname));
+ }
+ }
+
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java
index 3fdade27410..3cf5d77de69 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java
@@ -12,8 +12,6 @@ import com.yahoo.config.provision.DockerImage;
import com.yahoo.config.provision.Flavor;
import com.yahoo.config.provision.NodeFlavors;
import com.yahoo.config.provision.NodeType;
-import com.yahoo.config.provision.ProvisionLock;
-import com.yahoo.config.provision.TenantName;
import com.yahoo.config.provision.Zone;
import com.yahoo.config.provisioning.NodeRepositoryConfig;
import com.yahoo.transaction.Mutex;
@@ -388,18 +386,6 @@ public class NodeRepository extends AbstractComponent {
// ----------------- Node lifecycle -----------------------------------------------------------
- /** Creates a new node object, without adding it to the node repo. If no IP address is given, it will be resolved */
- public Node createNode(String openStackId, String hostname, IP.Config ipConfig, Optional<String> parentHostname,
- Flavor flavor, Optional<TenantName> reservedTo, NodeType type) {
- if (ipConfig.primary().isEmpty()) // TODO: Remove this. Only test code hits this path
- ipConfig = ipConfig.with(nameResolver.resolveAll(hostname));
- return Node.create(openStackId, ipConfig, hostname, parentHostname, Optional.empty(), flavor, reservedTo, type, Optional.empty());
- }
-
- public Node createNode(String openStackId, String hostname, Optional<String> parentHostname, Flavor flavor, NodeType type) {
- return createNode(openStackId, hostname, IP.Config.EMPTY, parentHostname, flavor, Optional.empty(), type);
- }
-
/** Adds a list of newly created docker container nodes to the node repository as <i>reserved</i> nodes */
public List<Node> addDockerNodes(LockedNodeList nodes) {
for (Node node : nodes) {
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeCandidate.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeCandidate.java
index 02086e2bace..f8231072a28 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeCandidate.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeCandidate.java
@@ -375,7 +375,7 @@ abstract class NodeCandidate implements Nodelike, Comparable<NodeCandidate> {
parentHostname().get(),
resources.with(parent.get().resources().diskSpeed())
.with(parent.get().resources().storageType()),
- NodeType.tenant);
+ NodeType.tenant).build();
return new ConcreteNodeCandidate(node, freeParentCapacity, parent, violatesSpares, exclusiveSwitch, isSurplus, isNew, isResizable);
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisionedHost.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisionedHost.java
index 298404a4cb4..a5fb2694f9e 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisionedHost.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisionedHost.java
@@ -8,6 +8,7 @@ import com.yahoo.config.provision.NodeType;
import com.yahoo.vespa.hosted.provision.Node;
import com.yahoo.vespa.hosted.provision.node.IP;
import com.yahoo.vespa.hosted.provision.node.OsVersion;
+import com.yahoo.vespa.hosted.provision.node.Status;
import java.util.Objects;
import java.util.Optional;
@@ -38,13 +39,14 @@ public class ProvisionedHost {
/** Generate {@link Node} instance representing the provisioned physical host */
public Node generateHost() {
- var node = Node.create(id, IP.Config.EMPTY, hostHostname, Optional.empty(), Optional.empty(), hostFlavor, Optional.empty(), NodeType.host, Optional.empty());
- return node.with(node.status().withOsVersion(OsVersion.EMPTY.withCurrent(Optional.of(osVersion))));
+ return Node.create(id, IP.Config.EMPTY, hostHostname, hostFlavor, NodeType.host)
+ .status(Status.initial().withOsVersion(OsVersion.EMPTY.withCurrent(Optional.of(osVersion))))
+ .build();
}
/** Generate {@link Node} instance representing the node running on this physical host */
public Node generateNode() {
- return Node.createDockerNode(Set.of(), nodeHostname, hostHostname, nodeResources, NodeType.tenant);
+ return Node.createDockerNode(Set.of(), nodeHostname, hostHostname, nodeResources, NodeType.tenant).build();
}
public String getId() {
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java
index 5d19271d2a7..59c31575b73 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java
@@ -24,7 +24,6 @@ import com.yahoo.slime.Cursor;
import com.yahoo.slime.Inspector;
import com.yahoo.slime.Slime;
import com.yahoo.slime.SlimeUtils;
-import com.yahoo.slime.Type;
import com.yahoo.transaction.Mutex;
import com.yahoo.vespa.hosted.provision.NoSuchNodeException;
import com.yahoo.vespa.hosted.provision.Node;
@@ -248,27 +247,21 @@ public class NodesV2ApiHandler extends LoggingRequestHandler {
}
private Node createNode(Inspector inspector) {
- Optional<String> parentHostname = optionalString(inspector.field("parentHostname"));
- Optional<String> modelName = optionalString(inspector.field("modelName"));
Set<String> ipAddresses = new HashSet<>();
inspector.field("ipAddresses").traverse((ArrayTraverser) (i, item) -> ipAddresses.add(item.asString()));
Set<String> ipAddressPool = new HashSet<>();
inspector.field("additionalIpAddresses").traverse((ArrayTraverser) (i, item) -> ipAddressPool.add(item.asString()));
- return Node.create(inspector.field("openStackId").asString(),
- new IP.Config(ipAddresses, ipAddressPool),
- inspector.field("hostname").asString(),
- parentHostname,
- modelName,
- flavorFromSlime(inspector),
- reservedToFromSlime(inspector.field("reservedTo")),
- nodeTypeFromSlime(inspector.field("type")),
- switchHostnameFromSlime(inspector.field("switchHostname")));
- }
-
- private Optional<String> switchHostnameFromSlime(Inspector field) {
- if (!field.valid()) return Optional.empty();
- return Optional.of(field.asString());
+ Node.Builder builder = Node.create(inspector.field("openStackId").asString(),
+ new IP.Config(ipAddresses, ipAddressPool),
+ inspector.field("hostname").asString(),
+ flavorFromSlime(inspector),
+ nodeTypeFromSlime(inspector.field("type")));
+ optionalString(inspector.field("parentHostname")).ifPresent(builder::parentHostname);
+ optionalString(inspector.field("modelName")).ifPresent(builder::modelName);
+ optionalString(inspector.field("reservedTo")).map(TenantName::from).ifPresent(builder::reservedTo);
+ optionalString(inspector.field("switchHostname")).ifPresent(builder::switchHostname);
+ return builder.build();
}
private Flavor flavorFromSlime(Inspector inspector) {
@@ -313,13 +306,6 @@ public class NodesV2ApiHandler extends LoggingRequestHandler {
return NodeSerializer.typeFrom(object.asString());
}
- private Optional<TenantName> reservedToFromSlime(Inspector object) {
- if (! object.valid()) return Optional.empty();
- if ( object.type() != Type.STRING)
- throw new IllegalArgumentException("Expected 'reservedTo' to be a string but is " + object);
- return Optional.of(TenantName.from(object.asString()));
- }
-
public static NodeFilter toNodeFilter(HttpRequest request) {
NodeFilter filter = NodeHostFilter.from(HostFilter.from(request.getProperty("hostname"),
request.getProperty("flavor"),
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java
index fed0ab6a8ee..f9bddc6f3f4 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java
@@ -83,65 +83,60 @@ public class MockNodeRepository extends NodeRepository {
List<Node> nodes = new ArrayList<>();
// Regular nodes
- nodes.add(createNode("node1", "host1.yahoo.com", ipConfig(1), Optional.empty(),
- new Flavor(new NodeResources(2, 8, 50, 1, fast, local)), Optional.empty(), NodeType.tenant));
- nodes.add(createNode("node2", "host2.yahoo.com", ipConfig(2), Optional.empty(),
- new Flavor(new NodeResources(2, 8, 50, 1, fast, local)), Optional.empty(), NodeType.tenant));
- nodes.add(createNode("node3", "host3.yahoo.com", ipConfig(3), Optional.empty(),
- new Flavor(new NodeResources(0.5, 48, 500, 1, fast, local)), Optional.empty(), NodeType.tenant));
- Node node4 = createNode("node4", "host4.yahoo.com", ipConfig(4), Optional.of("dockerhost1.yahoo.com"),
- new Flavor(new NodeResources(1, 4, 100, 1, fast, local)), Optional.empty(), NodeType.tenant);
- node4 = node4.with(node4.status()
- .withVespaVersion(new Version("6.41.0"))
- .withDockerImage(DockerImage.fromString("docker-registry.domain.tld:8080/dist/vespa:6.41.0")));
+ nodes.add(Node.create("node1", ipConfig(1), "host1.yahoo.com", resources(2, 8, 50, 1, fast, local), NodeType.tenant).build());
+ nodes.add(Node.create("node2", ipConfig(2), "host2.yahoo.com", resources(2, 8, 50, 1, fast, local), NodeType.tenant).build());
+ nodes.add(Node.create("node3", ipConfig(3), "host3.yahoo.com", resources(0.5, 48, 500, 1, fast, local), NodeType.tenant).build());
+ Node node4 = Node.create("node4", ipConfig(4), "host4.yahoo.com", resources(1, 4, 100, 1, fast, local), NodeType.tenant)
+ .parentHostname("dockerhost1.yahoo.com")
+ .status(Status.initial()
+ .withVespaVersion(new Version("6.41.0"))
+ .withDockerImage(DockerImage.fromString("docker-registry.domain.tld:8080/dist/vespa:6.41.0")))
+ .build();
nodes.add(node4);
- Node node5 = createNode("node5", "host5.yahoo.com", ipConfig(5), Optional.of("dockerhost2.yahoo.com"),
- new Flavor(new NodeResources(1, 8, 100, 1, slow, remote)), Optional.empty(), NodeType.tenant);
- nodes.add(node5.with(node5.status()
- .withVespaVersion(new Version("1.2.3"))
- .withDockerImage(DockerImage.fromString("docker-registry.domain.tld:8080/dist/vespa:1.2.3"))));
+ Node node5 = Node.create("node5", ipConfig(5), "host5.yahoo.com", resources(1, 8, 100, 1, slow, remote), NodeType.tenant)
+ .parentHostname("dockerhost2.yahoo.com")
+ .status(Status.initial()
+ .withVespaVersion(new Version("1.2.3"))
+ .withDockerImage(DockerImage.fromString("docker-registry.domain.tld:8080/dist/vespa:1.2.3")))
+ .build();
+ nodes.add(node5);
- nodes.add(createNode("node6", "host6.yahoo.com", ipConfig(6), Optional.empty(),
- new Flavor(new NodeResources(2, 8, 50, 1, fast, local)), Optional.empty(), NodeType.tenant));
- Node node7 = createNode("node7", "host7.yahoo.com", ipConfig(7), Optional.empty(),
- new Flavor(new NodeResources(2, 8, 50, 1, fast, local)), Optional.empty(), NodeType.tenant);
+ nodes.add(Node.create("node6", ipConfig(6), "host6.yahoo.com", resources(2, 8, 50, 1, fast, local), NodeType.tenant).build());
+ Node node7 = Node.create("node7", ipConfig(7), "host7.yahoo.com", resources(2, 8, 50, 1, fast, local), NodeType.tenant).build();
nodes.add(node7);
// 8, 9, 11 and 12 are added by web service calls
- Node node10 = createNode("node10", "host10.yahoo.com", ipConfig(10), Optional.of("parent1.yahoo.com"),
- new Flavor(new NodeResources(2, 8, 50, 1, fast, local)), Optional.empty(), NodeType.tenant);
- Status node10newStatus = node10.status();
- node10newStatus = node10newStatus
- .withVespaVersion(Version.fromString("5.104.142"))
- .withDockerImage(DockerImage.fromString("docker-registry.domain.tld:8080/dist/vespa:5.104.142"));
- node10 = node10.with(node10newStatus);
+ Node node10 = Node.create("node10", ipConfig(10), "host10.yahoo.com", resources(2, 8, 50, 1, fast, local), NodeType.tenant)
+ .parentHostname("parent1.yahoo.com")
+ .status(Status.initial()
+ .withVespaVersion(Version.fromString("5.104.142"))
+ .withDockerImage(DockerImage.fromString("docker-registry.domain.tld:8080/dist/vespa:5.104.142")))
+ .build();
nodes.add(node10);
- Node node55 = createNode("node55", "host55.yahoo.com", ipConfig(55), Optional.empty(),
- new Flavor(new NodeResources(2, 8, 50, 1, fast, local)), Optional.empty(), NodeType.tenant);
- nodes.add(node55.with(node55.status().withWantToRetire(true, true)));
+ Node node55 = Node.create("node55", ipConfig(55), "host55.yahoo.com", resources(2, 8, 50, 1, fast, local), NodeType.tenant)
+ .status(Status.initial().withWantToRetire(true, true)).build();
+ nodes.add(node55);
/* Setup docker hosts (two of these will be reserved for spares */
- nodes.add(createNode("dockerhost1", "dockerhost1.yahoo.com", ipConfig(100, 1, 3), Optional.empty(),
- flavors.getFlavorOrThrow("large"), Optional.empty(), NodeType.host));
- nodes.add(createNode("dockerhost2", "dockerhost2.yahoo.com", ipConfig(101, 1, 3), Optional.empty(),
- flavors.getFlavorOrThrow("large"), Optional.empty(), NodeType.host));
- nodes.add(createNode("dockerhost3", "dockerhost3.yahoo.com", ipConfig(102, 1, 3), Optional.empty(),
- flavors.getFlavorOrThrow("large"), Optional.empty(), NodeType.host));
- nodes.add(createNode("dockerhost4", "dockerhost4.yahoo.com", ipConfig(103, 1, 3), Optional.empty(),
- flavors.getFlavorOrThrow("large"), Optional.empty(), NodeType.host));
- nodes.add(createNode("dockerhost5", "dockerhost5.yahoo.com", ipConfig(104, 1, 3), Optional.empty(),
- flavors.getFlavorOrThrow("large"), Optional.empty(), NodeType.host));
- nodes.add(createNode("dockerhost6", "dockerhost6.yahoo.com", ipConfig(105, 1, 3), Optional.empty(),
- flavors.getFlavorOrThrow("large"), Optional.empty(), NodeType.host));
+ nodes.add(Node.create("dockerhost1", ipConfig(100, 1, 3), "dockerhost1.yahoo.com",
+ flavors.getFlavorOrThrow("large"), NodeType.host).build());
+ nodes.add(Node.create("dockerhost2", ipConfig(101, 1, 3), "dockerhost2.yahoo.com",
+ flavors.getFlavorOrThrow("large"), NodeType.host).build());
+ nodes.add(Node.create("dockerhost3", ipConfig(102, 1, 3), "dockerhost3.yahoo.com",
+ flavors.getFlavorOrThrow("large"), NodeType.host).build());
+ nodes.add(Node.create("dockerhost4", ipConfig(103, 1, 3), "dockerhost4.yahoo.com",
+ flavors.getFlavorOrThrow("large"), NodeType.host).build());
+ nodes.add(Node.create("dockerhost5", ipConfig(104, 1, 3), "dockerhost5.yahoo.com",
+ flavors.getFlavorOrThrow("large"), NodeType.host).build());
+ nodes.add(Node.create("dockerhost6", ipConfig(105, 1, 3), "dockerhost6.yahoo.com",
+ flavors.getFlavorOrThrow("large"), NodeType.host).build());
// Config servers
- nodes.add(createNode("cfg1", "cfg1.yahoo.com", ipConfig(201), Optional.empty(),
- flavors.getFlavorOrThrow("default"), Optional.empty(), NodeType.config));
- nodes.add(createNode("cfg2", "cfg2.yahoo.com", ipConfig(202), Optional.empty(),
- flavors.getFlavorOrThrow("default"), Optional.empty(), NodeType.config));
+ nodes.add(Node.create("cfg1", ipConfig(201), "cfg1.yahoo.com", flavors.getFlavorOrThrow("default"), NodeType.config).build());
+ nodes.add(Node.create("cfg2", ipConfig(202), "cfg2.yahoo.com", flavors.getFlavorOrThrow("default"), NodeType.config).build());
// Ready all nodes, except 7 and 55
nodes = addNodes(nodes, Agent.system);
@@ -186,10 +181,8 @@ public class MockNodeRepository extends NodeRepository {
activate(provisioner.prepare(app3, cluster3, Capacity.from(new ClusterResources(2, 1, new NodeResources(1, 4, 100, 1)), false, true), null), app3, provisioner);
List<Node> largeNodes = new ArrayList<>();
- largeNodes.add(createNode("node13", "host13.yahoo.com", ipConfig(13), Optional.empty(),
- new Flavor(new NodeResources(10, 48, 500, 1, fast, local)), Optional.empty(), NodeType.tenant));
- largeNodes.add(createNode("node14", "host14.yahoo.com", ipConfig(14), Optional.empty(),
- new Flavor(new NodeResources(10, 48, 500, 1, fast, local)), Optional.empty(), NodeType.tenant));
+ largeNodes.add(Node.create("node13", ipConfig(13), "host13.yahoo.com", resources(10, 48, 500, 1, fast, local), NodeType.tenant).build());
+ largeNodes.add(Node.create("node14", ipConfig(14), "host14.yahoo.com", resources(10, 48, 500, 1, fast, local), NodeType.tenant).build());
addNodes(largeNodes, Agent.system);
setReady(largeNodes, Agent.system, getClass().getSimpleName());
ApplicationId app4 = ApplicationId.from(TenantName.from("tenant4"), ApplicationName.from("application4"), InstanceName.from("instance4"));
@@ -240,4 +233,7 @@ public class MockNodeRepository extends NodeRepository {
return ipConfig(nodeIndex, 1, 0);
}
+ private static Flavor resources(double vcpu, double memoryGb, double diskGb, double bandwidthGbps, NodeResources.DiskSpeed diskSpeed, NodeResources.StorageType storageType) {
+ return new Flavor(new NodeResources(vcpu, memoryGb, diskGb, bandwidthGbps, diskSpeed, storageType));
+ }
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTester.java
index c966fc63ab9..f6ad119b80b 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTester.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTester.java
@@ -12,13 +12,14 @@ import com.yahoo.test.ManualClock;
import com.yahoo.vespa.curator.mock.MockCurator;
import com.yahoo.vespa.flags.InMemoryFlagSource;
import com.yahoo.vespa.hosted.provision.node.Agent;
+import com.yahoo.vespa.hosted.provision.node.IP;
import com.yahoo.vespa.hosted.provision.provisioning.EmptyProvisionServiceProvider;
import com.yahoo.vespa.hosted.provision.provisioning.FlavorConfigBuilder;
import com.yahoo.vespa.hosted.provision.testutils.MockNameResolver;
-import java.util.Collections;
import java.util.List;
import java.util.Optional;
+import java.util.Set;
/**
* @author bratseth
@@ -55,21 +56,21 @@ public class NodeRepositoryTester {
}
public Node addHost(String id, String hostname, String flavor, NodeType type) {
- Node node = nodeRepository.createNode(id, hostname, Optional.empty(),
- nodeFlavors.getFlavorOrThrow(flavor), type);
- return nodeRepository.addNodes(Collections.singletonList(node), Agent.system).get(0);
+ return addNode(id, hostname, null, nodeFlavors.getFlavorOrThrow(flavor), type);
}
public Node addNode(String id, String hostname, String parentHostname, String flavor, NodeType type) {
- Node node = nodeRepository.createNode(id, hostname, Optional.of(parentHostname),
- nodeFlavors.getFlavorOrThrow(flavor), type);
- return nodeRepository.addNodes(Collections.singletonList(node), Agent.system).get(0);
+ return addNode(id, hostname, parentHostname, nodeFlavors.getFlavorOrThrow(flavor), type);
}
public Node addNode(String id, String hostname, String parentHostname, NodeResources resources) {
- Node node = nodeRepository.createNode(id, hostname, Optional.of(parentHostname),
- new Flavor(resources), NodeType.tenant);
- return nodeRepository.addNodes(Collections.singletonList(node), Agent.system).get(0);
+ return addNode(id, hostname, parentHostname, new Flavor(resources), NodeType.tenant);
+ }
+
+ private Node addNode(String id, String hostname, String parentHostname, Flavor flavor, NodeType type) {
+ IP.Config ipConfig = new IP.Config(nodeRepository.nameResolver().resolveAll(hostname), Set.of());
+ Node node = Node.create(id, ipConfig, hostname, flavor, type).parentHostname(parentHostname).build();
+ return nodeRepository.addNodes(List.of(node), Agent.system).get(0);
}
/**
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityCheckerTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityCheckerTester.java
index 10626fcb7df..86507508e68 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityCheckerTester.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityCheckerTester.java
@@ -149,9 +149,8 @@ public class CapacityCheckerTester {
.collect(Collectors.toSet());
NodeResources nr = containingNodeResources(childResources, excessCapacity);
- Node node = nodeRepository.createNode(hostname, hostname,
- new IP.Config(Set.of("::"), availableIps), Optional.empty(),
- new Flavor(nr), Optional.empty(), NodeType.host);
+ Node node = Node.create(hostname, new IP.Config(Set.of("::"), availableIps), hostname,
+ new Flavor(nr), NodeType.host).build();
hosts.computeIfAbsent(tenantHostApp, (ignored) -> new ArrayList<>())
.add(node);
}
@@ -169,10 +168,8 @@ public class CapacityCheckerTester {
Set<String> availableIps = IntStream.range(2000, 2000 + ips)
.mapToObj(n -> String.format("%04X::%04X", hostId, n))
.collect(Collectors.toSet());
- Node node = nodeRepository.createNode(hostname,
- hostname,
- new IP.Config(Set.of("::" + (1000 + hostId)), availableIps), Optional.empty(),
- new Flavor(capacity), Optional.empty(), NodeType.host);
+ Node node = Node.create(hostname, new IP.Config(Set.of("::" + (1000 + hostId)), availableIps), hostname,
+ new Flavor(capacity), NodeType.host).build();
hosts.add(node);
}
return hosts;
@@ -284,9 +281,10 @@ public class CapacityCheckerTester {
nodeModel.fastDisk ? NodeResources.DiskSpeed.fast : NodeResources.DiskSpeed.slow);
Flavor f = new Flavor(nr);
- Node node = nodeRepository.createNode(nodeModel.id, nodeModel.hostname,
- new IP.Config(nodeModel.ipAddresses, nodeModel.additionalIpAddresses),
- nodeModel.parentHostname, f, Optional.empty(), nodeModel.type);
+ Node.Builder builder = Node.create(nodeModel.id, new IP.Config(nodeModel.ipAddresses, nodeModel.additionalIpAddresses),
+ nodeModel.hostname, f, nodeModel.type);
+ nodeModel.parentHostname.ifPresent(builder::parentHostname);
+ Node node = builder.build();
if (membership != null) {
return node.allocate(owner, membership, node.resources(), Instant.now());
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporterTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporterTest.java
index a7c04636662..a5cd922300c 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporterTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporterTest.java
@@ -190,20 +190,20 @@ public class MetricsReporterTest {
Set<String> ipAddressPool = Set.of("::2", "::3", "::4", "::5");
Node dockerHost = Node.create("openStackId1", new IP.Config(Set.of("::1"), ipAddressPool), "dockerHost",
- Optional.empty(), Optional.empty(), nodeFlavors.getFlavorOrThrow("host"), Optional.empty(), NodeType.host, Optional.empty());
+ nodeFlavors.getFlavorOrThrow("host"), NodeType.host).build();
nodeRepository.addNodes(List.of(dockerHost), Agent.system);
nodeRepository.dirtyRecursively("dockerHost", Agent.system, getClass().getSimpleName());
nodeRepository.setReady("dockerHost", Agent.system, getClass().getSimpleName());
Node container1 = Node.createDockerNode(Set.of("::2"), "container1",
- "dockerHost", new NodeResources(1, 3, 2, 1), NodeType.tenant);
+ "dockerHost", new NodeResources(1, 3, 2, 1), NodeType.tenant).build();
container1 = container1.with(allocation(Optional.of("app1"), container1).get());
try (Mutex lock = nodeRepository.lockUnallocated()) {
nodeRepository.addDockerNodes(new LockedNodeList(List.of(container1), lock));
}
Node container2 = Node.createDockerNode(Set.of("::3"), "container2",
- "dockerHost", new NodeResources(2, 4, 4, 1), NodeType.tenant);
+ "dockerHost", new NodeResources(2, 4, 4, 1), NodeType.tenant).build();
container2 = container2.with(allocation(Optional.of("app2"), container2).get());
try (Mutex lock = nodeRepository.lockUnallocated()) {
nodeRepository.addDockerNodes(new LockedNodeList(List.of(container2), lock));
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 824ebe40ea8..cd9296c8624 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
@@ -232,8 +232,13 @@ public class NodeFailTester {
private List<Node> createReadyNodes(int count, int startIndex, Optional<String> parentHostname, Flavor flavor, NodeType nodeType) {
List<Node> nodes = new ArrayList<>(count);
- for (int i = startIndex; i < startIndex + count; i++)
- nodes.add(nodeRepository.createNode("node" + i, "host" + i, IP.Config.EMPTY, parentHostname, flavor, Optional.empty(), nodeType));
+ for (int i = startIndex; i < startIndex + count; i++) {
+ String hostname = "host" + i;
+ IP.Config ipConfig = new IP.Config(nodeRepository.nameResolver().resolveAll(hostname), Set.of());
+ Node.Builder builder = Node.create("node" + i, ipConfig, hostname, flavor, nodeType);
+ parentHostname.ifPresent(builder::parentHostname);
+ nodes.add(builder.build());
+ }
nodes = nodeRepository.addNodes(nodes, Agent.system);
nodes = nodeRepository.setDirty(nodes, Agent.system, getClass().getSimpleName());
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/SpareCapacityMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/SpareCapacityMaintainerTest.java
index cd1b7fdc2ce..e276ea22ea2 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/SpareCapacityMaintainerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/SpareCapacityMaintainerTest.java
@@ -31,7 +31,6 @@ import java.time.Duration;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
-import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
@@ -272,13 +271,8 @@ public class SpareCapacityMaintainerTest {
private void addHosts(int count, NodeResources resources) {
List<Node> hosts = new ArrayList<>();
for (int i = 0; i < count; i++) {
- Node host = nodeRepository.createNode("host" + hostIndex,
- "host" + hostIndex + ".yahoo.com",
- ipConfig(hostIndex + nodeIndex, true),
- Optional.empty(),
- new Flavor(resources),
- Optional.empty(),
- NodeType.host);
+ Node host = Node.create("host" + hostIndex, ipConfig(hostIndex + nodeIndex, true),
+ "host" + hostIndex + ".yahoo.com", new Flavor(resources), NodeType.host).build();
hosts.add(host);
hostIndex++;
}
@@ -294,13 +288,9 @@ public class SpareCapacityMaintainerTest {
private void addNodes(int id, int count, NodeResources resources, int hostOffset) {
List<Node> nodes = new ArrayList<>();
for (int i = 0; i < count; i++) {
- Node node = nodeRepository.createNode("node" + nodeIndex,
- "node" + nodeIndex + ".yahoo.com",
- ipConfig(hostIndex + nodeIndex, false),
- Optional.of("host" + ( hostOffset + i) + ".yahoo.com"),
- new Flavor(resources),
- Optional.empty(),
- NodeType.tenant);
+ Node node = Node.create("node" + nodeIndex, ipConfig(hostIndex + nodeIndex, false),
+ "node" + nodeIndex + ".yahoo.com", new Flavor(resources), NodeType.tenant)
+ .parentHostname("host" + ( hostOffset + i) + ".yahoo.com").build();
nodes.add(node);
nodeIndex++;
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/node/IPTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/node/IPTest.java
index bf83b074387..a209ea206d3 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/node/IPTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/node/IPTest.java
@@ -183,8 +183,7 @@ public class IPTest {
private static Node createNode(Set<String> ipAddresses) {
return Node.create("id1", new IP.Config(Set.of("127.0.0.1"), ipAddresses),
- "host1", Optional.empty(), Optional.empty(), nodeFlavors.getFlavorOrThrow("default"),
- Optional.empty(), NodeType.host, Optional.empty());
+ "host1", nodeFlavors.getFlavorOrThrow("default"), NodeType.host).build();
}
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializerTest.java
index 1c854068b27..4ee41110aac 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializerTest.java
@@ -229,7 +229,9 @@ public class NodeSerializerTest {
@Test
public void serialize_parentHostname() {
final String parentHostname = "parent.yahoo.com";
- Node node = Node.create("myId", new IP.Config(Set.of("127.0.0.1"), Set.of()), "myHostname", Optional.of(parentHostname), Optional.empty(), nodeFlavors.getFlavorOrThrow("default"), Optional.empty(), NodeType.tenant, Optional.empty());
+ Node node = Node.create("myId", new IP.Config(Set.of("127.0.0.1"), Set.of()), "myHostname", nodeFlavors.getFlavorOrThrow("default"), NodeType.tenant)
+ .parentHostname(parentHostname)
+ .build();
Node deserializedNode = nodeSerializer.fromJson(State.provisioned, nodeSerializer.toJson(node));
assertEquals(parentHostname, deserializedNode.parentHostname().get());
@@ -447,11 +449,8 @@ public class NodeSerializerTest {
return Node.create("myId",
new IP.Config(Set.of("127.0.0.1"), Set.of()),
"myHostname",
- Optional.empty(),
- Optional.empty(),
nodeFlavors.getFlavorOrThrow("default"),
- Optional.empty(), NodeType.tenant,
- Optional.empty());
+ NodeType.tenant).build();
}
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerAllocationTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerAllocationTest.java
index 1517a9c1993..8edc836a090 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerAllocationTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerAllocationTest.java
@@ -510,8 +510,7 @@ public class DynamicDockerAllocationTest {
private void addAndAssignNode(ApplicationId id, String hostname, String parentHostname, ClusterSpec clusterSpec, NodeResources flavor, int index, ProvisioningTester tester) {
Node node1a = Node.create("open1", new IP.Config(Set.of("127.0.233." + index), Set.of()), hostname,
- Optional.of(parentHostname), Optional.empty(), new Flavor(flavor), Optional.empty(), NodeType.tenant, Optional.empty()
- );
+ new Flavor(flavor), NodeType.tenant).parentHostname(parentHostname).build();
ClusterMembership clusterMembership1 = ClusterMembership.from(
clusterSpec.with(Optional.of(ClusterSpec.Group.from(0))), index); // Need to add group here so that group is serialized in node allocation
Node node1aAllocation = node1a.allocate(id, clusterMembership1, node1a.resources(), Instant.now());
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/HostCapacityTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/HostCapacityTest.java
index f831f2d501b..4891387e9e8 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/HostCapacityTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/HostCapacityTest.java
@@ -14,7 +14,6 @@ import org.junit.Test;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
-import java.util.Optional;
import java.util.Set;
import static org.junit.Assert.assertEquals;
@@ -44,20 +43,20 @@ public class HostCapacityTest {
NodeFlavors nodeFlavors = FlavorConfigBuilder.createDummies("host", "docker", "docker2");
// Create three docker hosts
- host1 = Node.create("host1", new IP.Config(Set.of("::1"), generateIPs(2, 4)), "host1", Optional.empty(), Optional.empty(), nodeFlavors.getFlavorOrThrow("host"), Optional.empty(), NodeType.host, Optional.empty());
- host2 = Node.create("host2", new IP.Config(Set.of("::11"), generateIPs(12, 3)), "host2", Optional.empty(), Optional.empty(), nodeFlavors.getFlavorOrThrow("host"), Optional.empty(), NodeType.host, Optional.empty());
- host3 = Node.create("host3", new IP.Config(Set.of("::21"), generateIPs(22, 1)), "host3", Optional.empty(), Optional.empty(), nodeFlavors.getFlavorOrThrow("host"), Optional.empty(), NodeType.host, Optional.empty());
+ host1 = Node.create("host1", new IP.Config(Set.of("::1"), generateIPs(2, 4)), "host1", nodeFlavors.getFlavorOrThrow("host"), NodeType.host).build();
+ host2 = Node.create("host2", new IP.Config(Set.of("::11"), generateIPs(12, 3)), "host2", nodeFlavors.getFlavorOrThrow("host"), NodeType.host).build();
+ host3 = Node.create("host3", new IP.Config(Set.of("::21"), generateIPs(22, 1)), "host3", nodeFlavors.getFlavorOrThrow("host"), NodeType.host).build();
// Add two containers to host1
- var nodeA = Node.createDockerNode(Set.of("::2"), "nodeA", "host1", resources1, NodeType.tenant);
- var nodeB = Node.createDockerNode(Set.of("::3"), "nodeB", "host1", resources1, NodeType.tenant);
+ var nodeA = Node.createDockerNode(Set.of("::2"), "nodeA", "host1", resources1, NodeType.tenant).build();
+ var nodeB = Node.createDockerNode(Set.of("::3"), "nodeB", "host1", resources1, NodeType.tenant).build();
// Add two containers to host 2 (same as host 1)
- var nodeC = Node.createDockerNode(Set.of("::12"), "nodeC", "host2", resources1, NodeType.tenant);
- var nodeD = Node.createDockerNode(Set.of("::13"), "nodeD", "host2", resources1, NodeType.tenant);
+ var nodeC = Node.createDockerNode(Set.of("::12"), "nodeC", "host2", resources1, NodeType.tenant).build();
+ var nodeD = Node.createDockerNode(Set.of("::13"), "nodeD", "host2", resources1, NodeType.tenant).build();
// Add a larger container to host3
- var nodeE = Node.createDockerNode(Set.of("::22"), "nodeE", "host3", resources2, NodeType.tenant);
+ var nodeE = Node.createDockerNode(Set.of("::22"), "nodeE", "host3", resources2, NodeType.tenant).build();
// init docker host capacity
nodes = new ArrayList<>(List.of(host1, host2, host3, nodeA, nodeB, nodeC, nodeD, nodeE));
@@ -74,7 +73,7 @@ public class HostCapacityTest {
assertFalse(capacity.hasCapacity(host3, resources2)); // No ip available
// Add a new node to host1 to deplete the memory resource
- Node nodeF = Node.createDockerNode(Set.of("::6"), "nodeF", "host1", resources1, NodeType.tenant);
+ Node nodeF = Node.createDockerNode(Set.of("::6"), "nodeF", "host1", resources1, NodeType.tenant).build();
nodes.add(nodeF);
capacity = new HostCapacity(new LockedNodeList(nodes, () -> {}), hostResourcesCalculator);
assertFalse(capacity.hasCapacity(host1, resources1));
@@ -111,15 +110,15 @@ public class HostCapacityTest {
// 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"), Optional.empty(), NodeType.devhost, Optional.empty());
+ var devHost = Node.create("devhost", new IP.Config(Set.of("::1"), generateIPs(2, 10)), "devhost", nodeFlavors.getFlavorOrThrow("devhost"), NodeType.devhost).build();
- var cfg = Node.createDockerNode(Set.of("::2"), "cfg", "devhost", resources1, NodeType.config);
+ var cfg = Node.createDockerNode(Set.of("::2"), "cfg", "devhost", resources1, NodeType.config).build();
var nodes = new ArrayList<>(List.of(cfg));
var capacity = new HostCapacity(new LockedNodeList(nodes, () -> {}), hostResourcesCalculator);
assertTrue(capacity.hasCapacity(devHost, resources1));
- var container1 = Node.createDockerNode(Set.of("::3"), "container1", "devhost", resources1, NodeType.tenant);
+ var container1 = Node.createDockerNode(Set.of("::3"), "container1", "devhost", resources1, NodeType.tenant).build();
nodes = new ArrayList<>(List.of(cfg, container1));
capacity = new HostCapacity(new LockedNodeList(nodes, () -> {}), hostResourcesCalculator);
assertFalse(capacity.hasCapacity(devHost, resources1));
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java
index 8d972cc8f40..2ec03db7e9d 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java
@@ -430,13 +430,9 @@ public class ProvisioningTester {
nameResolver.addRecord(String.format("node-%d-of-%s", poolIp, hostname), ipv4Addr);
}
}
- nodes.add(nodeRepository.createNode(hostname,
- hostname,
- new IP.Config(hostIps, ipAddressPool),
- Optional.empty(),
- flavor,
- reservedTo,
- type));
+ Node.Builder builder = Node.create(hostname, new IP.Config(hostIps, ipAddressPool), hostname, flavor, type);
+ reservedTo.ifPresent(builder::reservedTo);
+ nodes.add(builder.build());
}
nodes = nodeRepository.addNodes(nodes, Agent.system);
return nodes;
@@ -451,13 +447,8 @@ public class ProvisioningTester {
String ipv4 = "127.0.1." + i;
nameResolver.addRecord(hostname, ipv4);
- Node node = nodeRepository.createNode(hostname,
- hostname,
- new IP.Config(Set.of(ipv4), Set.of()),
- Optional.empty(),
- nodeFlavors.getFlavorOrThrow(flavor),
- Optional.empty(),
- NodeType.config);
+ Node node = Node.create(hostname, new IP.Config(Set.of(ipv4), Set.of()), hostname,
+ nodeFlavors.getFlavorOrThrow(flavor), NodeType.config).build();
nodes.add(node);
}
@@ -522,8 +513,11 @@ public class ProvisioningTester {
List<Node> nodes = new ArrayList<>(count);
for (int i = startIndex; i < count + startIndex; i++) {
String hostname = nodeNamer.apply(i);
- nodes.add(nodeRepository.createNode("node-id", hostname, IP.Config.EMPTY, parentHostname,
- new Flavor(resources), Optional.empty(), NodeType.tenant));
+ IP.Config ipConfig = new IP.Config(nodeRepository.nameResolver().resolveAll(hostname), Set.of());
+
+ Node.Builder builder = Node.create("node-id", ipConfig, hostname, new Flavor(resources), NodeType.tenant);
+ parentHostname.ifPresent(builder::parentHostname);
+ nodes.add(builder.build());
}
nodes = nodeRepository.addNodes(nodes, Agent.system);
nodes = nodeRepository.setDirty(nodes, Agent.system, getClass().getSimpleName());