diff options
author | Jon Bratseth <bratseth@verizonmedia.com> | 2020-03-04 13:40:56 +0100 |
---|---|---|
committer | Jon Bratseth <bratseth@verizonmedia.com> | 2020-03-04 13:40:56 +0100 |
commit | 5fd9d629aca9ab08bf3a87e709c6648889929e14 (patch) | |
tree | e3aa0ff8811d896e39acae51c9cd497970df717b /node-repository | |
parent | ef444e66c24ab1c8b926c09586a6a5a138f64406 (diff) |
Handle remote disk
Diffstat (limited to 'node-repository')
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()); + } + } } |