diff options
author | Jon Bratseth <bratseth@gmail.com> | 2020-05-02 20:18:51 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2020-05-02 20:18:51 +0200 |
commit | 7fe474f2f3db889c801d2d453f4eba4c6ea5b553 (patch) | |
tree | 609089a5ac7a4e4d68f5b6a0ff181b38de418fbd /node-repository | |
parent | 9d3eab473716738afee17f89fc2a22b8bd81ecd2 (diff) |
Don't match bandwidth
Diffstat (limited to 'node-repository')
4 files changed, 20 insertions, 16 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 89207d4e23f..c6778af6efb 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 @@ -6,10 +6,8 @@ import com.yahoo.config.provision.ClusterResources; 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.applications.Cluster; import com.yahoo.vespa.hosted.provision.provisioning.HostResourcesCalculator; import com.yahoo.vespa.hosted.provision.provisioning.NodeResourceLimits; @@ -169,21 +167,25 @@ public class AllocatableClusterResources { // return the cheapest flavor satisfying the target resources, if any Optional<AllocatableClusterResources> best = Optional.empty(); for (Flavor flavor : nodeRepository.flavors().getFlavors()) { - NodeResources flavorResources = nodeRepository.resourcesCalculator().advertisedResourcesOf(flavor); + NodeResources advertisedResources = nodeRepository.resourcesCalculator().advertisedResourcesOf(flavor); + NodeResources realResources = flavor.resources(); + + // Adjust where we don't need exact match to the flavor if (flavor.resources().storageType() == NodeResources.StorageType.remote) { - flavor = flavor.with(FlavorOverrides.ofDisk(cappedNodeResources.diskGb())); - flavorResources = flavorResources.withDiskGb(cappedNodeResources.diskGb()); // TODO: Do this in resourcesCalculator + advertisedResources = advertisedResources.withDiskGb(cappedNodeResources.diskGb()); + realResources = realResources.withDiskGb(cappedNodeResources.diskGb()); + } + if (flavor.resources().bandwidthGbps() >= cappedNodeResources.bandwidthGbps()) { + advertisedResources = advertisedResources.withBandwidthGbps(cappedNodeResources.bandwidthGbps()); + realResources = realResources.withBandwidthGbps(cappedNodeResources.bandwidthGbps()); } - if (flavor.resources().bandwidthGbps() >= cappedNodeResources.bandwidthGbps()) - flavorResources = flavorResources.withBandwidthGbps(limits.min().nodeResources().bandwidthGbps()); - if ( ! between(limits.min().nodeResources(), limits.max().nodeResources(), flavorResources)) continue; + if ( ! between(limits.min().nodeResources(), limits.max().nodeResources(), advertisedResources)) continue; - var candidate = new AllocatableClusterResources(resources.with(flavor.resources()), - flavor, + var candidate = new AllocatableClusterResources(resources.with(realResources), + advertisedResources, resources.nodeResources(), - clusterType, - nodeRepository.resourcesCalculator()); + clusterType); if (best.isEmpty() || candidate.preferableTo(best.get())) best = Optional.of(candidate); } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/SharedLoadBalancerService.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/SharedLoadBalancerService.java index 42a52601527..a8faafc0bad 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/SharedLoadBalancerService.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/SharedLoadBalancerService.java @@ -1,4 +1,4 @@ -// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.provision.lb; import com.google.inject.Inject; 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 6f026254bcd..d6d6d76e182 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 @@ -1,4 +1,4 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.provision.provisioning; import com.google.inject.Inject; 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 67d37c8847a..23573e50156 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 @@ -191,14 +191,14 @@ public class DynamicDockerProvisionTest { tester.activate(app1, cluster1, Capacity.from(resources(2, 1, 2, 20, 40), resources(4, 1, 2, 20, 40))); tester.assertNodes("Allocation specifies memory in the advertised amount", - 3, 1, 2, 20, 40, 10, + 3, 1, 2, 20, 40, app1, cluster1); // Redeploy the same tester.activate(app1, cluster1, Capacity.from(resources(2, 1, 2, 20, 40), resources(4, 1, 2, 20, 40))); tester.assertNodes("Allocation specifies memory in the advertised amount", - 3, 1, 2, 20, 40, 10, + 3, 1, 2, 20, 40, app1, cluster1); } @@ -345,6 +345,8 @@ public class DynamicDockerProvisionTest { if (hostFlavor.resources().storageType() == NodeResources.StorageType.remote && hostFlavor.resources().diskGb() >= nodeResources.diskGb()) resourcesToVerify = resourcesToVerify.withDiskGb(hostFlavor.resources().diskGb()); + if (hostFlavor.resources().bandwidthGbps() >= nodeResources.bandwidthGbps()) + resourcesToVerify = resourcesToVerify.withBandwidthGbps(hostFlavor.resources().bandwidthGbps()); return hostFlavor.resources().compatibleWith(resourcesToVerify); } |