summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2020-05-27 14:09:19 +0200
committerJon Bratseth <bratseth@gmail.com>2020-05-27 14:09:19 +0200
commit683855764e234ee1f12fabc10987d190bc3bbac1 (patch)
tree6db8a14e057ef05d72d0fc423f9df88f98ace493 /node-repository
parentc8ae53bbc4499fe8fe0e8b480440fbbbb2737779 (diff)
Map both ways
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocatableClusterResources.java4
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/EmptyProvisionServiceProvider.java15
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/HostResourcesCalculator.java16
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java9
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java13
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisionTest.java14
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) );
}
}