diff options
author | Jon Bratseth <bratseth@gmail.com> | 2021-03-18 11:00:52 +0100 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2021-03-18 11:00:52 +0100 |
commit | e9adf54ff957f0e21b26cc00b44b28f440dc4c05 (patch) | |
tree | 3de3d7a0b787bf36304576a222ab1dd26ba0b2fb /node-repository | |
parent | 0987fc62387a441099461f8e49af76f78d2ef065 (diff) |
Move to ClusterModel
Diffstat (limited to 'node-repository')
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) { |