aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository/src/main/java
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2021-03-18 11:00:52 +0100
committerJon Bratseth <bratseth@gmail.com>2021-03-18 11:00:52 +0100
commite9adf54ff957f0e21b26cc00b44b28f440dc4c05 (patch)
tree3de3d7a0b787bf36304576a222ab1dd26ba0b2fb /node-repository/src/main/java
parent0987fc62387a441099461f8e49af76f78d2ef065 (diff)
Move to ClusterModel
Diffstat (limited to 'node-repository/src/main/java')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Autoscaler.java15
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java9
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterNodesTimeseries.java4
3 files changed, 15 insertions, 13 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Autoscaler.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Autoscaler.java
index 35db29d6f8c..321340331b1 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Autoscaler.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Autoscaler.java
@@ -67,23 +67,20 @@ public class Autoscaler {
if (scaledIn(clusterModel.scalingDuration(), cluster))
return Advice.dontScale("Won't autoscale now: Less than " + clusterModel.scalingDuration() + " since last resource change");
- var clusterNodesTimeseries = new ClusterNodesTimeseries(clusterModel.scalingDuration(), cluster, clusterNodes, metricsDb);
- var currentAllocation = new AllocatableClusterResources(clusterNodes.asList(), nodeRepository, cluster.exclusive());
-
- int measurementsPerNode = clusterNodesTimeseries.measurementsPerNode();
- if (measurementsPerNode < minimumMeasurementsPerNode(clusterModel.scalingDuration()))
+ if (clusterModel.nodeTimeseries().measurementsPerNode() < minimumMeasurementsPerNode(clusterModel.scalingDuration()))
return Advice.none("Collecting more data before making new scaling decisions: Need to measure for " +
clusterModel.scalingDuration() + " since the last resource change completed");
- int nodesMeasured = clusterNodesTimeseries.nodesMeasured();
- if (nodesMeasured != clusterNodes.size())
+ if (clusterModel.nodeTimeseries().nodesMeasured() != clusterNodes.size())
return Advice.none("Collecting more data before making new scaling decisions: " +
- "Have measurements from " + nodesMeasured + " nodes, but require from " + clusterNodes.size());
+ "Have measurements from " + clusterModel.nodeTimeseries().nodesMeasured() +
+ " nodes, but require from " + clusterNodes.size());
+ var currentAllocation = new AllocatableClusterResources(clusterNodes.asList(), nodeRepository, cluster.exclusive());
var clusterTimeseries = metricsDb.getClusterTimeseries(application.id(), cluster.id());
var target = ResourceTarget.idealLoad(clusterModel.scalingDuration(),
clusterTimeseries,
- clusterNodesTimeseries,
+ clusterModel.nodeTimeseries(),
currentAllocation,
application,
nodeRepository.clock());
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 0874ccf63a7..198287ef1bb 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
@@ -1,7 +1,6 @@
// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.provision.autoscale;
-import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.vespa.hosted.provision.Node;
import com.yahoo.vespa.hosted.provision.NodeList;
import com.yahoo.vespa.hosted.provision.NodeRepository;
@@ -25,6 +24,9 @@ public class ClusterModel {
private final MetricsDb metricsDb;
private final NodeRepository nodeRepository;
+ // Lazily initialized members
+ private ClusterNodesTimeseries nodeTimeseries = null;
+
public ClusterModel(Application application,
Cluster cluster,
NodeList clusterNodes,
@@ -37,6 +39,11 @@ public class ClusterModel {
this.nodeRepository = nodeRepository;
}
+ public ClusterNodesTimeseries nodeTimeseries() {
+ if (nodeTimeseries != null) return nodeTimeseries;
+ return nodeTimeseries = new ClusterNodesTimeseries(scalingDuration(), cluster, nodes, metricsDb);
+ }
+
public boolean isStable() {
return isStable(nodes, nodeRepository);
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterNodesTimeseries.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterNodesTimeseries.java
index 2d0e77742ec..c097abd8208 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterNodesTimeseries.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterNodesTimeseries.java
@@ -40,9 +40,7 @@ public class ClusterNodesTimeseries {
}
/** Returns the number of nodes measured in this */
- public int nodesMeasured() {
- return timeseries.size();
- }
+ public int nodesMeasured() { return timeseries.size(); }
/** Returns the average load of this resource in this */
public double averageLoad(Resource resource) {