diff options
author | Valerij Fredriksen <freva@users.noreply.github.com> | 2020-05-15 14:14:54 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-15 14:14:54 +0200 |
commit | 737f467373ce178c15c95fc0fe824fc14351eb62 (patch) | |
tree | 7b1b0b3950e2642ca9a8c52b14aa66f7cbbcadc7 /node-repository/src/main | |
parent | ca294b0a05520dff341016d2fc75056ac75b0d8e (diff) | |
parent | 80408fa890d7f89bd870bf95c12a258d0764244a (diff) |
Merge pull request #13267 from vespa-engine/bratseth/disk-limit-improvements
Disk limit handling improvements
Diffstat (limited to 'node-repository/src/main')
4 files changed, 13 insertions, 12 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java index fdbf58cda3d..5c990f0a3f3 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java @@ -52,8 +52,7 @@ public class CapacityPolicies { target = target.with(NodeResources.DiskSpeed.any).with(NodeResources.StorageType.any); // Dev does not cap the cpu of containers since usage is spotty: Allocate just a small amount exclusively - // Do not cap in AWS as hosts are allocated on demand and 1-to-1, so the node can use the entire host - if (zone.environment() == Environment.dev && !zone.region().value().contains("aws-")) + if (zone.environment() == Environment.dev && zone.getCloud().allowHostSharing()) target = target.withVcpu(0.1); return target; diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeAllocation.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeAllocation.java index ca9cbc418bb..0544b675a6f 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeAllocation.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeAllocation.java @@ -113,7 +113,7 @@ class NodeAllocation { if (requestedNodes.considerRetiring()) { boolean wantToRetireNode = false; - // if ( ! nodeResourceLimits.isWithinRealLimits(offered, cluster)) wantToRetireNode = true; + if ( ! nodeResourceLimits.isWithinRealLimits(offered, cluster)) wantToRetireNode = true; if (violatesParentHostPolicy(this.nodes, offered)) wantToRetireNode = true; if ( ! hasCompatibleFlavor(node)) wantToRetireNode = true; if (offered.status().wantToRetire()) wantToRetireNode = true; @@ -127,12 +127,10 @@ class NodeAllocation { } } else if (! saturated() && hasCompatibleFlavor(node)) { - /* if ( ! nodeResourceLimits.isWithinRealLimits(offered, cluster)) { ++rejectedDueToInsufficientRealResources; continue; } - */ if ( violatesParentHostPolicy(this.nodes, offered)) { ++rejectedDueToClashingParentHost; continue; 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 4f66794fa84..913357b16ca 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 @@ -163,11 +163,11 @@ public class NodeRepositoryProvisioner implements Provisioner { AllocatableClusterResources currentResources = nodes.isEmpty() ? new AllocatableClusterResources(requested.minResources(), clusterSpec.type()) // new deployment: Use min : new AllocatableClusterResources(nodes, nodeRepository); - return ensureWithin(Limits.of(requested), currentResources); + return within(Limits.of(requested), currentResources); } /** Make the minimal adjustments needed to the current resources to stay within the limits */ - private ClusterResources ensureWithin(Limits limits, AllocatableClusterResources current) { + private ClusterResources within(Limits limits, AllocatableClusterResources current) { if (limits.isEmpty()) return current.toAdvertisedClusterResources(); if (limits.min().equals(limits.max())) return limits.min(); @@ -202,7 +202,7 @@ public class NodeRepositoryProvisioner implements Provisioner { Optional.of(nodeAllocation.membership()), node.status().vespaVersion(), nodeAllocation.networkPorts(), - requestedResources == NodeResources.unspecified ? Optional.empty() : Optional.of(requestedResources), + requestedResources.isUnspecified() ? Optional.empty() : Optional.of(requestedResources), node.status().dockerImage())); if (nodeAllocation.networkPorts().isPresent()) { log.log(Level.FINE, () -> "Prepared node " + node.hostname() + " has port allocations"); 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 94d25d7cabc..db54fd316f6 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 @@ -43,8 +43,11 @@ public class NodeResourceLimits { return true; } - public NodeResources enlargeToLegal(NodeResources advertisedResources, ClusterSpec.Type clusterType) { - return advertisedResources.withMemoryGb(Math.max(minAdvertisedMemoryGb(clusterType), advertisedResources.memoryGb())); + public NodeResources enlargeToLegal(NodeResources requested, ClusterSpec.Type clusterType) { + if (requested.isUnspecified()) return requested; + + return requested.withMemoryGb(Math.max(minAdvertisedMemoryGb(clusterType), requested.memoryGb())) + .withDiskGb(Math.max(minAdvertisedDiskGb(requested), requested.diskGb())); } private double minAdvertisedMemoryGb(ClusterSpec.Type clusterType) { @@ -58,6 +61,7 @@ public class NodeResourceLimits { } private double minAdvertisedDiskGb(NodeResources requested) { + if (requested.storageType() == NodeResources.StorageType.local && nodeRepository.zone().getCloud().dynamicProvisioning()) { if (nodeRepository.zone().system() == SystemName.Public) @@ -65,11 +69,11 @@ public class NodeResourceLimits { else return 55 + minRealDiskGb(); } - return minRealDiskGb(); + return 4 + minRealDiskGb(); } private double minRealDiskGb() { - return 10; + return 6; } private void illegal(String type, String resource, ClusterSpec cluster, double requested, double minAllowed) { |