diff options
author | Jon Bratseth <bratseth@gmail.com> | 2020-05-27 14:09:19 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2020-05-27 14:09:19 +0200 |
commit | 683855764e234ee1f12fabc10987d190bc3bbac1 (patch) | |
tree | 6db8a14e057ef05d72d0fc423f9df88f98ace493 /node-repository | |
parent | c8ae53bbc4499fe8fe0e8b480440fbbbb2737779 (diff) |
Map both ways
Diffstat (limited to 'node-repository')
6 files changed, 41 insertions, 30 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 65673c12209..b5a5d1e06b4 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 @@ -138,8 +138,8 @@ public class AllocatableClusterResources { 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 advertisedResources = cappedNodeResources.add(nodeRepository.resourcesCalculator().overheadAllocating(cappedNodeResources, exclusive)); NodeResources realResources = cappedNodeResources; + NodeResources advertisedResources = nodeRepository.resourcesCalculator().realToRequest(realResources); for (Flavor flavor : nodeRepository.flavors().getFlavors()) { if (flavor.resources().satisfies(advertisedResources)) return Optional.of(new AllocatableClusterResources(resources.with(realResources), @@ -154,7 +154,7 @@ public class AllocatableClusterResources { for (Flavor flavor : nodeRepository.flavors().getFlavors()) { // Flavor decide resources: Real resources are the worst case real resources we'll get if we ask for these advertised resources NodeResources advertisedResources = nodeRepository.resourcesCalculator().advertisedResourcesOf(flavor); - NodeResources realResources = advertisedResources.subtract(nodeRepository.resourcesCalculator().overheadAllocating(advertisedResources, exclusive)); + NodeResources realResources = nodeRepository.resourcesCalculator().requestToReal(advertisedResources); // Adjust where we don't need exact match to the flavor if (flavor.resources().storageType() == NodeResources.StorageType.remote) { 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 a6caa7edf8b..e4b1e0fcbc0 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 @@ -34,19 +34,16 @@ public class EmptyProvisionServiceProvider implements ProvisionServiceProvider { private static class IdentityHostResourcesCalculator implements HostResourcesCalculator { @Override - public NodeResources realResourcesOf(Node node, NodeRepository repository) { - return node.flavor().resources(); - } + public NodeResources realResourcesOf(Node node, NodeRepository repository) { return node.flavor().resources(); } @Override - public NodeResources advertisedResourcesOf(Flavor flavor) { - return flavor.resources(); - } + public NodeResources advertisedResourcesOf(Flavor flavor) { return flavor.resources(); } @Override - public NodeResources overheadAllocating(NodeResources resources, boolean exclusive) { - return resources.withVcpu(0).withMemoryGb(0).withDiskGb(0).withBandwidthGbps(0); - } + public NodeResources requestToReal(NodeResources resources) { return resources; } + + @Override + public NodeResources realToRequest(NodeResources resources) { return 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 d1b7da2e0b5..a071fb25da2 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 @@ -23,13 +23,15 @@ public interface HostResourcesCalculator { NodeResources advertisedResourcesOf(Flavor flavor); /** - * Returns the highest possible overhead (difference between advertised and real) which may result - * from requesting the given advertised resources - * - * @return a NodeResources containing the *difference* between the given advertised resources - * and the (worst case) real resources we'll observe. This is always compatible with the - * given resources. + * Used with exclusive hosts: + * Returns the lowest possible real resources we'll get if requesting the given advertised resources */ - NodeResources overheadAllocating(NodeResources resources, boolean exclusive); + NodeResources requestToReal(NodeResources advertisedResources); + + /** + * Used with shared hosts: + * Returns the advertised resources we need to request to be sure to get at least the given real resources. + */ + NodeResources realToRequest(NodeResources realResources); } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java index 969a5788fca..69ef64d2e3c 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java @@ -391,8 +391,13 @@ public class AutoscalingTest { } @Override - public NodeResources overheadAllocating(NodeResources resources, boolean exclusive) { - return resources.withVcpu(0).withMemoryGb(memoryTaxGb).withDiskGb(0).withBandwidthGbps(0); + public NodeResources requestToReal(NodeResources resources) { + return resources.withMemoryGb(resources.memoryGb() - memoryTaxGb); + } + + @Override + public NodeResources realToRequest(NodeResources resources) { + return resources.withMemoryGb(resources.memoryGb() + memoryTaxGb); } } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java index 940499854e8..963ca0d4341 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java @@ -32,6 +32,7 @@ import java.util.List; import java.util.Optional; import java.util.Set; +import static com.yahoo.config.provision.NodeResources.StorageType.local; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -220,11 +221,13 @@ class AutoscalingTester { } @Override - public NodeResources overheadAllocating(NodeResources resources, boolean exclusive) { - return resources.withVcpu(0) - .withMemoryGb(zone.getCloud().dynamicProvisioning() ? 3 : 0) - .withDiskGb(0) - .withBandwidthGbps(0); + public NodeResources requestToReal(NodeResources resources) { + return resources.withMemoryGb(resources.memoryGb() - 3); + } + + @Override + public NodeResources realToRequest(NodeResources resources) { + return resources.withMemoryGb(resources.memoryGb() + 3); } } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisionTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisionTest.java index ea7651b0c9b..087f8f83f0c 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisionTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisionTest.java @@ -391,11 +391,15 @@ public class DynamicDockerProvisionTest { } @Override - public NodeResources overheadAllocating(NodeResources resources, boolean exclusive) { - return resources.withVcpu(0) - .withMemoryGb(memoryTaxGb) - .withDiskGb(resources.storageType() == local ? localDiskTax : 0) - .withBandwidthGbps(0); + public NodeResources requestToReal(NodeResources resources) { + return resources.withMemoryGb(resources.memoryGb() - memoryTaxGb) + .withDiskGb(resources.diskGb() - ( resources.storageType() == local ? localDiskTax : 0) ); + } + + @Override + public NodeResources realToRequest(NodeResources resources) { + return resources.withMemoryGb(resources.memoryGb() + memoryTaxGb) + .withDiskGb(resources.diskGb() + ( resources.storageType() == local ? localDiskTax : 0) ); } } |