summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2021-03-18 13:08:40 +0100
committerJon Bratseth <bratseth@gmail.com>2021-03-18 13:08:40 +0100
commit95a73e1587180eee3a272aed8a02e865943666cc (patch)
treefd6d5d24159faad6af5ad3111d58327ea6efe4f8 /node-repository
parent84de29b18b5241af78eb4f8894d13dbe6d44152d (diff)
Move to ClusterModel
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java17
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Resource.java6
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java6
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ScalingSuggestionsMaintainerTest.java5
4 files changed, 15 insertions, 19 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java
index ac1077a42ae..4fb91e8592e 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java
@@ -18,6 +18,11 @@ import java.util.OptionalDouble;
*/
public class ClusterModel {
+ static final double idealQueryCpuLoad = 0.8;
+ static final double idealWriteCpuLoad = 0.95;
+ static final double idealMemoryLoad = 0.7;
+ static final double idealDiskLoad = 0.6;
+
private final Application application;
private final Cluster cluster;
private final NodeList nodes;
@@ -93,7 +98,9 @@ public class ClusterModel {
public double idealLoad(Resource resource) {
switch (resource) {
case cpu : return idealCpuLoad();
- default : return resource.idealAverageLoad(); // TODO: Move here
+ case memory : return idealMemoryLoad;
+ case disk : return idealDiskLoad;
+ default : throw new IllegalStateException("No ideal load defined for " + resource);
}
}
@@ -121,8 +128,8 @@ public class ClusterModel {
// Assumptions: 1) Write load is not organic so we should not grow to handle more.
// (TODO: But allow applications to set their target write rate and size for that)
// 2) Write load does not change in BCP scenarios.
- return queryCpuFraction * 1 / growthRateHeadroom * 1 / trafficShiftHeadroom * idealQueryCpuLoad() +
- (1 - queryCpuFraction) * idealWriteCpuLoad();
+ return queryCpuFraction * 1 / growthRateHeadroom * 1 / trafficShiftHeadroom * idealQueryCpuLoad +
+ (1 - queryCpuFraction) * idealWriteCpuLoad;
}
private double queryCpuFraction() {
@@ -138,10 +145,6 @@ public class ClusterModel {
return queryFraction * relativeQueryCost / (queryFraction * relativeQueryCost + writeFraction);
}
- public static double idealQueryCpuLoad() { return Resource.cpu.idealAverageLoad(); }
-
- public static double idealWriteCpuLoad() { return 0.95; }
-
private static Duration computeScalingDuration(Cluster cluster, NodeList nodes) {
int completedEventCount = 0;
Duration totalDuration = Duration.ZERO;
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Resource.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Resource.java
index b841b31833f..c639ad1f779 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Resource.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Resource.java
@@ -12,25 +12,19 @@ public enum Resource {
/** Cpu utilization ratio */
cpu {
- public double idealAverageLoad() { return 0.8; }
double valueFrom(NodeResources resources) { return resources.vcpu(); }
},
/** Memory utilization ratio */
memory {
- public double idealAverageLoad() { return 0.7; }
double valueFrom(NodeResources resources) { return resources.memoryGb(); }
},
/** Disk utilization ratio */
disk {
- public double idealAverageLoad() { return 0.6; }
double valueFrom(NodeResources resources) { return resources.diskGb(); }
};
- /** The load we should have of this resource on average, when one node in the cluster is down */
- public abstract double idealAverageLoad();
-
abstract double valueFrom(NodeResources resources);
}
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 cc3eeb47073..89da20c5550 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
@@ -141,8 +141,8 @@ class AutoscalingTester {
clock().advance(Duration.ofMinutes(5));
for (Node node : nodes) {
float cpu = value * oneExtraNodeFactor;
- float memory = (float) Resource.memory.idealAverageLoad() * otherResourcesLoad * oneExtraNodeFactor;
- float disk = (float) Resource.disk.idealAverageLoad() * otherResourcesLoad * oneExtraNodeFactor;
+ float memory = (float) ClusterModel.idealMemoryLoad * otherResourcesLoad * oneExtraNodeFactor;
+ float disk = (float) ClusterModel.idealDiskLoad * otherResourcesLoad * oneExtraNodeFactor;
db.addNodeMetrics(List.of(new Pair<>(node.hostname(), new NodeMetricSnapshot(clock().instant(),
cpu,
memory,
@@ -174,7 +174,7 @@ class AutoscalingTester {
for (Node node : nodes) {
float cpu = (float) 0.2 * otherResourcesLoad * oneExtraNodeFactor;
float memory = value * oneExtraNodeFactor;
- float disk = (float) Resource.disk.idealAverageLoad() * otherResourcesLoad * oneExtraNodeFactor;
+ float disk = (float) ClusterModel.idealDiskLoad * otherResourcesLoad * oneExtraNodeFactor;
db.addNodeMetrics(List.of(new Pair<>(node.hostname(), new NodeMetricSnapshot(clock().instant(),
cpu,
memory,
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 9ae67cef235..10851252c98 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
@@ -17,6 +17,7 @@ import com.yahoo.vespa.hosted.provision.Node;
import com.yahoo.vespa.hosted.provision.NodeList;
import com.yahoo.vespa.hosted.provision.NodeRepository;
import com.yahoo.vespa.hosted.provision.applications.Cluster;
+import com.yahoo.vespa.hosted.provision.autoscale.ClusterModel;
import com.yahoo.vespa.hosted.provision.autoscale.NodeMetricSnapshot;
import com.yahoo.vespa.hosted.provision.autoscale.MetricsDb;
import com.yahoo.vespa.hosted.provision.autoscale.Resource;
@@ -99,9 +100,7 @@ public class ScalingSuggestionsMaintainerTest {
var suggested = tester.nodeRepository().applications().get(app1).get().cluster(cluster1.id()).get().suggestedResources().get().resources();
tester.deploy(app1, cluster1, Capacity.from(suggested, suggested, false, true));
tester.clock().advance(Duration.ofDays(2));
- addMeasurements(0.2f,
- (float)Resource.memory.idealAverageLoad(),
- (float)Resource.disk.idealAverageLoad(),
+ addMeasurements(0.2f, 0.7f, 0.6f,
0, 500, app1, tester.nodeRepository(), metricsDb);
maintainer.maintain();
assertEquals("Suggestion is to keep the current allocation",