diff options
author | Jon Bratseth <bratseth@gmail.com> | 2022-10-28 11:11:30 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2022-10-28 11:11:30 +0200 |
commit | 08b09b27b506c0277241e931ef5ac2756dd302e8 (patch) | |
tree | 18636c97f2379b6d8abc3a7de936b3ff085d92b6 /node-repository | |
parent | 348b4f75f52277c28a1c652e9592f2ff3a41ae03 (diff) |
Refactor: Pass and use NodeList
Diffstat (limited to 'node-repository')
5 files changed, 19 insertions, 10 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeList.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeList.java index 58535b54a1b..bf855661a09 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeList.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeList.java @@ -252,10 +252,20 @@ public class NodeList extends AbstractFilteringList<Node, NodeList> { } /** + * Returns the requested resources of the nodes in this + * + * @throws IllegalStateException if there are no nodes in this list, or they do not all belong to the same cluster + */ + public NodeResources requestedResources() { + ensureSingleCluster(); + if (isEmpty()) throw new IllegalStateException("No nodes"); + return first().get().allocation().get().requestedResources(); + } + + /** * Returns the cluster spec of the nodes in this, without any group designation * - * @throws IllegalStateException if there are no nodes in thus list or they do not all belong - * to the same cluster + * @throws IllegalStateException if there are no nodes in this list, or they do not all belong to the same cluster */ public ClusterSpec clusterSpec() { ensureSingleCluster(); 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 b1b0a101c94..7424ba531e6 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 @@ -43,13 +43,12 @@ public class AllocatableClusterResources { this.fulfilment = 1; } - // TODO: Use NodeList to make the initializers below nicer - public AllocatableClusterResources(List<Node> nodes, NodeRepository nodeRepository) { + public AllocatableClusterResources(NodeList nodes, NodeRepository nodeRepository) { this.nodes = nodes.size(); this.groups = (int)nodes.stream().map(node -> node.allocation().get().membership().cluster().group()).distinct().count(); - this.realResources = averageRealResourcesOf(nodes, nodeRepository); // Average since we average metrics over nodes - this.advertisedResources = nodes.get(0).allocation().get().requestedResources(); - this.clusterSpec = nodes.get(0).allocation().get().membership().cluster(); + this.realResources = averageRealResourcesOf(nodes.asList(), nodeRepository); // Average since we average metrics over nodes + this.advertisedResources = nodes.requestedResources(); + this.clusterSpec = nodes.clusterSpec(); this.fulfilment = 1; } 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 4d50250e61a..689b5a9a950 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 @@ -68,7 +68,7 @@ public class Autoscaler { if ( ! clusterIsStable(clusterNodes, nodeRepository)) return Advice.none(Status.waiting, "Cluster change in progress"); - var currentAllocation = new AllocatableClusterResources(clusterNodes.asList(), nodeRepository); + var currentAllocation = new AllocatableClusterResources(clusterNodes, nodeRepository); Optional<AllocatableClusterResources> bestAllocation = allocationOptimizer.findBestAllocation(clusterModel.loadAdjustment(), currentAllocation, clusterModel, limits); if (bestAllocation.isEmpty()) diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainer.java index 466582b88e6..1bbed972936 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainer.java @@ -86,7 +86,7 @@ public class AutoscalingMaintainer extends NodeRepositoryMaintainer { applications().put(application.get().with(updatedCluster), lock); if (advice.isPresent() && advice.target().isPresent() && !cluster.get().targetResources().equals(advice.target())) { // 2. Also autoscale - ClusterResources before = new AllocatableClusterResources(clusterNodes.asList(), nodeRepository()).advertisedResources(); + ClusterResources before = new AllocatableClusterResources(clusterNodes, nodeRepository()).advertisedResources(); try (MaintenanceDeployment deployment = new MaintenanceDeployment(applicationId, deployer, metric, nodeRepository())) { if (deployment.isValid()) { deployment.activate(); 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 ce87abd2dde..87fa48f15ad 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 @@ -168,7 +168,7 @@ public class NodeRepositoryProvisioner implements Provisioner { AllocatableClusterResources currentResources = firstDeployment // start at min, preserve current resources otherwise ? new AllocatableClusterResources(initialResourcesFrom(requested, clusterSpec, application.id()), clusterSpec, nodeRepository) - : new AllocatableClusterResources(nodes.asList(), nodeRepository); + : new AllocatableClusterResources(nodes, nodeRepository); var clusterModel = new ClusterModel(application, clusterSpec, cluster, nodes, nodeRepository.metricsDb(), nodeRepository.clock()); return within(Limits.of(requested), currentResources, firstDeployment, clusterModel); } |