summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@verizonmedia.com>2020-03-04 13:40:56 +0100
committerJon Bratseth <bratseth@verizonmedia.com>2020-03-04 13:40:56 +0100
commit5fd9d629aca9ab08bf3a87e709c6648889929e14 (patch)
treee3aa0ff8811d896e39acae51c9cd497970df717b /node-repository
parentef444e66c24ab1c8b926c09586a6a5a138f64406 (diff)
Handle remote disk
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/Autoscaler.java3
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java12
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java11
3 files changed, 18 insertions, 8 deletions
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 31f3ed5fc95..f1d209b2ade 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
@@ -6,6 +6,7 @@ import com.yahoo.config.provision.CloudName;
import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.Flavor;
import com.yahoo.config.provision.NodeResources;
+import com.yahoo.config.provision.host.FlavorOverrides;
import com.yahoo.vespa.hosted.provision.Node;
import com.yahoo.vespa.hosted.provision.NodeRepository;
import com.yahoo.vespa.hosted.provision.provisioning.HostResourcesCalculator;
@@ -142,6 +143,8 @@ public class Autoscaler {
Optional<Flavor> bestFlavor = Optional.empty();
for (Flavor flavor : nodeRepository.getAvailableFlavors().getFlavors()) {
if ( ! flavor.resources().satisfies(resources.nodeResources())) continue;
+ if (flavor.resources().storageType() == NodeResources.StorageType.remote)
+ flavor = flavor.with(FlavorOverrides.ofDisk(resources.nodeResources().diskGb()));
if (bestFlavor.isEmpty() || bestCost > costOf(flavor.resources())) {
bestFlavor = Optional.of(flavor);
bestCost = costOf(flavor);
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 fd0517a6e50..939a9fcdf31 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
@@ -114,9 +114,9 @@ public class AutoscalingTest {
public void testAutoscalingAws() {
List<Flavor> flavors = new ArrayList<>();
flavors.add(new Flavor("aws-xlarge", new NodeResources(3, 200, 100, 1, NodeResources.DiskSpeed.fast, NodeResources.StorageType.remote)));
- flavors.add(new Flavor("aws-large", new NodeResources(3, 150, 100, 1, NodeResources.DiskSpeed.fast, NodeResources.StorageType.remote)));
+ flavors.add(new Flavor("aws-large", new NodeResources(3, 150, 100, 1, NodeResources.DiskSpeed.fast, NodeResources.StorageType.remote)));
flavors.add(new Flavor("aws-medium", new NodeResources(3, 100, 100, 1, NodeResources.DiskSpeed.fast, NodeResources.StorageType.remote)));
- flavors.add(new Flavor("aws-small", new NodeResources(3, 80, 100, 1, NodeResources.DiskSpeed.fast, NodeResources.StorageType.remote)));
+ flavors.add(new Flavor("aws-small", new NodeResources(3, 80, 100, 1, NodeResources.DiskSpeed.fast, NodeResources.StorageType.remote)));
AutoscalingTester tester = new AutoscalingTester(new Zone(CloudName.from("aws"), SystemName.main,
Environment.prod, RegionName.from("us-east")),
flavors);
@@ -128,10 +128,8 @@ public class AutoscalingTest {
tester.deploy(application1, cluster1, 5, 1, new NodeResources(3, 100, 100, 1));
tester.addMeasurements(Resource.memory, 0.9f, 0.6f, 120, application1);
- ClusterResources scaledResources = tester.assertResources("Scaling up since resource usage is too high." +
- "Scaling flavor not count since the latter is more expensive due to " +
- "memory charged but taken by aws, see MockHostResourcesCalculator",
- 5, 1, 3, 150, 100,
+ ClusterResources scaledResources = tester.assertResources("Scaling up since resource usage is too high.",
+ 8, 1, 3, 80, 34.3,
tester.autoscale(application1, cluster1));
tester.deploy(application1, cluster1, scaledResources);
@@ -140,7 +138,7 @@ public class AutoscalingTest {
tester.addMeasurements(Resource.memory, 0.3f, 0.6f, 1000, application1);
System.out.println("Low memory usage");
tester.assertResources("Scaling down since resource usage has gone down",
- 4, 1, 3, 100, 100,
+ 5, 1, 3, 80, 36,
tester.autoscale(application1, cluster1));
}
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 66a883aec2e..1b0ccc3611c 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
@@ -220,7 +220,7 @@ class AutoscalingTester {
@Override
public List<ProvisionedHost> provisionHosts(List<Integer> provisionIndexes, NodeResources resources, ApplicationId applicationId) {
- Flavor hostFlavor = hostFlavors.stream().filter(f -> f.resources().justNumbers().equals(resources.justNumbers())).findAny()
+ Flavor hostFlavor = hostFlavors.stream().filter(f -> matches(f, resources)).findAny()
.orElseThrow(() -> new RuntimeException("No flavor matching " + resources + ". Flavors: " + hostFlavors));
List<ProvisionedHost> hosts = new ArrayList<>();
@@ -244,6 +244,15 @@ class AutoscalingTester {
throw new RuntimeException("Not implemented");
}
+ private boolean matches(Flavor flavor, NodeResources resources) {
+ NodeResources flavorResources = flavor.resources();
+ if (flavorResources.storageType() == NodeResources.StorageType.remote
+ && resources.diskGb() <= flavorResources.diskGb())
+ flavorResources = flavorResources.withDiskGb(resources.diskGb());
+
+ return flavorResources.justNumbers().equals(resources.justNumbers());
+ }
+
}
}