diff options
Diffstat (limited to 'node-repository/src/test/java/com/yahoo')
4 files changed, 47 insertions, 10 deletions
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 523ceeb94ce..158a1d6e5ac 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 @@ -7,6 +7,7 @@ import com.yahoo.component.Vtag; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.ApplicationName; import com.yahoo.config.provision.ClusterMembership; +import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.InstanceName; import com.yahoo.config.provision.NetworkPorts; import com.yahoo.config.provision.NodeFlavors; @@ -450,12 +451,15 @@ public class NodeSerializerTest { Node.Builder builder = Node.create("myId", IP.Config.EMPTY, "myHostname", nodeFlavors.getFlavorOrThrow("default"), NodeType.host); Node node = nodeSerializer.fromJson(State.provisioned, nodeSerializer.toJson(builder.build())); - assertFalse(node.exclusiveTo().isPresent()); + assertFalse(node.exclusiveToApplicationId().isPresent()); + assertFalse(node.exclusiveToClusterType().isPresent()); - ApplicationId exclusiveTo = ApplicationId.from("tenant1", "app1", "instance1"); - node = builder.exclusiveTo(exclusiveTo).build(); + ApplicationId exclusiveToApp = ApplicationId.from("tenant1", "app1", "instance1"); + ClusterSpec.Type exclusiveToCluster = ClusterSpec.Type.admin; + node = builder.exclusiveToApplicationId(exclusiveToApp).exclusiveToClusterType(exclusiveToCluster).build(); node = nodeSerializer.fromJson(State.provisioned, nodeSerializer.toJson(node)); - assertEquals(exclusiveTo, node.exclusiveTo().get()); + assertEquals(exclusiveToApp, node.exclusiveToApplicationId().get()); + assertEquals(exclusiveToCluster, node.exclusiveToClusterType().get()); } private byte[] createNodeJson(String hostname, String... ipAddress) { diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicProvisioningTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicProvisioningTest.java index 0b7b9f2fa13..3a7c61f68a1 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicProvisioningTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicProvisioningTest.java @@ -28,6 +28,7 @@ import org.junit.Test; import java.time.Instant; import java.util.List; +import java.util.Optional; import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; @@ -72,7 +73,7 @@ public class DynamicProvisioningTest { mockHostProvisioner(hostProvisioner, "large", 3, null); // Provision shared hosts prepareAndActivate(application1, clusterSpec("mycluster"), 4, 1, resources); verify(hostProvisioner).provisionHosts(List.of(100, 101, 102, 103), NodeType.host, resources, application1, - Version.emptyVersion, HostSharing.any); + Version.emptyVersion, HostSharing.any, Optional.of(ClusterSpec.Type.content)); // Total of 8 nodes should now be in node-repo, 4 active hosts and 4 active nodes assertEquals(8, tester.nodeRepository().nodes().list().size()); @@ -96,7 +97,7 @@ public class DynamicProvisioningTest { mockHostProvisioner(hostProvisioner, "large", 3, application3); prepareAndActivate(application3, clusterSpec("mycluster", true), 4, 1, resources); verify(hostProvisioner).provisionHosts(List.of(104, 105, 106, 107), NodeType.host, resources, application3, - Version.emptyVersion, HostSharing.exclusive); + Version.emptyVersion, HostSharing.exclusive, Optional.of(ClusterSpec.Type.content)); // Total of 20 nodes should now be in node-repo, 8 active hosts and 12 active nodes assertEquals(20, tester.nodeRepository().nodes().list().size()); @@ -468,7 +469,7 @@ public class DynamicProvisioningTest { }).collect(Collectors.toSet()); Node parent = Node.create(hostHostname, new IP.Config(Set.of(hostIp), pool), hostHostname, hostFlavor, NodeType.host) - .exclusiveTo(exclusiveTo).build(); + .exclusiveToApplicationId(exclusiveTo).build(); Node child = Node.reserve(Set.of("::" + hostIndex + ":1"), hostHostname + "-1", hostHostname, nodeResources, NodeType.tenant).build(); ProvisionedHost provisionedHost = mock(ProvisionedHost.class); when(provisionedHost.generateHost()).thenReturn(parent); @@ -476,7 +477,7 @@ public class DynamicProvisioningTest { return provisionedHost; }) .collect(Collectors.toList()); - }).when(hostProvisioner).provisionHosts(any(), any(), any(), any(), any(), any()); + }).when(hostProvisioner).provisionHosts(any(), any(), any(), any(), any(), any(), any()); } } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/VirtualNodeProvisioningTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/VirtualNodeProvisioningTest.java index 18fcb56d87f..fdef4135c16 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/VirtualNodeProvisioningTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/VirtualNodeProvisioningTest.java @@ -333,6 +333,34 @@ public class VirtualNodeProvisioningTest { assertNodeParentReservation(tester.getNodes(application1_1).asList(), Optional.empty(), tester); // Reservation is cleared after activation } + @Test + public void respects_exclusive_to_cluster_type() { + NodeResources resources = new NodeResources(10, 10, 100, 10); + ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Environment.prod, RegionName.from("us-east"))).build(); + + tester.makeReadyNodes(10, resources, Optional.empty(), NodeType.host, 1); + tester.activateTenantHosts(); + // All hosts are exclusive to content nodes + tester.patchNodes(tester.nodeRepository().nodes().list().asList(), node -> node.withExclusiveToClusterType(ClusterSpec.Type.content)); + + Version wantedVespaVersion = Version.fromString("6.39"); + try { + // No capacity for 'container' nodes + tester.prepare(applicationId, + ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("myContent")).vespaVersion(wantedVespaVersion).build(), + 6, 1, resources); + fail("Expected to fail due to out of capacity"); + } catch (OutOfCapacityException ignored) { } + + // Same cluster, but content type is now 'content' + List<HostSpec> nodes = tester.prepare(applicationId, + ClusterSpec.request(ClusterSpec.Type.content, ClusterSpec.Id.from("myContent")).vespaVersion(wantedVespaVersion).build(), + 6, 1, resources); + tester.activate(applicationId, nodes); + + assertEquals(6, tester.nodeRepository().nodes().list(Node.State.active).owner(applicationId).size()); + } + /** Exclusive app first, then non-exclusive: Should give the same result as below */ @Test public void application_deployment_with_exclusive_app_first() { diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiTest.java index dd16d4674ad..6c052a6c364 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiTest.java @@ -993,11 +993,15 @@ public class NodesV2ApiTest { String url = "http://localhost:8080/nodes/v2/node/dockerhost1.yahoo.com"; tester.assertPartialResponse(new Request(url), "exclusiveTo", false); // Initially there is no exclusiveTo - assertResponse(new Request(url, Utf8.toBytes("{\"exclusiveTo\": \"t1:a1:i1\"}"), Request.Method.PATCH), + assertResponse(new Request(url, Utf8.toBytes("{\"exclusiveToApplicationId\": \"t1:a1:i1\"}"), Request.Method.PATCH), "{\"message\":\"Updated dockerhost1.yahoo.com\"}"); tester.assertPartialResponse(new Request(url), "exclusiveTo\":\"t1:a1:i1\",", true); - assertResponse(new Request(url, Utf8.toBytes("{\"exclusiveTo\": null}"), Request.Method.PATCH), + assertResponse(new Request(url, Utf8.toBytes("{\"exclusiveToClusterType\": \"admin\"}"), Request.Method.PATCH), + "{\"message\":\"Updated dockerhost1.yahoo.com\"}"); + tester.assertPartialResponse(new Request(url), "exclusiveTo\":\"t1:a1:i1\",\"exclusiveToClusterType\":\"admin\",", true); + + assertResponse(new Request(url, Utf8.toBytes("{\"exclusiveTo\": null, \"exclusiveToClusterType\": null}"), Request.Method.PATCH), "{\"message\":\"Updated dockerhost1.yahoo.com\"}"); tester.assertPartialResponse(new Request(url), "exclusiveTo", false); } |