diff options
author | Valerij Fredriksen <valerijf@verizonmedia.com> | 2021-09-07 16:41:18 +0200 |
---|---|---|
committer | Valerij Fredriksen <valerijf@verizonmedia.com> | 2021-09-07 16:41:18 +0200 |
commit | bd665d96209b6e18fd3dda5c70a82f454bcb89ca (patch) | |
tree | db2512a5d5fdec70d645635a9f7dc727ddb905e0 /node-repository/src/main/java | |
parent | a52ad2d89cf45d2c8812885d130276331baee0be (diff) |
Do not pass exclusive when calculating real resources
Diffstat (limited to 'node-repository/src/main/java')
8 files changed, 14 insertions, 21 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 b799e0056f3..2db645a67b3 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,10 +43,10 @@ public class AllocatableClusterResources { this.fulfilment = 1; } - public AllocatableClusterResources(List<Node> nodes, NodeRepository nodeRepository, boolean exclusive) { + public AllocatableClusterResources(List<Node> 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, exclusive); // Average since we average metrics over nodes + 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.fulfilment = 1; @@ -124,10 +124,10 @@ public class AllocatableClusterResources { (fulfilment < 1.0 ? " (fulfilment " + fulfilment + ")" : ""); } - private static NodeResources averageRealResourcesOf(List<Node> nodes, NodeRepository nodeRepository, boolean exclusive) { + private static NodeResources averageRealResourcesOf(List<Node> nodes, NodeRepository nodeRepository) { NodeResources sum = new NodeResources(0, 0, 0, 0); for (Node node : nodes) - sum = sum.add(nodeRepository.resourcesCalculator().realResourcesOf(node, nodeRepository, exclusive).justNumbers()); + sum = sum.add(nodeRepository.resourcesCalculator().realResourcesOf(node, nodeRepository).justNumbers()); return nodes.get(0).allocation().get().requestedResources().justNonNumbers() .withVcpu(sum.vcpu() / nodes.size()) .withMemoryGb(sum.memoryGb() / nodes.size()) 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 ccaf23c49ed..836b256a1b3 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 @@ -85,7 +85,7 @@ public class Autoscaler { "Have measurements from " + clusterModel.nodeTimeseries().nodesMeasured() + " nodes, but require from " + clusterNodes.size()); - var currentAllocation = new AllocatableClusterResources(clusterNodes.asList(), nodeRepository, cluster.exclusive()); + var currentAllocation = new AllocatableClusterResources(clusterNodes.asList(), nodeRepository); var target = ResourceTarget.idealLoad(clusterModel, currentAllocation); Optional<AllocatableClusterResources> bestAllocation = 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 3914a0c9f07..6f617e9ff23 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 @@ -82,7 +82,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 - logAutoscaling(advice.target().get(), applicationId, updatedCluster, clusterNodes); + logAutoscaling(advice.target().get(), applicationId, clusterNodes); try (MaintenanceDeployment deployment = new MaintenanceDeployment(applicationId, deployer, metric, nodeRepository())) { if (deployment.isValid()) deployment.activate(); @@ -121,11 +121,8 @@ public class AutoscalingMaintainer extends NodeRepositoryMaintainer { return cluster.with(event.withCompletion(completionTime)); } - private void logAutoscaling(ClusterResources target, - ApplicationId application, - Cluster cluster, - NodeList clusterNodes) { - ClusterResources current = new AllocatableClusterResources(clusterNodes.asList(), nodeRepository(), cluster.exclusive()).advertisedResources(); + private void logAutoscaling(ClusterResources target, ApplicationId application, NodeList clusterNodes) { + ClusterResources current = new AllocatableClusterResources(clusterNodes.asList(), nodeRepository()).advertisedResources(); log.info("Autoscaling " + application + " " + clusterNodes.clusterSpec() + ":" + "\nfrom " + toString(current) + "\nto " + toString(target)); } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/EmptyProvisionServiceProvider.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/EmptyProvisionServiceProvider.java index 599f6b8bcb0..fa86fd9a29e 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/EmptyProvisionServiceProvider.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/EmptyProvisionServiceProvider.java @@ -35,7 +35,7 @@ public class EmptyProvisionServiceProvider implements ProvisionServiceProvider { private static class IdentityHostResourcesCalculator implements HostResourcesCalculator { @Override - public NodeResources realResourcesOf(Nodelike node, NodeRepository repository, boolean exclusive) { return node.resources(); } + public NodeResources realResourcesOf(Nodelike node, NodeRepository repository) { return node.resources(); } @Override public NodeResources advertisedResourcesOf(Flavor flavor) { return flavor.resources(); } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/HostResourcesCalculator.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/HostResourcesCalculator.java index fc7023be743..92d7ba95604 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/HostResourcesCalculator.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/HostResourcesCalculator.java @@ -19,7 +19,7 @@ import com.yahoo.vespa.hosted.provision.Nodelike; public interface HostResourcesCalculator { /** Returns the real resources available on a node */ - NodeResources realResourcesOf(Nodelike node, NodeRepository nodeRepository, boolean exclusive); + NodeResources realResourcesOf(Nodelike node, NodeRepository nodeRepository); /** Returns the advertised resources of a flavor */ NodeResources advertisedResourcesOf(Flavor flavor); 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 24d23f13bb5..74f354feb30 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 @@ -161,7 +161,7 @@ public class NodeRepositoryProvisioner implements Provisioner { AllocatableClusterResources currentResources = firstDeployment // start at min, preserve current resources otherwise ? new AllocatableClusterResources(requested.minResources(), clusterSpec, nodeRepository) - : new AllocatableClusterResources(nodes.asList(), nodeRepository, clusterSpec.isExclusive()); + : new AllocatableClusterResources(nodes.asList(), nodeRepository); var clusterModel = new ClusterModel(application, cluster, clusterSpec, nodes, nodeRepository.metricsDb(), nodeRepository.clock()); return within(Limits.of(requested), currentResources, firstDeployment, clusterModel); } @@ -199,7 +199,7 @@ public class NodeRepositoryProvisioner implements Provisioner { log.log(Level.FINE, () -> "Prepared node " + node.hostname() + " - " + node.flavor()); Allocation nodeAllocation = node.allocation().orElseThrow(IllegalStateException::new); hosts.add(new HostSpec(node.hostname(), - nodeRepository.resourcesCalculator().realResourcesOf(node, nodeRepository, node.allocation().get().membership().cluster().isExclusive()), + nodeRepository.resourcesCalculator().realResourcesOf(node, nodeRepository), node.flavor().resources(), requestedResources, nodeAllocation.membership(), diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeResourceLimits.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeResourceLimits.java index 0b007bf4a41..2dbb17dfd9a 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeResourceLimits.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeResourceLimits.java @@ -41,10 +41,7 @@ public class NodeResourceLimits { /** Returns whether the real resources we'll end up with on a given tenant node are within limits */ public boolean isWithinRealLimits(NodeCandidate candidateNode, ClusterSpec cluster) { if (candidateNode.type() != NodeType.tenant) return true; // Resource limits only apply to tenant nodes - // This node is allocated exclusively if that has been explicitly requested, or if the host of the node was - // provisioned exclusively - boolean exclusive = cluster.isExclusive() || candidateNode.parent.flatMap(Node::exclusiveToApplicationId).isPresent(); - return isWithinRealLimits(nodeRepository.resourcesCalculator().realResourcesOf(candidateNode, nodeRepository, exclusive), + return isWithinRealLimits(nodeRepository.resourcesCalculator().realResourcesOf(candidateNode, nodeRepository), cluster.type()); } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesResponse.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesResponse.java index 8c17cae3aa0..2cf671514c4 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesResponse.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesResponse.java @@ -117,8 +117,7 @@ class NodesResponse extends SlimeJsonResponse { } private void toSlime(Node node, boolean allFields, Cursor object) { - NodeResources realResources = nodeRepository.resourcesCalculator().realResourcesOf( - node, nodeRepository, node.allocation().map(a -> a.membership().cluster().isExclusive()).orElse(false)); + NodeResources realResources = nodeRepository.resourcesCalculator().realResourcesOf(node, nodeRepository); object.setString("url", nodeParentUrl + node.hostname()); if ( ! allFields) return; |