diff options
author | Valerij Fredriksen <freva@users.noreply.github.com> | 2019-09-10 10:55:15 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-10 10:55:15 +0200 |
commit | cbe561eee3322eae66b8e04370d258b0915e3540 (patch) | |
tree | 57c54aed16a28c8e0badc776bfba86f8e8b0afb2 /node-repository | |
parent | df71f42c53821a86a45d12095bfd03cca4eb82ed (diff) | |
parent | 9376149ce27d41f808cd94b5cc1b0e451bbdc420 (diff) |
Merge pull request #10570 from vespa-engine/freva/strict-resource-allocation
Strict resource allocation
Diffstat (limited to 'node-repository')
3 files changed, 18 insertions, 4 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java index 06f47aea2b0..2a08d931545 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java @@ -6,6 +6,10 @@ import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.Zone; +import com.yahoo.vespa.flags.FetchVector; +import com.yahoo.vespa.flags.FlagSource; +import com.yahoo.vespa.flags.Flags; +import com.yahoo.vespa.flags.JacksonFlag; import java.util.Arrays; import java.util.Optional; @@ -18,9 +22,11 @@ import java.util.Optional; public class CapacityPolicies { private final Zone zone; + private final JacksonFlag<com.yahoo.vespa.flags.custom.NodeResources> defaultResourcesFlag; - public CapacityPolicies(Zone zone) { + public CapacityPolicies(Zone zone, FlagSource flagSource) { this.zone = zone; + this.defaultResourcesFlag = Flags.DEFAULT_RESOURCES.bindTo(flagSource); } public int decideSize(Capacity requestedCapacity, ClusterSpec.Type clusterType) { @@ -37,7 +43,9 @@ public class CapacityPolicies { } public NodeResources decideNodeResources(Optional<NodeResources> requestedResources, ClusterSpec cluster) { - NodeResources resources = requestedResources.orElse(defaultNodeResources(cluster.type())); + NodeResources resources = requestedResources + .or(() -> flagNodeResources(cluster.type())) + .orElse(defaultNodeResources(cluster.type())); // Allow slow disks in zones which are not performance sensitive if (zone.system().isCd() || zone.environment() == Environment.dev || zone.environment() == Environment.test) @@ -50,6 +58,11 @@ public class CapacityPolicies { return resources; } + private Optional<NodeResources> flagNodeResources(ClusterSpec.Type clusterType) { + return Optional.ofNullable(defaultResourcesFlag.with(FetchVector.Dimension.CLUSTER_TYPE, clusterType.name()).value()) + .map(r -> new NodeResources(r.vcpu(), r.memoryGb(), r.diskGb(), r.bandwidthGbps(), NodeResources.DiskSpeed.valueOf(r.diskSpeed()))); + } + private NodeResources defaultNodeResources(ClusterSpec.Type clusterType) { if (clusterType == ClusterSpec.Type.admin) return new NodeResources(0.5, 2, 50, 0.3); 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 93117070dc8..837b780fd43 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 @@ -58,7 +58,7 @@ public class NodeRepositoryProvisioner implements Provisioner { public NodeRepositoryProvisioner(NodeRepository nodeRepository, Zone zone, ProvisionServiceProvider provisionServiceProvider, FlagSource flagSource) { this.nodeRepository = nodeRepository; - this.capacityPolicies = new CapacityPolicies(zone); + this.capacityPolicies = new CapacityPolicies(zone, flagSource); this.zone = zone; this.loadBalancerProvisioner = provisionServiceProvider.getLoadBalancerService().map(lbService -> new LoadBalancerProvisioner(nodeRepository, lbService)); this.preparer = new Preparer(nodeRepository, diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java index 844677395f4..203f922d132 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java @@ -75,6 +75,7 @@ public class ProvisioningTester { private final CapacityPolicies capacityPolicies; private final ProvisionLogger provisionLogger; private final LoadBalancerServiceMock loadBalancerService; + private final InMemoryFlagSource flagSource = new InMemoryFlagSource(); private int nextHost = 0; private int nextIP = 0; @@ -91,7 +92,7 @@ public class ProvisioningTester { this.orchestrator = orchestrator; ProvisionServiceProvider provisionServiceProvider = new MockProvisionServiceProvider(loadBalancerService, hostProvisioner); this.provisioner = new NodeRepositoryProvisioner(nodeRepository, zone, provisionServiceProvider, flagSource); - this.capacityPolicies = new CapacityPolicies(zone); + this.capacityPolicies = new CapacityPolicies(zone, flagSource); this.provisionLogger = new NullProvisionLogger(); this.loadBalancerService = loadBalancerService; } |