summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2021-02-27 11:17:31 +0100
committerJon Bratseth <bratseth@gmail.com>2021-02-27 11:17:31 +0100
commit959552e4af11a72d40224ae2dbecf1339a03e313 (patch)
tree775e1756a676e2e33503b3862d0ee8a16b35d96e /node-repository
parent0dc96d22e51bf22e7afaa4e99abeed1c8c1bad43 (diff)
Preserve requested resources
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocatableClusterResources.java4
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java31
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java8
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ScalingSuggestionsMaintainerTest.java8
4 files changed, 44 insertions, 7 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocatableClusterResources.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocatableClusterResources.java
index ab8b954610a..4fe56e3a6af 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocatableClusterResources.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocatableClusterResources.java
@@ -47,7 +47,7 @@ public class AllocatableClusterResources {
this.nodes = nodes.size();
this.groups = (int)nodes.stream().map(node -> node.allocation().get().membership().cluster().group()).distinct().count();
this.realResources = averageRealResourcesOf(nodes, nodeRepository, exclusive); // Average since we average metrics over nodes
- this.advertisedResources = nodes.get(0).resources();
+ this.advertisedResources = nodes.get(0).allocation().get().requestedResources();
this.clusterSpec = nodes.get(0).allocation().get().membership().cluster();
this.fulfilment = 1;
}
@@ -123,7 +123,7 @@ public class AllocatableClusterResources {
NodeResources sum = new NodeResources(0, 0, 0, 0);
for (Node node : nodes)
sum = sum.add(nodeRepository.resourcesCalculator().realResourcesOf(node, nodeRepository, exclusive).justNumbers());
- return nodes.get(0).resources().justNonNumbers()
+ return nodes.get(0).allocation().get().requestedResources().justNonNumbers()
.withVcpu(sum.vcpu() / nodes.size())
.withMemoryGb(sum.memoryGb() / nodes.size())
.withDiskGb(sum.diskGb() / nodes.size())
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java
index 4b9dc2e6417..3fef1d9746b 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java
@@ -2,6 +2,7 @@
package com.yahoo.vespa.hosted.provision.autoscale;
import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.config.provision.Capacity;
import com.yahoo.config.provision.Cloud;
import com.yahoo.config.provision.ClusterResources;
import com.yahoo.config.provision.ClusterSpec;
@@ -138,6 +139,36 @@ public class AutoscalingTest {
}
@Test
+ public void autoscaling_target_preserves_any() {
+ NodeResources hostResources = new NodeResources(3, 100, 100, 1);
+ AutoscalingTester tester = new AutoscalingTester(hostResources);
+
+ ApplicationId application1 = tester.applicationId("application1");
+ ClusterSpec cluster1 = tester.clusterSpec(ClusterSpec.Type.content, "cluster1");
+
+ // Initial deployment
+ NodeResources resources = new NodeResources(1, 10, 10, 1);
+ var min = new ClusterResources( 2, 1, resources.with(NodeResources.DiskSpeed.any));
+ var max = new ClusterResources( 10, 1, resources.with(NodeResources.DiskSpeed.any));
+ tester.deploy(application1, cluster1, Capacity.from(min, max));
+
+ // Redeployment without target: Uses current resource numbers with *requested* non-numbers (i.e disk-speed any)
+ assertTrue(tester.nodeRepository().applications().get(application1).get().cluster(cluster1.id()).get().targetResources().isEmpty());
+ tester.deploy(application1, cluster1, Capacity.from(min, max));
+ assertEquals(NodeResources.DiskSpeed.any,
+ tester.nodeRepository().nodes().list().owner(application1).cluster(cluster1.id()).first().get()
+ .allocation().get().requestedResources().diskSpeed());
+
+ // Autoscaling: Uses disk-speed any as well
+ tester.clock().advance(Duration.ofDays(2));
+ tester.addCpuMeasurements(0.8f, 1f, 120, application1);
+ Autoscaler.Advice advice = tester.autoscale(application1, cluster1.id(), min, max);
+ assertEquals(NodeResources.DiskSpeed.any, advice.target().get().nodeResources().diskSpeed());
+
+
+ }
+
+ @Test
public void autoscaling_respects_upper_limit() {
NodeResources hostResources = new NodeResources(6, 100, 100, 1);
ClusterResources min = new ClusterResources( 2, 1, new NodeResources(1, 1, 1, 1));
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java
index 3f3655dcab6..0619b0ad645 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java
@@ -74,6 +74,8 @@ class AutoscalingTester {
autoscaler = new Autoscaler(db, nodeRepository());
}
+ public ProvisioningTester provisioning() { return provisioningTester; }
+
public ApplicationId applicationId(String applicationName) {
return ApplicationId.from("tenant1", applicationName, "instance1");
}
@@ -87,7 +89,11 @@ class AutoscalingTester {
}
public List<HostSpec> deploy(ApplicationId application, ClusterSpec cluster, int nodes, int groups, NodeResources resources) {
- List<HostSpec> hosts = provisioningTester.prepare(application, cluster, Capacity.from(new ClusterResources(nodes, groups, resources)));
+ return deploy(application, cluster, Capacity.from(new ClusterResources(nodes, groups, resources)));
+ }
+
+ public List<HostSpec> deploy(ApplicationId application, ClusterSpec cluster, Capacity capacity) {
+ List<HostSpec> hosts = provisioningTester.prepare(application, cluster, capacity);
for (HostSpec host : hosts)
makeReady(host.hostname());
provisioningTester.activateTenantHosts();
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ScalingSuggestionsMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ScalingSuggestionsMaintainerTest.java
index af745608679..78965f0b902 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ScalingSuggestionsMaintainerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ScalingSuggestionsMaintainerTest.java
@@ -72,9 +72,9 @@ public class ScalingSuggestionsMaintainerTest {
new TestMetric());
maintainer.maintain();
- assertEquals("14 nodes with [vcpu: 6.9, memory: 5.1 Gb, disk 15.0 Gb, bandwidth: 0.1 Gbps, storage type: remote]",
+ assertEquals("14 nodes with [vcpu: 6.9, memory: 5.1 Gb, disk 15.0 Gb, bandwidth: 0.1 Gbps]",
suggestionOf(app1, cluster1, tester).get().resources().toString());
- assertEquals("8 nodes with [vcpu: 14.7, memory: 4.0 Gb, disk 11.8 Gb, bandwidth: 0.1 Gbps, storage type: remote]",
+ assertEquals("8 nodes with [vcpu: 14.7, memory: 4.0 Gb, disk 11.8 Gb, bandwidth: 0.1 Gbps]",
suggestionOf(app2, cluster2, tester).get().resources().toString());
// Utilization goes way down
@@ -82,14 +82,14 @@ public class ScalingSuggestionsMaintainerTest {
addMeasurements(0.10f, 0.10f, 0.10f, 0, 500, app1, tester.nodeRepository(), metricsDb);
maintainer.maintain();
assertEquals("Suggestion stays at the peak value observed",
- "14 nodes with [vcpu: 6.9, memory: 5.1 Gb, disk 15.0 Gb, bandwidth: 0.1 Gbps, storage type: remote]",
+ "14 nodes with [vcpu: 6.9, memory: 5.1 Gb, disk 15.0 Gb, bandwidth: 0.1 Gbps]",
suggestionOf(app1, cluster1, tester).get().resources().toString());
// Utilization is still way down and a week has passed
tester.clock().advance(Duration.ofDays(7));
addMeasurements(0.10f, 0.10f, 0.10f, 0, 500, app1, tester.nodeRepository(), metricsDb);
maintainer.maintain();
assertEquals("Peak suggestion has been outdated",
- "6 nodes with [vcpu: 2.0, memory: 4.0 Gb, disk 10.0 Gb, bandwidth: 0.1 Gbps, storage type: remote]",
+ "6 nodes with [vcpu: 2.0, memory: 4.0 Gb, disk 10.0 Gb, bandwidth: 0.1 Gbps]",
suggestionOf(app1, cluster1, tester).get().resources().toString());
assertTrue(shouldSuggest(app1, cluster1, tester));