diff options
author | Harald Musum <musum@verizonmedia.com> | 2019-08-22 06:26:46 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-08-22 06:26:46 +0200 |
commit | 3b9047f5113146ff578ac4eea19d1ec5796fcac8 (patch) | |
tree | dbc1eea0119b174945a31c79345503e354e38aaf | |
parent | 55e093baadde8f245dc06e5c98fd0b85e6577cd5 (diff) | |
parent | 55bc1a0dbda018c69337f33436d93124aca24e52 (diff) |
Merge pull request #10360 from vespa-engine/freva/add-host-resources
Add flavor overrides
22 files changed, 208 insertions, 113 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 f496b177bdd..92ba8f0edfb 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 @@ -1,8 +1,6 @@ // Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.athenz.instanceproviderservice.identitydocument; - -import com.google.common.collect.ImmutableSet; import com.yahoo.component.Version; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.ApplicationName; @@ -24,12 +22,14 @@ import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.hosted.provision.NodeRepository; import com.yahoo.vespa.hosted.provision.node.Allocation; import com.yahoo.vespa.hosted.provision.node.Generation; +import com.yahoo.vespa.hosted.provision.node.IP; import com.yahoo.vespa.hosted.provision.testutils.MockNodeFlavors; import org.hamcrest.Matchers; import org.junit.Test; import java.util.HashSet; import java.util.Optional; +import java.util.Set; import static com.yahoo.vespa.hosted.athenz.instanceproviderservice.TestUtils.getAthenzProviderConfig; import static org.junit.Assert.assertEquals; @@ -58,17 +58,15 @@ public class IdentityDocumentGeneratorTest { Generation.initial(), false); Node parentNode = Node.create("ostkid", - ImmutableSet.of("127.0.0.1"), - new HashSet<>(), + new IP.Config(Set.of("127.0.0.1"), Set.of()), parentHostname, Optional.empty(), Optional.empty(), new MockNodeFlavors().getFlavorOrThrow("default"), NodeType.host); - Node containerNode = Node.createDockerNode(ImmutableSet.of("::1"), - new HashSet<>(), + Node containerNode = Node.createDockerNode(Set.of("::1"), containerHostname, - Optional.of(parentHostname), + parentHostname, new MockNodeFlavors().getFlavorOrThrow("default").resources(), NodeType.tenant) .with(allocation); 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 c1962eac97e..d5787516254 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 @@ -2,7 +2,6 @@ package com.yahoo.vespa.hosted.athenz.instanceproviderservice.instanceconfirmation; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSet; import com.yahoo.component.Version; import com.yahoo.config.model.api.ApplicationInfo; import com.yahoo.config.model.api.HostInfo; @@ -22,6 +21,7 @@ import com.yahoo.vespa.athenz.identityprovider.client.IdentityDocumentSigner; import com.yahoo.vespa.hosted.athenz.instanceproviderservice.KeyProvider; import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.hosted.provision.NodeRepository; +import com.yahoo.vespa.hosted.provision.node.IP; import com.yahoo.vespa.hosted.provision.testutils.MockNodeFlavors; import org.junit.Test; @@ -32,6 +32,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.IntStream; @@ -219,7 +220,7 @@ 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, ImmutableSet.of("::1" + i, "::2" + i, "::3" + i), Collections.emptySet(), "foo" + i, Optional.empty(), Optional.empty(), flavors.getFlavorOrThrow("default"), NodeType.tenant); + 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"), NodeType.tenant); nodeList.add(node); } return nodeList; diff --git a/config-provisioning/abi-spec.json b/config-provisioning/abi-spec.json index 4bf8a8b7152..ae34a75f3f4 100644 --- a/config-provisioning/abi-spec.json +++ b/config-provisioning/abi-spec.json @@ -389,11 +389,13 @@ "methods": [ "public void <init>(com.yahoo.config.provisioning.FlavorsConfig$Flavor)", "public void <init>(com.yahoo.config.provision.NodeResources)", + "public com.yahoo.config.provision.Flavor withFlavorOverrides(com.yahoo.config.provision.host.FlavorOverrides)", "public java.lang.String name()", "public int cost()", "public boolean isStock()", "public boolean isConfigured()", "public com.yahoo.config.provision.NodeResources resources()", + "public java.util.Optional flavorOverrides()", "public double getMinMainMemoryAvailableGb()", "public double getMinDiskAvailableGb()", "public boolean hasFastDisk()", diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/Flavor.java b/config-provisioning/src/main/java/com/yahoo/config/provision/Flavor.java index bf8e75ebebc..c2b2fc2cb20 100644 --- a/config-provisioning/src/main/java/com/yahoo/config/provision/Flavor.java +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/Flavor.java @@ -1,11 +1,13 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.config.provision; +import com.yahoo.config.provision.host.FlavorOverrides; import com.yahoo.config.provisioning.FlavorsConfig; import java.util.Collections; import java.util.List; import java.util.Objects; +import java.util.Optional; /** * A host or node flavor. @@ -16,35 +18,59 @@ import java.util.Objects; */ public class Flavor { - private boolean configured; + private final boolean configured; private final String name; private final int cost; private final Type type; /** The hardware resources of this flavor */ - private NodeResources resources; + private final NodeResources resources; + + private final Optional<FlavorOverrides> flavorOverrides; /** Creates a *host* flavor from configuration */ public Flavor(FlavorsConfig.Flavor flavorConfig) { - this.configured = true; - this.name = flavorConfig.name(); - this.cost = flavorConfig.cost(); - this.type = Type.valueOf(flavorConfig.environment()); - this.resources = new NodeResources(flavorConfig.minCpuCores(), - flavorConfig.minMainMemoryAvailableGb(), - flavorConfig.minDiskAvailableGb(), - flavorConfig.bandwidth() / 1000, - flavorConfig.fastDisk() ? NodeResources.DiskSpeed.fast : NodeResources.DiskSpeed.slow); + this( + flavorConfig.name(), + new NodeResources(flavorConfig.minCpuCores(), + flavorConfig.minMainMemoryAvailableGb(), + flavorConfig.minDiskAvailableGb(), + flavorConfig.bandwidth() / 1000, + flavorConfig.fastDisk() ? NodeResources.DiskSpeed.fast : NodeResources.DiskSpeed.slow), + Optional.empty(), + Type.valueOf(flavorConfig.environment()), + true, + flavorConfig.cost()); } /** Creates a *node* flavor from a node resources spec */ public Flavor(NodeResources resources) { - Objects.requireNonNull(resources, "Resources cannot be null"); - this.configured = false; - this.name = resources.toString(); - this.cost = 0; - this.type = Type.DOCKER_CONTAINER; - this.resources = resources; + this(resources.toString(), resources, Optional.empty(), Type.DOCKER_CONTAINER, false, 0); + } + + private Flavor(String name, NodeResources resources, Optional<FlavorOverrides> flavorOverrides, Type type, boolean configured, int cost) { + this.name = Objects.requireNonNull(name, "Name cannot be null"); + this.resources = Objects.requireNonNull(resources, "Resources cannot be null"); + this.flavorOverrides = Objects.requireNonNull(flavorOverrides, "Flavor overrides cannot be null"); + this.type = Objects.requireNonNull(type, "Type cannot be null"); + this.configured = configured; + this.cost = cost; + } + + public Flavor withFlavorOverrides(FlavorOverrides flavorOverrides) { + if (type == Type.DOCKER_CONTAINER) + throw new IllegalArgumentException("Cannot override flavor for docker containers"); + + if (!configured) + throw new IllegalArgumentException("Cannot override non-configured flavor"); + + NodeResources newResources = new NodeResources( + resources.vcpu(), + resources.memoryGb(), + flavorOverrides.diskGb().orElseGet(resources::diskGb), + resources.bandwidthGbps(), + resources.diskSpeed()); + return new Flavor(name, newResources, Optional.of(flavorOverrides), type, true, cost); } /** Returns the unique identity of this flavor if it is configured, or the resource spec string otherwise */ @@ -66,6 +92,10 @@ public class Flavor { public NodeResources resources() { return resources; } + public Optional<FlavorOverrides> flavorOverrides() { + return flavorOverrides; + } + public double getMinMainMemoryAvailableGb() { return resources.memoryGb(); } public double getMinDiskAvailableGb() { return resources.diskGb(); } @@ -103,7 +133,7 @@ public class Flavor { public void freeze() {} @Override - public int hashCode() { return name.hashCode(); } + public int hashCode() { return Objects.hash(name, flavorOverrides); } @Override public boolean equals(Object o) { @@ -111,7 +141,8 @@ public class Flavor { if ( ! (o instanceof Flavor)) return false; Flavor other = (Flavor)o; if (configured) - return other.name.equals(this.name); + return Objects.equals(this.name, other.name) && + Objects.equals(this.flavorOverrides, other.flavorOverrides); else return this.resources.equals(other.resources); } @@ -119,7 +150,7 @@ public class Flavor { @Override public String toString() { if (isConfigured()) - return "flavor '" + name + "'"; + return "flavor '" + name + "'" + flavorOverrides.map(o -> " with overrides: " + o).orElse(""); else return name; } diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/host/FlavorOverrides.java b/config-provisioning/src/main/java/com/yahoo/config/provision/host/FlavorOverrides.java new file mode 100644 index 00000000000..8446c35cb0e --- /dev/null +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/host/FlavorOverrides.java @@ -0,0 +1,47 @@ +// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.config.provision.host; + +import java.util.Objects; +import java.util.Optional; + +/** + * Overrides fields in a {@link com.yahoo.config.provision.Flavor}, e.g. when a flavor is not + * tied to a specific disk. + * + * @author freva + */ +public class FlavorOverrides { + + private final Optional<Double> diskGb; + + private FlavorOverrides(Optional<Double> diskGb) { + this.diskGb = diskGb; + } + + public Optional<Double> diskGb() { + return diskGb; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + FlavorOverrides that = (FlavorOverrides) o; + return diskGb.equals(that.diskGb); + } + + @Override + public int hashCode() { + return Objects.hash(diskGb); + } + + @Override + public String toString() { + return "[" + diskGb.map(d -> "disk " + d + " Gb").orElse("") + "]"; + } + + public static FlavorOverrides ofDisk(double diskGb) { + return new FlavorOverrides(Optional.of(diskGb)); + } + +} diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/host/package-info.java b/config-provisioning/src/main/java/com/yahoo/config/provision/host/package-info.java new file mode 100644 index 00000000000..656096f865a --- /dev/null +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/host/package-info.java @@ -0,0 +1,5 @@ +// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +@ExportPackage +package com.yahoo.config.provision.host; + +import com.yahoo.osgi.annotation.ExportPackage; 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 d83dea7007b..bdcb96c1861 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 @@ -46,15 +46,15 @@ public final class Node { /** The current allocation of this node, if any */ private final Optional<Allocation> allocation; - /** Temporary method until we can merge it with the other create method */ - public static Node createDockerNode(Set<String> ipAddresses, Set<String> ipAddressPool, String hostname, Optional<String> parentHostname, NodeResources resources, NodeType type) { - return new Node("fake-" + hostname, new IP.Config(ipAddresses, ipAddressPool), hostname, parentHostname, new Flavor(resources), Status.initial(), State.reserved, + /** 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()); } /** Creates a node in the initial state (provisioned) */ - public static Node create(String openStackId, Set<String> ipAddresses, Set<String> ipAddressPool, String hostname, Optional<String> parentHostname, Optional<String> modelName, Flavor flavor, NodeType type) { - return new Node(openStackId, new IP.Config(ipAddresses, ipAddressPool), hostname, parentHostname, flavor, Status.initial(), State.provisioned, + public static Node create(String openStackId, IP.Config ipConfig, String hostname, Optional<String> parentHostname, Optional<String> modelName, Flavor flavor, NodeType type) { + return new Node(openStackId, ipConfig, hostname, parentHostname, flavor, Status.initial(), State.provisioned, Optional.empty(), History.empty(), type, new Reports(), modelName); } 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 9b78f558a7a..fd7397168d5 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 @@ -299,16 +299,16 @@ public class NodeRepository extends AbstractComponent { /** 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, - Optional<String> modelName, Flavor flavor, NodeType type) { + Flavor flavor, NodeType type) { if (ipConfig.primary().isEmpty()) { // TODO: Remove this. Only test code hits this path ipConfig = ipConfig.with(nameResolver.getAllByNameOrThrow(hostname)); } - return Node.create(openStackId, ipConfig.primary(), ipConfig.pool().asSet(), hostname, parentHostname, modelName, flavor, type); + return Node.create(openStackId, ipConfig, hostname, parentHostname, Optional.empty(), flavor, type); } public Node createNode(String openStackId, String hostname, Optional<String> parentHostname, Flavor flavor, NodeType type) { - return createNode(openStackId, hostname, IP.Config.EMPTY, parentHostname, Optional.empty(), flavor, type); + return createNode(openStackId, hostname, IP.Config.EMPTY, parentHostname, flavor, type); } /** Adds a list of newly created docker container nodes to the node repository as <i>reserved</i> nodes */ diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java index 4f43b53c0e7..0346db3a4b7 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java @@ -13,6 +13,7 @@ import com.yahoo.config.provision.NodeFlavors; import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.NodeType; import com.yahoo.config.provision.TenantName; +import com.yahoo.config.provision.host.FlavorOverrides; import com.yahoo.config.provision.serialization.NetworkPortsSerializer; import com.yahoo.slime.ArrayTraverser; import com.yahoo.slime.Cursor; @@ -153,6 +154,10 @@ public class NodeSerializer { private void toSlime(Flavor flavor, Cursor object) { if (flavor.isConfigured()) { object.setString(flavorKey, flavor.name()); + if (flavor.flavorOverrides().isPresent()) { + Cursor resourcesObject = object.setObject(resourcesKey); + flavor.flavorOverrides().get().diskGb().ifPresent(diskGb -> resourcesObject.setDouble(diskKey, diskGb)); + } } else { NodeResources resources = flavor.resources(); @@ -229,12 +234,14 @@ public class NodeSerializer { } private Flavor flavorFromSlime(Inspector object) { + Inspector resources = object.field(resourcesKey); + if (object.field(flavorKey).valid()) { - return flavors.getFlavorOrThrow(object.field(flavorKey).asString()); + Flavor flavor = flavors.getFlavorOrThrow(object.field(flavorKey).asString()); + if (!resources.valid()) return flavor; + return flavor.withFlavorOverrides(FlavorOverrides.ofDisk(resources.field(diskKey).asDouble())); } else { - Inspector resources = object.field(resourcesKey); - // TODO: Simplify Sept. 2019 double bandwidth = Optional.of(resources.field(bandwidthKey)) .filter(Inspector::valid) 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 f6554b2dede..5e2cfab3258 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 @@ -3,7 +3,6 @@ package com.yahoo.vespa.hosted.provision.provisioning; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.ClusterSpec; -import com.yahoo.config.provision.Flavor; import com.yahoo.config.provision.NodeFlavors; import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.NodeType; @@ -169,9 +168,8 @@ class NodePrioritizer { } Node newNode = Node.createDockerNode(allocation.get().addresses(), - Set.of(), allocation.get().hostname(), - Optional.of(host.hostname()), + host.hostname(), resources(requestedNodes).withDiskSpeed(host.flavor().resources().diskSpeed()), NodeType.tenant); PrioritizableNode nodePri = toNodePriority(newNode, false, true); 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 c2b56c757fa..451ab089a8d 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 @@ -5,6 +5,7 @@ import com.yahoo.config.provision.Flavor; import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.NodeType; import com.yahoo.vespa.hosted.provision.Node; +import com.yahoo.vespa.hosted.provision.node.IP; import java.util.Objects; import java.util.Optional; @@ -33,12 +34,12 @@ public class ProvisionedHost { /** Generate {@link Node} instance representing the provisioned physical host */ public Node generateHost() { - return Node.create(id, Set.of(), Set.of(), hostHostname, Optional.empty(), Optional.empty(), hostFlavor, NodeType.host); + return Node.create(id, IP.Config.EMPTY, hostHostname, Optional.empty(), Optional.empty(), hostFlavor, NodeType.host); } /** Generate {@link Node} instance representing the node running on this physical host */ public Node generateNode() { - return Node.createDockerNode(Set.of(), Set.of(), nodeHostname, Optional.of(hostHostname), nodeResources, NodeType.tenant); + return Node.createDockerNode(Set.of(), nodeHostname, hostHostname, nodeResources, NodeType.tenant); } public String getId() { diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesApiHandler.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesApiHandler.java index b2f0998189d..473d9362105 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesApiHandler.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesApiHandler.java @@ -219,10 +219,10 @@ public class NodesApiHandler extends LoggingRequestHandler { Set<String> ipAddressPool = new HashSet<>(); inspector.field("additionalIpAddresses").traverse((ArrayTraverser) (i, item) -> ipAddressPool.add(item.asString())); - return nodeRepository.createNode( + return Node.create( inspector.field("openStackId").asString(), - inspector.field("hostname").asString(), new IP.Config(ipAddresses, ipAddressPool), + inspector.field("hostname").asString(), parentHostname, modelName, nodeFlavors.getFlavorOrThrow(inspector.field("flavor").asString()), 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 2ee276e932b..99709880cbe 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 @@ -64,34 +64,34 @@ public class MockNodeRepository extends NodeRepository { List<Node> nodes = new ArrayList<>(); // Regular nodes - nodes.add(createNode("node1", "host1.yahoo.com", ipConfig(1), Optional.empty(), Optional.empty(), + nodes.add(createNode("node1", "host1.yahoo.com", ipConfig(1), Optional.empty(), new Flavor(new NodeResources(2, 8, 50, 1)), NodeType.tenant)); - nodes.add(createNode("node2", "host2.yahoo.com", ipConfig(2), Optional.empty(), Optional.empty(), + nodes.add(createNode("node2", "host2.yahoo.com", ipConfig(2), Optional.empty(), new Flavor(new NodeResources(2, 8, 50, 1)), NodeType.tenant)); - nodes.add(createNode("node3", "host3.yahoo.com", ipConfig(3), Optional.empty(), Optional.empty(), + nodes.add(createNode("node3", "host3.yahoo.com", ipConfig(3), Optional.empty(), new Flavor(new NodeResources(0.5, 48, 500, 1)), NodeType.tenant)); - Node node4 = createNode("node4", "host4.yahoo.com", ipConfig(4), Optional.of("dockerhost1.yahoo.com"), Optional.empty(), + Node node4 = createNode("node4", "host4.yahoo.com", ipConfig(4), Optional.of("dockerhost1.yahoo.com"), new Flavor(new NodeResources(1, 1, 100, 1)), 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(node4); - Node node5 = createNode("node5", "host5.yahoo.com", ipConfig(5), Optional.of("dockerhost2.yahoo.com"), Optional.empty(), + Node node5 = createNode("node5", "host5.yahoo.com", ipConfig(5), Optional.of("dockerhost2.yahoo.com"), new Flavor(new NodeResources(1, 1, 100, 1)), 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")))); - nodes.add(createNode("node6", "host6.yahoo.com", ipConfig(6), Optional.empty(), Optional.empty(), + nodes.add(createNode("node6", "host6.yahoo.com", ipConfig(6), Optional.empty(), new Flavor(new NodeResources(2, 8, 50, 1)), NodeType.tenant)); - Node node7 = createNode("node7", "host7.yahoo.com", ipConfig(7), Optional.empty(), Optional.empty(), + Node node7 = createNode("node7", "host7.yahoo.com", ipConfig(7), Optional.empty(), new Flavor(new NodeResources(2, 8, 50, 1)), NodeType.tenant); 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"), Optional.empty(), + Node node10 = createNode("node10", "host10.yahoo.com", ipConfig(10), Optional.of("parent1.yahoo.com"), new Flavor(new NodeResources(2, 8, 50, 1)), NodeType.tenant); Status node10newStatus = node10.status(); node10newStatus = node10newStatus @@ -100,26 +100,26 @@ public class MockNodeRepository extends NodeRepository { node10 = node10.with(node10newStatus); nodes.add(node10); - Node node55 = createNode("node55", "host55.yahoo.com", ipConfig(55), Optional.empty(), Optional.empty(), + Node node55 = createNode("node55", "host55.yahoo.com", ipConfig(55), Optional.empty(), new Flavor(new NodeResources(2, 8, 50, 1)), NodeType.tenant); nodes.add(node55.with(node55.status().withWantToRetire(true).withWantToDeprovision(true))); /* Setup docker hosts (two of these will be reserved for spares */ - nodes.add(createNode("dockerhost1", "dockerhost1.yahoo.com", ipConfig(100, 1, 3), Optional.empty(), Optional.empty(), + nodes.add(createNode("dockerhost1", "dockerhost1.yahoo.com", ipConfig(100, 1, 3), Optional.empty(), flavors.getFlavorOrThrow("large"), NodeType.host)); - nodes.add(createNode("dockerhost2", "dockerhost2.yahoo.com", ipConfig(101, 1, 3), Optional.empty(), Optional.empty(), + nodes.add(createNode("dockerhost2", "dockerhost2.yahoo.com", ipConfig(101, 1, 3), Optional.empty(), flavors.getFlavorOrThrow("large"), NodeType.host)); - nodes.add(createNode("dockerhost3", "dockerhost3.yahoo.com", ipConfig(102, 1, 3), Optional.empty(), Optional.empty(), + nodes.add(createNode("dockerhost3", "dockerhost3.yahoo.com", ipConfig(102, 1, 3), Optional.empty(), flavors.getFlavorOrThrow("large"), NodeType.host)); - nodes.add(createNode("dockerhost4", "dockerhost4.yahoo.com", ipConfig(103, 1, 3), Optional.empty(), Optional.empty(), + nodes.add(createNode("dockerhost4", "dockerhost4.yahoo.com", ipConfig(103, 1, 3), Optional.empty(), flavors.getFlavorOrThrow("large"), NodeType.host)); - nodes.add(createNode("dockerhost5", "dockerhost5.yahoo.com", ipConfig(104, 1, 3), Optional.empty(), Optional.empty(), + nodes.add(createNode("dockerhost5", "dockerhost5.yahoo.com", ipConfig(104, 1, 3), Optional.empty(), flavors.getFlavorOrThrow("large"), NodeType.host)); // Config servers - nodes.add(createNode("cfg1", "cfg1.yahoo.com", ipConfig(201), Optional.empty(), Optional.empty(), + nodes.add(createNode("cfg1", "cfg1.yahoo.com", ipConfig(201), Optional.empty(), flavors.getFlavorOrThrow("default"), NodeType.config)); - nodes.add(createNode("cfg2", "cfg2.yahoo.com", ipConfig(202), Optional.empty(), Optional.empty(), + nodes.add(createNode("cfg2", "cfg2.yahoo.com", ipConfig(202), Optional.empty(), flavors.getFlavorOrThrow("default"), NodeType.config)); // Ready all nodes, except 7 and 55 @@ -161,9 +161,9 @@ public class MockNodeRepository extends NodeRepository { activate(provisioner.prepare(app3, cluster3, Capacity.fromCount(2, new NodeResources(1, 1, 100, 1), false, true), 1, null), app3, provisioner); List<Node> largeNodes = new ArrayList<>(); - largeNodes.add(createNode("node13", "host13.yahoo.com", ipConfig(13), Optional.empty(), Optional.empty(), + largeNodes.add(createNode("node13", "host13.yahoo.com", ipConfig(13), Optional.empty(), new Flavor(new NodeResources(10, 48, 500, 1)), NodeType.tenant)); - largeNodes.add(createNode("node14", "host14.yahoo.com", ipConfig(14), Optional.empty(), Optional.empty(), + largeNodes.add(createNode("node14", "host14.yahoo.com", ipConfig(14), Optional.empty(), new Flavor(new NodeResources(10, 48, 500, 1)), NodeType.tenant)); addNodes(largeNodes); setReady(largeNodes, Agent.system, getClass().getSimpleName()); 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 29523ff9296..f44bddc2b57 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 @@ -133,7 +133,7 @@ public class CapacityCheckerTester { excessCapacity); Node node = nodeRepository.createNode(hostname, hostname, new IP.Config(Set.of("::"), availableIps), Optional.empty(), - Optional.empty(), new Flavor(nr), NodeType.host); + new Flavor(nr), NodeType.host); hosts.add(node); } return hosts; @@ -152,7 +152,7 @@ public class CapacityCheckerTester { .collect(Collectors.toSet()); Node node = nodeRepository.createNode(hostname, hostname, new IP.Config(Set.of("::"), availableIps), Optional.empty(), - Optional.empty(), new Flavor(capacity), NodeType.host); + new Flavor(capacity), NodeType.host); hosts.add(node); } return hosts; @@ -268,7 +268,7 @@ public class CapacityCheckerTester { Node node = nodeRepository.createNode(nodeModel.id, nodeModel.hostname, new IP.Config(nodeModel.ipAddresses, nodeModel.additionalIpAddresses), - nodeModel.parentHostname, Optional.empty(), f, nodeModel.type); + nodeModel.parentHostname, f, nodeModel.type); if (membership != null) { return node.allocate(owner, membership, 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 b2825a409e1..7c30c905983 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 @@ -1,7 +1,6 @@ // Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.provision.maintenance; -import com.google.common.collect.ImmutableSet; import com.yahoo.component.Version; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.ClusterMembership; @@ -19,6 +18,7 @@ import com.yahoo.vespa.hosted.provision.NodeRepository; import com.yahoo.vespa.hosted.provision.node.Agent; import com.yahoo.vespa.hosted.provision.node.Allocation; import com.yahoo.vespa.hosted.provision.node.Generation; +import com.yahoo.vespa.hosted.provision.node.IP; import com.yahoo.vespa.hosted.provision.provisioning.FlavorConfigBuilder; import com.yahoo.vespa.hosted.provision.testutils.MockNameResolver; import com.yahoo.vespa.orchestrator.Orchestrator; @@ -117,21 +117,21 @@ public class MetricsReporterTest { true); // Allow 4 containers - Set<String> ipAddressPool = ImmutableSet.of("::2", "::3", "::4", "::5"); + Set<String> ipAddressPool = Set.of("::2", "::3", "::4", "::5"); - Node dockerHost = Node.create("openStackId1", Set.of("::1"), ipAddressPool, "dockerHost", + Node dockerHost = Node.create("openStackId1", new IP.Config(Set.of("::1"), ipAddressPool), "dockerHost", Optional.empty(), Optional.empty(), nodeFlavors.getFlavorOrThrow("host"), NodeType.host); nodeRepository.addNodes(List.of(dockerHost)); nodeRepository.dirtyRecursively("dockerHost", Agent.system, getClass().getSimpleName()); nodeRepository.setReady("dockerHost", Agent.system, getClass().getSimpleName()); - Node container1 = Node.createDockerNode(Set.of("::2"), Set.of(), "container1", - Optional.of("dockerHost"), new NodeResources(1, 3, 2, 1), NodeType.tenant); + Node container1 = Node.createDockerNode(Set.of("::2"), "container1", + "dockerHost", new NodeResources(1, 3, 2, 1), NodeType.tenant); container1 = container1.with(allocation(Optional.of("app1")).get()); nodeRepository.addDockerNodes(new LockedNodeList(List.of(container1), nodeRepository.lockAllocation())); - Node container2 = Node.createDockerNode(Set.of("::3"), Set.of(), "container2", - Optional.of("dockerHost"), new NodeResources(2, 4, 4, 1), NodeType.tenant); + Node container2 = Node.createDockerNode(Set.of("::3"), "container2", + "dockerHost", new NodeResources(2, 4, 4, 1), NodeType.tenant); container2 = container2.with(allocation(Optional.of("app2")).get()); nodeRepository.addDockerNodes(new LockedNodeList(List.of(container2), nodeRepository.lockAllocation())); 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 239561ac9af..37881d92796 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 @@ -15,7 +15,6 @@ import org.junit.Test; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.List; import java.util.Optional; import java.util.Set; @@ -168,7 +167,7 @@ public class IPTest { } private static Node createNode(Set<String> ipAddresses) { - return Node.create("id1", Collections.singleton("127.0.0.1"), ipAddresses, + return Node.create("id1", new IP.Config(Set.of("127.0.0.1"), ipAddresses), "host1", Optional.empty(), Optional.empty(), nodeFlavors.getFlavorOrThrow("default"), NodeType.host); } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/SerializationTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/SerializationTest.java index 2094a68148e..84f707eb505 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/SerializationTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/SerializationTest.java @@ -12,6 +12,7 @@ import com.yahoo.config.provision.NetworkPorts; import com.yahoo.config.provision.NodeFlavors; import com.yahoo.config.provision.NodeType; import com.yahoo.config.provision.TenantName; +import com.yahoo.config.provision.host.FlavorOverrides; import com.yahoo.slime.Cursor; import com.yahoo.slime.Slime; import com.yahoo.slime.Type; @@ -34,14 +35,12 @@ import java.time.Instant; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; -import java.util.Collections; import java.util.List; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; import static java.time.temporal.ChronoUnit.MILLIS; -import static java.util.Collections.singleton; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -235,7 +234,7 @@ public class SerializationTest { @Test public void serialize_parentHostname() { final String parentHostname = "parent.yahoo.com"; - Node node = Node.create("myId", singleton("127.0.0.1"), Collections.emptySet(), "myHostname", Optional.of(parentHostname), Optional.empty(), nodeFlavors.getFlavorOrThrow("default"), NodeType.tenant); + 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"), NodeType.tenant); Node deserializedNode = nodeSerializer.fromJson(State.provisioned, nodeSerializer.toJson(node)); assertEquals(parentHostname, deserializedNode.parentHostname().get()); @@ -279,6 +278,18 @@ public class SerializationTest { } @Test + public void flavor_overrides_serialization() { + Node node = createNode(); + assertEquals(2, node.flavor().getMinDiskAvailableGb(), 0); + node = node.with(node.flavor().withFlavorOverrides(FlavorOverrides.ofDisk(1234))); + assertEquals(1234, node.flavor().getMinDiskAvailableGb(), 0); + + Node copy = nodeSerializer.fromJson(Node.State.provisioned, nodeSerializer.toJson(node)); + assertEquals(1234, copy.flavor().getMinDiskAvailableGb(), 0); + assertEquals(node, copy); + } + + @Test public void want_to_deprovision_defaults_to_false() { String nodeData = "{\n" + @@ -420,7 +431,7 @@ public class SerializationTest { } private Node createNode() { - return Node.create("myId", singleton("127.0.0.1"), Collections.emptySet(), "myHostname", Optional.empty(), Optional.empty(), nodeFlavors.getFlavorOrThrow("default"), NodeType.host); + return Node.create("myId", new IP.Config(Set.of("127.0.0.1"), Set.of()), "myHostname", Optional.empty(), Optional.empty(), nodeFlavors.getFlavorOrThrow("default"), NodeType.host); } } 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 3ccbd257b3c..6bdde18c301 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 @@ -1,12 +1,12 @@ // Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.provision.provisioning; -import com.yahoo.config.provision.Flavor; import com.yahoo.config.provision.NodeFlavors; import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.NodeType; import com.yahoo.vespa.hosted.provision.LockedNodeList; import com.yahoo.vespa.hosted.provision.Node; +import com.yahoo.vespa.hosted.provision.node.IP; import org.junit.Before; import org.junit.Test; @@ -32,7 +32,8 @@ public class DockerHostCapacityTest { private DockerHostCapacity capacity; private List<Node> nodes; private Node host1, host2, host3; - private Flavor flavorDocker, flavorDocker2; + private final NodeResources resources1 = new NodeResources(1, 3, 2, 1.5); + private final NodeResources resources2 = new NodeResources(2, 4, 4, 0.5); @Before public void setup() { @@ -40,24 +41,22 @@ public class DockerHostCapacityTest { // Create flavors NodeFlavors nodeFlavors = FlavorConfigBuilder.createDummies("host", "docker", "docker2"); - flavorDocker = nodeFlavors.getFlavorOrThrow("docker"); - flavorDocker2 = nodeFlavors.getFlavorOrThrow("docker2"); // Create three docker hosts - host1 = Node.create("host1", Set.of("::1"), generateIPs(2, 4), "host1", Optional.empty(), Optional.empty(), nodeFlavors.getFlavorOrThrow("host"), NodeType.host); - host2 = Node.create("host2", Set.of("::11"), generateIPs(12, 3), "host2", Optional.empty(), Optional.empty(), nodeFlavors.getFlavorOrThrow("host"), NodeType.host); - host3 = Node.create("host3", Set.of("::21"), generateIPs(22, 1), "host3", Optional.empty(), Optional.empty(), nodeFlavors.getFlavorOrThrow("host"), NodeType.host); + host1 = Node.create("host1", new IP.Config(Set.of("::1"), generateIPs(2, 4)), "host1", Optional.empty(), Optional.empty(), nodeFlavors.getFlavorOrThrow("host"), NodeType.host); + host2 = Node.create("host2", new IP.Config(Set.of("::11"), generateIPs(12, 3)), "host2", Optional.empty(), Optional.empty(), nodeFlavors.getFlavorOrThrow("host"), NodeType.host); + host3 = Node.create("host3", new IP.Config(Set.of("::21"), generateIPs(22, 1)), "host3", Optional.empty(), Optional.empty(), nodeFlavors.getFlavorOrThrow("host"), NodeType.host); // Add two containers to host1 - var nodeA = Node.create("nodeA", Set.of("::2"), Set.of(), "nodeA", Optional.of("host1"), Optional.empty(), flavorDocker, NodeType.tenant); - var nodeB = Node.create("nodeB", Set.of("::3"), Set.of(), "nodeB", Optional.of("host1"), Optional.empty(), flavorDocker, NodeType.tenant); + var nodeA = Node.createDockerNode(Set.of("::2"), "nodeA", "host1", resources1, NodeType.tenant); + var nodeB = Node.createDockerNode(Set.of("::3"), "nodeB", "host1", resources1, NodeType.tenant); // Add two containers to host 2 (same as host 1) - var nodeC = Node.create("nodeC", Set.of("::12"), Set.of(), "nodeC", Optional.of("host2"), Optional.empty(), flavorDocker, NodeType.tenant); - var nodeD = Node.create("nodeD", Set.of("::13"), Set.of(), "nodeD", Optional.of("host2"), Optional.empty(), flavorDocker, NodeType.tenant); + var nodeC = Node.createDockerNode(Set.of("::12"), "nodeC", "host2", resources1, NodeType.tenant); + var nodeD = Node.createDockerNode(Set.of("::13"), "nodeD", "host2", resources1, NodeType.tenant); // Add a larger container to host3 - var nodeE = Node.create("nodeE", Set.of("::22"), Set.of(), "nodeE", Optional.of("host3"), Optional.empty(), flavorDocker2, NodeType.tenant); + var nodeE = Node.createDockerNode(Set.of("::22"), "nodeE", "host3", resources2, NodeType.tenant); // init docker host capacity nodes = new ArrayList<>(List.of(host1, host2, host3, nodeA, nodeB, nodeC, nodeD, nodeE)); @@ -66,20 +65,19 @@ public class DockerHostCapacityTest { @Test public void hasCapacity() { - assertTrue(capacity.hasCapacity(host1, flavorDocker.resources())); - assertTrue(capacity.hasCapacity(host1, flavorDocker2.resources())); - assertTrue(capacity.hasCapacity(host2, flavorDocker.resources())); - assertTrue(capacity.hasCapacity(host2, flavorDocker2.resources())); - assertFalse(capacity.hasCapacity(host3, flavorDocker.resources())); // No ip available - assertFalse(capacity.hasCapacity(host3, flavorDocker2.resources())); // No ip available + assertTrue(capacity.hasCapacity(host1, resources1)); + assertTrue(capacity.hasCapacity(host1, resources2)); + assertTrue(capacity.hasCapacity(host2, resources1)); + assertTrue(capacity.hasCapacity(host2, resources2)); + assertFalse(capacity.hasCapacity(host3, resources1)); // No ip available + assertFalse(capacity.hasCapacity(host3, resources2)); // No ip available // Add a new node to host1 to deplete the memory resource - Node nodeF = Node.create("nodeF", Set.of("::6"), Set.of(), - "nodeF", Optional.of("host1"), Optional.empty(), flavorDocker, NodeType.tenant); + Node nodeF = Node.createDockerNode(Set.of("::6"), "nodeF", "host1", resources1, NodeType.tenant); nodes.add(nodeF); capacity = new DockerHostCapacity(new LockedNodeList(nodes, () -> {}), hostResourcesCalculator); - assertFalse(capacity.hasCapacity(host1, flavorDocker.resources())); - assertFalse(capacity.hasCapacity(host1, flavorDocker2.resources())); + assertFalse(capacity.hasCapacity(host1, resources1)); + assertFalse(capacity.hasCapacity(host1, resources2)); } @Test 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 670473ff238..7b868c2884b 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 @@ -22,6 +22,7 @@ import com.yahoo.vespa.curator.transaction.CuratorTransaction; import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.hosted.provision.NodeList; import com.yahoo.vespa.hosted.provision.node.Agent; +import com.yahoo.vespa.hosted.provision.node.IP; import org.junit.Ignore; import org.junit.Test; @@ -386,7 +387,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", Set.of("127.0.233." + index), Set.of(), hostname, Optional.of(parentHostname), Optional.empty(), new Flavor(flavor), NodeType.tenant); + 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), NodeType.tenant); 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, Instant.now()); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisionerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisionerTest.java index f63fa797f2f..08112f9b055 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisionerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisionerTest.java @@ -24,7 +24,6 @@ import java.util.Collection; import java.util.Collections; import java.util.LinkedHashSet; import java.util.List; -import java.util.Optional; import java.util.Set; import java.util.function.Supplier; import java.util.stream.Collectors; @@ -225,7 +224,7 @@ public class LoadBalancerProvisionerTest { private void makeDynamicDockerNodes(int n, NodeType nodeType) { List<Node> nodes = new ArrayList<>(n); for (int i = 1; i <= n; i++) { - var node = Node.createDockerNode(Set.of(), Set.of(), "node" + i, Optional.empty(), + var node = Node.createDockerNode(Set.of(), "node" + i, "parent" + i, NodeResources.fromLegacyName("d-1-1-1"), nodeType); nodes.add(node); } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizerTest.java index 43a045705c8..72e3df84161 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizerTest.java @@ -11,15 +11,15 @@ import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.NodeType; import com.yahoo.config.provisioning.FlavorsConfig; import com.yahoo.vespa.hosted.provision.Node; +import com.yahoo.vespa.hosted.provision.node.IP; import org.junit.Assert; import org.junit.Test; import java.time.Instant; import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; import java.util.List; import java.util.Optional; +import java.util.Set; /** * @author smorgrav @@ -69,12 +69,11 @@ public class NodePrioritizerTest { } private static Node createNode(Node parent, String hostname, NodeResources resources) { - return Node.createDockerNode(Collections.singleton("127.0.0.1"), new HashSet<>(), hostname, Optional.of(parent.hostname()), - resources, NodeType.tenant); + return Node.createDockerNode(Set.of("127.0.0.1"), hostname, parent.hostname(), resources, NodeType.tenant); } private static Node createParent(String hostname) { - return Node.create("openid", Collections.singleton("127.0.0.1"), new HashSet<>(), hostname, Optional.empty(), + return Node.create("openid", new IP.Config(Set.of("127.0.0.1"), Set.of()), hostname, Optional.empty(), Optional.empty(), flavors.getFlavorOrThrow("host-large"), NodeType.host); } 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 cad3ea1cd42..50657e7eab2 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 @@ -290,7 +290,6 @@ public class ProvisioningTester { hostname, new IP.Config(hostIps, ipAddressPool), Optional.empty(), - Optional.empty(), flavor, type)); } @@ -311,7 +310,6 @@ public class ProvisioningTester { hostname, new IP.Config(Set.of(ipv4), Set.of()), Optional.empty(), - Optional.empty(), nodeFlavors.getFlavorOrThrow(flavor), NodeType.config); nodes.add(node); |