From 5d0663a1f2eddb94b01d6ef09ea5cb8d149d4ab0 Mon Sep 17 00:00:00 2001 From: Jon Bratseth Date: Mon, 25 May 2020 10:27:35 +0200 Subject: Revert "Merge pull request #13353 from vespa-engine/revert-13348-bratseth/real-resources-in-model" This reverts commit 413ea623b5033593c2f2fe9951e1a685c8ff9dfc, reversing changes made to 5c0bfb06784075ac72c7891b7dce6454d85bdff8. --- .../hosted/provision/autoscale/AllocationOptimizer.java | 4 ++-- .../yahoo/vespa/hosted/provision/provisioning/Activator.java | 5 +++-- .../provision/provisioning/NodeRepositoryProvisioner.java | 9 +++++---- .../yahoo/vespa/hosted/provision/restapi/NodesResponse.java | 2 +- .../com/yahoo/vespa/hosted/provision/os/OsVersionsTest.java | 1 - .../hosted/provision/persistence/NodeSerializerTest.java | 6 +++--- .../hosted/provision/provisioning/AllocationVisualizer.java | 4 ++-- .../provision/provisioning/DynamicDockerAllocationTest.java | 8 ++++---- .../provision/provisioning/DynamicDockerProvisionTest.java | 4 ++-- .../hosted/provision/provisioning/ProvisioningTest.java | 12 ++++++------ 10 files changed, 28 insertions(+), 27 deletions(-) (limited to 'node-repository') diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocationOptimizer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocationOptimizer.java index f0f53161d9b..475f2feaebd 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocationOptimizer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocationOptimizer.java @@ -40,8 +40,8 @@ public class AllocationOptimizer { AllocatableClusterResources current, Limits limits) { if (limits.isEmpty()) - limits = Limits.of(new ClusterResources(minimumNodes, 1, NodeResources.unspecified), - new ClusterResources(maximumNodes, maximumNodes, NodeResources.unspecified)); + limits = Limits.of(new ClusterResources(minimumNodes, 1, NodeResources.unspecified()), + new ClusterResources(maximumNodes, maximumNodes, NodeResources.unspecified())); Optional bestAllocation = Optional.empty(); for (int groups = limits.min().groups(); groups <= limits.max().groups(); groups++) { for (int nodes = limits.min().nodes(); nodes <= limits.max().nodes(); nodes++) { diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Activator.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Activator.java index 36034b62cfb..ebe9327967e 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Activator.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Activator.java @@ -4,6 +4,7 @@ package com.yahoo.vespa.hosted.provision.provisioning; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.ClusterMembership; import com.yahoo.config.provision.ClusterSpec; +import com.yahoo.config.provision.Flavor; import com.yahoo.config.provision.HostSpec; import com.yahoo.config.provision.ParentHostUnavailableException; import com.yahoo.transaction.Mutex; @@ -183,8 +184,8 @@ class Activator { for (Node node : nodes) { HostSpec hostSpec = getHost(node.hostname(), hosts); node = hostSpec.membership().get().retired() ? node.retire(nodeRepository.clock().instant()) : node.unretire(); - if (hostSpec.flavor().isPresent()) // Docker nodes may change flavor - node = node.with(hostSpec.flavor().get()); + if (! hostSpec.advertisedResources().equals(node.flavor().resources())) // A resized node + node = node.with(new Flavor(hostSpec.advertisedResources())); Allocation allocation = node.allocation().get() .with(hostSpec.membership().get()) .withRequestedResources(hostSpec.requestedResources() diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java index bd92357ea79..78ccf258675 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java @@ -7,6 +7,7 @@ import com.yahoo.config.provision.Capacity; import com.yahoo.config.provision.ClusterResources; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.Environment; +import com.yahoo.config.provision.Flavor; import com.yahoo.config.provision.HostFilter; import com.yahoo.config.provision.HostSpec; import com.yahoo.config.provision.NodeResources; @@ -196,12 +197,12 @@ public class NodeRepositoryProvisioner implements Provisioner { log.log(Level.FINE, () -> "Prepared node " + node.hostname() + " - " + node.flavor()); Allocation nodeAllocation = node.allocation().orElseThrow(IllegalStateException::new); hosts.add(new HostSpec(node.hostname(), - List.of(), - Optional.of(node.flavor()), - Optional.of(nodeAllocation.membership()), + nodeRepository.resourcesCalculator().realResourcesOf(node, nodeRepository), + node.flavor().resources(), + requestedResources, + nodeAllocation.membership(), node.status().vespaVersion(), nodeAllocation.networkPorts(), - requestedResources.isUnspecified() ? Optional.empty() : Optional.of(requestedResources), node.status().dockerImage())); if (nodeAllocation.networkPorts().isPresent()) { log.log(Level.FINE, () -> "Prepared node " + node.hostname() + " has port allocations"); diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesResponse.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesResponse.java index 9d02d2907cc..e3edf394da6 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesResponse.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesResponse.java @@ -145,7 +145,7 @@ class NodesResponse extends HttpResponse { object.setString("flavor", node.flavor().name()); node.reservedTo().ifPresent(reservedTo -> object.setString("reservedTo", reservedTo.value())); if (node.flavor().isConfigured()) - object.setDouble("cpuCores", node.flavor().getMinCpuCores()); + object.setDouble("cpuCores", node.flavor().resources().vcpu()); NodeResourcesSerializer.toSlime(node.flavor().resources(), object.setObject("resources")); if (node.flavor().cost() > 0) object.setLong("cost", node.flavor().cost()); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/os/OsVersionsTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/os/OsVersionsTest.java index 6b03def7e57..914008af227 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/os/OsVersionsTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/os/OsVersionsTest.java @@ -229,7 +229,6 @@ public class OsVersionsTest { // All hosts are deprovisioning assertEquals(hostCount, hostNodes.get().deprovisioning().size()); - // Nodes complete their upgrade by being reprovisioned completeUpgradeOf(hostNodes.get().deprovisioning().asList(), NodeType.confighost); assertEquals(hostCount, hostNodes.get().onOsVersion(version1).size()); 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 134b3bc1cd7..f3fe1fc4915 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 @@ -275,12 +275,12 @@ public class NodeSerializerTest { @Test public void flavor_overrides_serialization() { Node node = createNode(); - assertEquals(20, node.flavor().getMinDiskAvailableGb(), 0); + assertEquals(20, node.flavor().resources().diskGb(), 0); node = node.with(node.flavor().with(FlavorOverrides.ofDisk(1234))); - assertEquals(1234, node.flavor().getMinDiskAvailableGb(), 0); + assertEquals(1234, node.flavor().resources().diskGb(), 0); Node copy = nodeSerializer.fromJson(Node.State.provisioned, nodeSerializer.toJson(node)); - assertEquals(1234, copy.flavor().getMinDiskAvailableGb(), 0); + assertEquals(1234, copy.flavor().resources().diskGb(), 0); assertEquals(node, copy); } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AllocationVisualizer.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AllocationVisualizer.java index fd2374c55b7..ea4386f2fd5 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AllocationVisualizer.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AllocationVisualizer.java @@ -102,13 +102,13 @@ public class AllocationVisualizer extends JPanel { if (isHost) { g.setColor(Color.GRAY); - for (int i = 0; i < node.flavor().getMinMainMemoryAvailableGb(); i++) { + for (int i = 0; i < node.flavor().resources().memoryGb(); i++) { g.fillRect(x, y - nodeHeight, nodeWidth, nodeHeight); y = y - (nodeHeight + 2); } } else { g.setColor(Color.YELLOW); - int multi = (int) node.flavor().getMinMainMemoryAvailableGb(); + int multi = (int) node.flavor().resources().memoryGb(); int height = multi * nodeHeight + ((multi - 1) * 2); g.fillRect(x, y - height, nodeWidth, height); 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 24c1b0b5d2f..7350df40718 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 @@ -346,8 +346,8 @@ public class DynamicDockerAllocationTest { List hosts = tester.prepare(application, cluster, 2, 1, resources); assertEquals(2, hosts.size()); - assertEquals(NodeResources.DiskSpeed.slow, hosts.get(0).flavor().get().resources().diskSpeed()); - assertEquals(NodeResources.DiskSpeed.slow, hosts.get(1).flavor().get().resources().diskSpeed()); + assertEquals(NodeResources.DiskSpeed.slow, hosts.get(0).advertisedResources().diskSpeed()); + assertEquals(NodeResources.DiskSpeed.slow, hosts.get(1).advertisedResources().diskSpeed()); tester.activate(application, hosts); } @@ -386,9 +386,9 @@ public class DynamicDockerAllocationTest { List hosts = tester.prepare(application, cluster, 4, 1, resources); assertEquals(1, hosts.size()); tester.activate(application, hosts); - assertEquals(0.1, hosts.get(0).flavor().get().resources().vcpu(), 0.000001); + assertEquals(0.1, hosts.get(0).advertisedResources().vcpu(), 0.000001); assertEquals("Slow nodes are allowed in dev and preferred because they are cheaper", - NodeResources.DiskSpeed.slow, hosts.get(0).flavor().get().resources().diskSpeed()); + NodeResources.DiskSpeed.slow, hosts.get(0).advertisedResources().diskSpeed()); } @Test diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisionTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisionTest.java index e1a66d2ae21..7ef780b8b7f 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisionTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisionTest.java @@ -270,8 +270,8 @@ public class DynamicDockerProvisionTest { app1, cluster1); // Stop specifying node resources - tester.activate(app1, cluster1, Capacity.from(new ClusterResources(6, 3, NodeResources.unspecified), - new ClusterResources(9, 3, NodeResources.unspecified))); + tester.activate(app1, cluster1, Capacity.from(new ClusterResources(6, 3, NodeResources.unspecified()), + new ClusterResources(9, 3, NodeResources.unspecified()))); tester.assertNodes("Existing allocation is preserved", 9, 3, 2, 20, 15, app1, cluster1); 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 03c07515cd5..9e211fd497c 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 @@ -418,8 +418,8 @@ public class ProvisioningTest { ApplicationId app1 = tester.makeApplicationId("app1"); ClusterSpec cluster1 = ClusterSpec.request(ClusterSpec.Type.content, new ClusterSpec.Id("cluster1")).vespaVersion("7").build(); - tester.activate(app1, cluster1, Capacity.from(new ClusterResources(2, 1, NodeResources.unspecified), - new ClusterResources(4, 1, NodeResources.unspecified))); + tester.activate(app1, cluster1, Capacity.from(new ClusterResources(2, 1, NodeResources.unspecified()), + new ClusterResources(4, 1, NodeResources.unspecified()))); tester.assertNodes("Initial allocation at min with default resources", 2, 1, 1.5, 8, 50, 0.3, app1, cluster1); @@ -479,8 +479,8 @@ public class ProvisioningTest { app1, cluster1); // Stop specifying node resources - tester.activate(app1, cluster1, Capacity.from(new ClusterResources(6, 3, NodeResources.unspecified), - new ClusterResources(9, 3, NodeResources.unspecified))); + tester.activate(app1, cluster1, Capacity.from(new ClusterResources(6, 3, NodeResources.unspecified()), + new ClusterResources(9, 3, NodeResources.unspecified()))); tester.assertNodes("No change", 9, 3, 8, 35, 15, app1, cluster1); @@ -622,7 +622,7 @@ public class ProvisioningTest { tester.makeReadyHosts(4, defaultResources).deployZoneApp(); ApplicationId application = tester.makeApplicationId(); ClusterSpec cluster = ClusterSpec.request(ClusterSpec.Type.content, ClusterSpec.Id.from("music")).vespaVersion("4.5.6").build(); - tester.prepare(application, cluster, Capacity.from(new ClusterResources(5, 1, NodeResources.unspecified), false, false)); + tester.prepare(application, cluster, Capacity.from(new ClusterResources(5, 1, NodeResources.unspecified()), false, false)); // No exception; Success } @@ -881,7 +881,7 @@ public class ProvisioningTest { allHosts.addAll(content0); allHosts.addAll(content1); - Function capacity = count -> Capacity.from(new ClusterResources(count, 1, NodeResources.unspecified), required, true); + Function capacity = count -> Capacity.from(new ClusterResources(count, 1, NodeResources.unspecified()), required, true); int expectedContainer0Size = tester.capacityPolicies().decideSize(container0Size, capacity.apply(container0Size), containerCluster0, application); int expectedContainer1Size = tester.capacityPolicies().decideSize(container1Size, capacity.apply(container1Size), containerCluster1, application); int expectedContent0Size = tester.capacityPolicies().decideSize(content0Size, capacity.apply(content0Size), contentCluster0, application); -- cgit v1.2.3 From 80f46f8c8a65491d1a688397bee7a1e402174cfd Mon Sep 17 00:00:00 2001 From: Jon Bratseth Date: Mon, 25 May 2020 11:04:44 +0200 Subject: Send non-speed-adjusted cpu core count in rest API --- .../java/com/yahoo/vespa/hosted/provision/restapi/NodesResponse.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'node-repository') diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesResponse.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesResponse.java index e3edf394da6..3fd3ae6ff26 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesResponse.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesResponse.java @@ -130,6 +130,7 @@ class NodesResponse extends HttpResponse { toSlime(node, true, object); } + @SuppressWarnings("deprecation") private void toSlime(Node node, boolean allFields, Cursor object) { object.setString("url", nodeParentUrl + node.hostname()); if ( ! allFields) return; @@ -145,7 +146,7 @@ class NodesResponse extends HttpResponse { object.setString("flavor", node.flavor().name()); node.reservedTo().ifPresent(reservedTo -> object.setString("reservedTo", reservedTo.value())); if (node.flavor().isConfigured()) - object.setDouble("cpuCores", node.flavor().resources().vcpu()); + object.setDouble("cpuCores", node.flavor().getMinCpuCores()); NodeResourcesSerializer.toSlime(node.flavor().resources(), object.setObject("resources")); if (node.flavor().cost() > 0) object.setLong("cost", node.flavor().cost()); -- cgit v1.2.3