aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorValerij Fredriksen <freva@users.noreply.github.com>2019-09-10 10:55:15 +0200
committerGitHub <noreply@github.com>2019-09-10 10:55:15 +0200
commitcbe561eee3322eae66b8e04370d258b0915e3540 (patch)
tree57c54aed16a28c8e0badc776bfba86f8e8b0afb2 /node-repository
parentdf71f42c53821a86a45d12095bfd03cca4eb82ed (diff)
parent9376149ce27d41f808cd94b5cc1b0e451bbdc420 (diff)
Merge pull request #10570 from vespa-engine/freva/strict-resource-allocation
Strict resource allocation
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java17
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java2
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java3
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;
}