diff options
Diffstat (limited to 'node-repository/src/test/java')
9 files changed, 63 insertions, 23 deletions
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 3a29204d2f4..b2bc21d1cf1 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 @@ -266,7 +266,7 @@ public class CapacityCheckerTester { nodeModel.parentHostname, f, nodeModel.type); if (membership != null) { - return node.allocate(owner, membership, Instant.now()); + return node.allocate(owner, membership, node.flavor().resources(), Instant.now()); } else { return node; } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java index 0a4ca831d3d..71788fb1a30 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java @@ -199,6 +199,7 @@ public class DynamicProvisioningMaintainerTest { .map(app -> new Allocation( app, ClusterMembership.from("container/default/0/0", Version.fromString("7.3")), + flavor.resources(), Generation.initial(), false)); var ipConfig = new IP.Config(state == Node.State.active ? Set.of("::1") : Set.of(), Set.of()); 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 db4ba661b64..ed6e6c6e9a7 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 @@ -126,12 +126,12 @@ public class MetricsReporterTest { 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()); + container1 = container1.with(allocation(Optional.of("app1"), container1).get()); nodeRepository.addDockerNodes(new LockedNodeList(List.of(container1), nodeRepository.lockAllocation())); 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()); + container2 = container2.with(allocation(Optional.of("app2"), container2).get()); nodeRepository.addDockerNodes(new LockedNodeList(List.of(container2), nodeRepository.lockAllocation())); Orchestrator orchestrator = mock(Orchestrator.class); @@ -171,10 +171,11 @@ public class MetricsReporterTest { .instanceName("default").build(); } - private Optional<Allocation> allocation(Optional<String> tenant) { + private Optional<Allocation> allocation(Optional<String> tenant, Node owner) { if (tenant.isPresent()) { Allocation allocation = new Allocation(app(tenant.get()), ClusterMembership.from("container/id1/0/3", new Version()), + owner.flavor().resources(), Generation.initial(), false); return Optional.of(allocation); 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 0cfdf80a8a1..5a4c87aaf77 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 @@ -10,6 +10,7 @@ import com.yahoo.config.provision.ClusterMembership; import com.yahoo.config.provision.InstanceName; import com.yahoo.config.provision.NetworkPorts; 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; @@ -70,6 +71,7 @@ public class SerializationTest { @Test public void testReservedNodeSerialization() { Node node = createNode(); + NodeResources requestedResources = new NodeResources(1.2, 3.4, 5.6, 7.8, NodeResources.DiskSpeed.any); clock.advance(Duration.ofMinutes(3)); assertEquals(0, node.history().events().size()); @@ -77,6 +79,7 @@ public class SerializationTest { ApplicationName.from("myApplication"), InstanceName.from("myInstance")), ClusterMembership.from("content/myId/0/0", Vtag.currentVersion), + requestedResources, clock.instant()); assertEquals(1, node.history().events().size()); node = node.withRestart(new Generation(1, 2)); @@ -99,6 +102,7 @@ public class SerializationTest { assertEquals(2, copy.status().failCount()); assertEquals(node.allocation().get().owner(), copy.allocation().get().owner()); assertEquals(node.allocation().get().membership(), copy.allocation().get().membership()); + assertEquals(node.allocation().get().requestedResources(), copy.allocation().get().requestedResources()); assertEquals(node.allocation().get().isRemovable(), copy.allocation().get().isRemovable()); assertEquals(1, copy.history().events().size()); assertEquals(clock.instant().truncatedTo(MILLIS), copy.history().event(History.Event.Type.reserved).get().at()); @@ -106,17 +110,6 @@ public class SerializationTest { } @Test - public void testDefaultType() { - Node node = createNode().allocate(ApplicationId.from(TenantName.from("myTenant"), - ApplicationName.from("myApplication"), - InstanceName.from("myInstance")), - ClusterMembership.from("content/myId/0/0", Vtag.currentVersion), - clock.instant()); - Node copy = nodeSerializer.fromJson(Node.State.provisioned, nodeSerializer.toJson(node)); - assertEquals(NodeType.host, copy.type()); - } - - @Test public void testRebootAndRestartAndTypeNoCurrentValuesSerialization() { String nodeData = "{\n" + @@ -127,11 +120,13 @@ public class SerializationTest { " \"history\" : [\n" + " {\n" + " \"type\" : \"provisioned\",\n" + - " \"at\" : 1444391401389\n" + + " \"at\" : 1444391401389,\n" + + " \"agent\" : \"system\"\n" + " },\n" + " {\n" + " \"type\" : \"reserved\",\n" + - " \"at\" : 1444391402611\n" + + " \"at\" : 1444391402611,\n" + + " \"agent\" : \"system\"\n" + " }\n" + " ],\n" + " \"instance\" : {\n" + @@ -172,6 +167,7 @@ public class SerializationTest { ApplicationName.from("myApplication"), InstanceName.from("myInstance")), ClusterMembership.from("content/myId/0/0", Vtag.currentVersion), + node.flavor().resources(), clock.instant()); assertEquals(1, node.history().events().size()); clock.advance(Duration.ofMinutes(2)); @@ -221,6 +217,7 @@ public class SerializationTest { ApplicationName.from("myApplication"), InstanceName.from("myInstance")), ClusterMembership.from("content/myId/0/0", Vtag.currentVersion), + node.flavor().resources(), clock.instant()); node = node.with(node.status().setFailCount(0)); @@ -405,6 +402,7 @@ public class SerializationTest { ApplicationName.from("myApplication"), InstanceName.from("myInstance")), ClusterMembership.from("content/myId/0/0", Vtag.currentVersion), + node.flavor().resources(), clock.instant()); assertTrue(node.allocation().isPresent()); node = node.with(node.allocation().get().withNetworkPorts(ports)); @@ -437,7 +435,13 @@ public class SerializationTest { } private Node createNode() { - 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); + return Node.create("myId", + new IP.Config(Set.of("127.0.0.1"), Set.of()), + "myHostname", + Optional.empty(), + Optional.empty(), + nodeFlavors.getFlavorOrThrow("default"), + NodeType.tenant); } } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AllocationSimulator.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AllocationSimulator.java index e3aefdd4512..9cd95e401a9 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AllocationSimulator.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AllocationSimulator.java @@ -80,7 +80,7 @@ public class AllocationSimulator { private Node node(String hostname, Flavor flavor, Optional<String> parent, Optional<String> tenant) { var ipConfig = new IP.Config(Set.of("127.0.0.1"), parent.isPresent() ? Set.of() : getAdditionalIP()); return new Node("fake", ipConfig, hostname, parent, flavor, Status.initial(), - parent.isPresent() ? Node.State.ready : Node.State.active, allocation(tenant), History.empty(), + parent.isPresent() ? Node.State.ready : Node.State.active, allocation(tenant, flavor), History.empty(), parent.isPresent() ? NodeType.tenant : NodeType.host, new Reports(), Optional.empty()); } @@ -90,10 +90,11 @@ public class AllocationSimulator { return h; } - private Optional<Allocation> allocation(Optional<String> tenant) { + private Optional<Allocation> allocation(Optional<String> tenant, Flavor flavor) { if (tenant.isPresent()) { Allocation allocation = new Allocation(app(tenant.get()), ClusterMembership.from("container/id1/3", new Version()), + flavor.resources(), Generation.initial(), false); return Optional.of(allocation); 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 a3512c480d3..618df82e38b 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 @@ -426,7 +426,7 @@ public class DynamicDockerAllocationTest { 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()); + Node node1aAllocation = node1a.allocate(id, clusterMembership1, node1a.flavor().resources(), Instant.now()); tester.nodeRepository().addNodes(Collections.singletonList(node1aAllocation)); NestedTransaction transaction = new NestedTransaction().add(new CuratorTransaction(tester.getCurator())); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImplTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImplTest.java index da77bebccda..48bd091011e 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImplTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImplTest.java @@ -140,7 +140,7 @@ public class InfraDeployerImplTest { Optional<Node> nodeWithAllocation = wantedVespaVersion.map(version -> { ClusterSpec clusterSpec = application.getClusterSpecWithVersion(version).with(Optional.of(ClusterSpec.Group.from(0))); ClusterMembership membership = ClusterMembership.from(clusterSpec, 1); - Allocation allocation = new Allocation(application.getApplicationId(), membership, Generation.initial(), false); + Allocation allocation = new Allocation(application.getApplicationId(), membership, node.flavor().resources(), Generation.initial(), false); return node.with(allocation); }); return nodeRepository.database().writeTo(state, nodeWithAllocation.orElse(node), Agent.system, Optional.empty()); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java index 877038b8722..a8b534e02ef 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java @@ -320,6 +320,38 @@ public class ProvisioningTest { } @Test + public void requested_resources_info_is_retained() { + ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Environment.prod, RegionName.from("us-east"))).build(); + + tester.makeReadyNodes(13, defaultResources, NodeType.host, 1); + tester.prepareAndActivateInfraApplication(tester.makeApplicationId(), NodeType.host); + ApplicationId application = tester.makeApplicationId(); + + { + // Deploy with disk-speed any and make sure that information is retained + SystemState state = prepare(application, 0, 0, 3, 3, + defaultResources.anySpeed(), + tester); + assertEquals(6, state.allHosts.size()); + tester.activate(application, state.allHosts); + assertTrue(state.allHosts.stream().allMatch(host -> host.requestedResources().get().diskSpeed() == NodeResources.DiskSpeed.any)); + assertTrue(tester.nodeRepository().getNodes(application).stream().allMatch(node -> node.allocation().get().requestedResources().diskSpeed() == NodeResources.DiskSpeed.any)); + } + + { + // Deploy (with some additional nodes) with disk-speed fast and make sure *that* information is retained + // even though it does not lead to new nodes + SystemState state = prepare(application, 0, 0, 5, 3, + defaultResources, + tester); + assertEquals(8, state.allHosts.size()); + tester.activate(application, state.allHosts); + assertTrue(state.allHosts.stream().allMatch(host -> host.requestedResources().get().diskSpeed() == NodeResources.DiskSpeed.fast)); + assertTrue(tester.nodeRepository().getNodes(application).stream().allMatch(node -> node.allocation().get().requestedResources().diskSpeed() == NodeResources.DiskSpeed.fast)); + } + } + + @Test public void deploy_specific_vespa_version() { ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Environment.dev, RegionName.from("us-east"))).build(); 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 af635ada89d..242b0d8ca9e 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 @@ -148,12 +148,13 @@ public class ProvisioningTester { return hosts1; } - public void activate(ApplicationId application, Collection<HostSpec> hosts) { + public Collection<HostSpec> activate(ApplicationId application, Collection<HostSpec> hosts) { NestedTransaction transaction = new NestedTransaction(); transaction.add(new CuratorTransaction(curator)); provisioner.activate(transaction, application, hosts); transaction.commit(); assertEquals(toHostNames(hosts), toHostNames(nodeRepository.getNodes(application, Node.State.active))); + return hosts; } public void prepareAndActivateInfraApplication(ApplicationId application, NodeType nodeType, Version version) { |