diff options
Diffstat (limited to 'node-repository')
2 files changed, 18 insertions, 8 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 59dbe4bb8d4..30aaf938139 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 @@ -144,15 +144,19 @@ public class AllocatableClusterResources { public static Optional<AllocatableClusterResources> from(ClusterResources resources, boolean exclusive, ClusterSpec.Type clusterType, - Limits limits, + Limits applicationLimits, NodeRepository nodeRepository) { - NodeResources cappedNodeResources = limits.cap(resources.nodeResources()); - cappedNodeResources = new NodeResourceLimits(nodeRepository).enlargeToLegal(cappedNodeResources, clusterType); + var systemLimits = new NodeResourceLimits(nodeRepository); + NodeResources cappedNodeResources = applicationLimits.cap(resources.nodeResources()); + cappedNodeResources = systemLimits.enlargeToLegal(cappedNodeResources, clusterType); if ( !exclusive && nodeRepository.zone().getCloud().allowHostSharing()) { // Check if any flavor can fit these hosts // We decide resources: Add overhead to what we'll request (advertised) to make sure real becomes (at least) cappedNodeResources NodeResources realResources = cappedNodeResources; NodeResources advertisedResources = nodeRepository.resourcesCalculator().realToRequest(realResources); + + if ( ! systemLimits.isWithinRealLimits(realResources, clusterType)) return Optional.empty(); + for (Flavor flavor : nodeRepository.flavors().getFlavors()) { if (flavor.resources().satisfies(advertisedResources)) return Optional.of(new AllocatableClusterResources(resources.with(realResources), @@ -179,7 +183,8 @@ public class AllocatableClusterResources { realResources = realResources.withBandwidthGbps(cappedNodeResources.bandwidthGbps()); } - if ( ! between(limits.min().nodeResources(), limits.max().nodeResources(), advertisedResources)) continue; + if ( ! between(applicationLimits.min().nodeResources(), applicationLimits.max().nodeResources(), advertisedResources)) continue; + if ( ! systemLimits.isWithinRealLimits(realResources, clusterType)) continue; var candidate = new AllocatableClusterResources(resources.with(realResources), advertisedResources, resources.nodeResources(), 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 db54fd316f6..06085caa2ee 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 @@ -35,12 +35,17 @@ public class NodeResourceLimits { /** Returns whether the real resources we'll end up with on a given tenant node are within limits */ public boolean isWithinRealLimits(Node candidateTenantNode, ClusterSpec cluster) { - NodeResources realResources = nodeRepository.resourcesCalculator().realResourcesOf(candidateTenantNode, nodeRepository); + return isWithinRealLimits(nodeRepository.resourcesCalculator().realResourcesOf(candidateTenantNode, nodeRepository), + cluster.type()); + } - if (realResources.memoryGb() < minRealMemoryGb(cluster.type())) return false; - if (realResources.diskGb() < minRealDiskGb()) return false; + /** Returns whether the real resources we'll end up with on a given tenant node are within limits */ + public boolean isWithinRealLimits(NodeResources realResources, ClusterSpec.Type clusterType) { + if (realResources.isUnspecified()) return true; - return true; + if (realResources.memoryGb() < minRealMemoryGb(clusterType)) return false; + if (realResources.diskGb() < minRealDiskGb()) return false; + return true; } public NodeResources enlargeToLegal(NodeResources requested, ClusterSpec.Type clusterType) { |