aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'node-repository/src/main/java')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java23
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocatableClusterResources.java3
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/Rebalancer.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/SpareCapacityMaintainer.java3
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java14
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/GroupPreparer.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeResourceLimits.java3
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java3
8 files changed, 28 insertions, 25 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java
index f5c5db45f4a..ff0fc9f66ea 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java
@@ -110,6 +110,7 @@ public class NodeRepository extends AbstractComponent {
private final DockerImages dockerImages;
private final JobControl jobControl;
private final Applications applications;
+ private final boolean canProvisionHosts;
private final int spareCount;
/**
@@ -124,7 +125,7 @@ public class NodeRepository extends AbstractComponent {
Zone zone,
FlagSource flagSource) {
this(flavors,
- provisionServiceProvider,
+ provisionServiceProvider.getHostResourcesCalculator(),
curator,
Clock.systemUTC(),
zone,
@@ -132,7 +133,8 @@ public class NodeRepository extends AbstractComponent {
DockerImage.fromString(config.dockerImage()),
flagSource,
config.useCuratorClientCache(),
- zone.environment().isProduction() && !zone.getCloud().dynamicProvisioning() ? 1 : 0,
+ provisionServiceProvider.getHostProvisioner().isPresent(),
+ zone.environment().isProduction() && provisionServiceProvider.getHostProvisioner().isEmpty() ? 1 : 0,
config.nodeCacheSize());
}
@@ -141,7 +143,7 @@ public class NodeRepository extends AbstractComponent {
* which will be used for time-sensitive decisions.
*/
public NodeRepository(NodeFlavors flavors,
- ProvisionServiceProvider provisionServiceProvider,
+ HostResourcesCalculator resourcesCalculator,
Curator curator,
Clock clock,
Zone zone,
@@ -149,19 +151,14 @@ public class NodeRepository extends AbstractComponent {
DockerImage dockerImage,
FlagSource flagSource,
boolean useCuratorClientCache,
+ boolean canProvisionHosts,
int spareCount,
long nodeCacheSize) {
- // TODO (valerijf): Uncomment when exception for prod.cd-aws is removed
-// if (provisionServiceProvider.getHostProvisioner().isPresent() != zone.getCloud().dynamicProvisioning())
-// throw new IllegalArgumentException(String.format(
-// "dynamicProvisioning property must be 1-to-1 with availability of HostProvisioner, was: dynamicProvisioning=%s, hostProvisioner=%s",
-// zone.getCloud().dynamicProvisioning(), provisionServiceProvider.getHostProvisioner().map(__ -> "present").orElse("empty")));
-
this.db = new CuratorDatabaseClient(flavors, curator, clock, zone, useCuratorClientCache, nodeCacheSize);
this.zone = zone;
this.clock = clock;
this.flavors = flavors;
- this.resourcesCalculator = provisionServiceProvider.getHostResourcesCalculator();
+ this.resourcesCalculator = resourcesCalculator;
this.nameResolver = nameResolver;
this.osVersions = new OsVersions(this);
this.infrastructureVersions = new InfrastructureVersions(db);
@@ -169,6 +166,7 @@ public class NodeRepository extends AbstractComponent {
this.dockerImages = new DockerImages(db, dockerImage);
this.jobControl = new JobControl(new JobControlFlags(db, flagSource));
this.applications = new Applications(db);
+ this.canProvisionHosts = canProvisionHosts;
this.spareCount = spareCount;
rewriteNodes();
}
@@ -839,12 +837,15 @@ public class NodeRepository extends AbstractComponent {
if (host.status().wantToRetire()) return false;
if (host.allocation().map(alloc -> alloc.membership().retired()).orElse(false)) return false;
- if (zone.getCloud().dynamicProvisioning())
+ if ( canProvisionHosts())
return EnumSet.of(State.active, State.ready, State.provisioned).contains(host.state());
else
return host.state() == State.active;
}
+ /** Returns whether this repository can provision hosts on demand */
+ public boolean canProvisionHosts() { return canProvisionHosts; }
+
/** Returns the time keeper of this system */
public Clock clock() { return clock; }
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 ff74655f461..d1d15baa5dc 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
@@ -7,6 +7,7 @@ import com.yahoo.config.provision.Flavor;
import com.yahoo.config.provision.NodeResources;
import com.yahoo.vespa.hosted.provision.Node;
import com.yahoo.vespa.hosted.provision.NodeRepository;
+import com.yahoo.vespa.hosted.provision.provisioning.HostResourcesCalculator;
import com.yahoo.vespa.hosted.provision.provisioning.NodeResourceLimits;
import java.util.List;
@@ -137,7 +138,7 @@ public class AllocatableClusterResources {
Limits applicationLimits,
NodeRepository nodeRepository) {
var systemLimits = new NodeResourceLimits(nodeRepository);
- if ( !exclusive && !nodeRepository.zone().getCloud().dynamicProvisioning()) {
+ if ( !exclusive && nodeRepository.zone().getCloud().allowHostSharing()) {
// We decide resources: Add overhead to what we'll request (advertised) to make sure real becomes (at least) cappedNodeResources
NodeResources advertisedResources = nodeRepository.resourcesCalculator().realToRequest(wantedResources.nodeResources());
advertisedResources = systemLimits.enlargeToLegal(advertisedResources, clusterType); // Attempt to ask for something legal
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/Rebalancer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/Rebalancer.java
index d6b2ca6d170..192f185f595 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/Rebalancer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/Rebalancer.java
@@ -35,7 +35,7 @@ public class Rebalancer extends NodeMover<Rebalancer.Move> {
@Override
protected boolean maintain() {
boolean success = true;
- if (nodeRepository().zone().getCloud().dynamicProvisioning()) return success; // Rebalancing not necessary
+ if ( ! nodeRepository().zone().getCloud().allowHostSharing()) return success; // Rebalancing not necessary
if (nodeRepository().zone().environment().isTest()) return success; // Short lived deployments; no need to rebalance
// Work with an unlocked snapshot as this can take a long time and full consistency is not needed
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/SpareCapacityMaintainer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/SpareCapacityMaintainer.java
index 475928863ee..c3389a1d98d 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/SpareCapacityMaintainer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/SpareCapacityMaintainer.java
@@ -68,8 +68,7 @@ public class SpareCapacityMaintainer extends NodeRepositoryMaintainer {
@Override
protected boolean maintain() {
boolean success = true;
- // Don't need to maintain spare capacity in dynamically provisioned zones; can provision more on demand.
- if (nodeRepository().zone().getCloud().dynamicProvisioning()) return success;
+ if ( ! nodeRepository().zone().getCloud().allowHostSharing()) return success;
NodeList allNodes = nodeRepository().list();
CapacityChecker capacityChecker = new CapacityChecker(allNodes);
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 f1a006b1359..223d88c4dc0 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
@@ -45,7 +45,7 @@ public class CapacityPolicies {
if (capacity.isRequired()) return target;
// Dev does not cap the cpu of containers since usage is spotty: Allocate just a small amount exclusively
- if (zone.environment() == Environment.dev && !zone.getCloud().dynamicProvisioning())
+ if (zone.environment() == Environment.dev && zone.getCloud().allowHostSharing())
target = target.withVcpu(0.1);
// Allow slow storage in zones which are not performance sensitive
@@ -61,14 +61,14 @@ public class CapacityPolicies {
// Use small logserver in dev system
return new NodeResources(0.1, 1, 10, 0.3);
}
- return zone.getCloud().dynamicProvisioning() ?
- new NodeResources(0.5, 4, 50, 0.3) :
- new NodeResources(0.5, 2, 50, 0.3);
+ return zone.getCloud().allowHostSharing() ?
+ new NodeResources(0.5, 2, 50, 0.3) :
+ new NodeResources(0.5, 4, 50, 0.3);
}
- return zone.getCloud().dynamicProvisioning() ?
- new NodeResources(2.0, 8, 50, 0.3) :
- new NodeResources(1.5, 8, 50, 0.3);
+ return zone.getCloud().allowHostSharing() ?
+ new NodeResources(1.5, 8, 50, 0.3) :
+ new NodeResources(2.0, 8, 50, 0.3);
}
/**
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/GroupPreparer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/GroupPreparer.java
index 7f62eb8632c..aee36351495 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/GroupPreparer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/GroupPreparer.java
@@ -59,7 +59,7 @@ public class GroupPreparer {
// active config model which is changed on activate
public List<Node> prepare(ApplicationId application, ClusterSpec cluster, NodeSpec requestedNodes,
List<Node> surplusActiveNodes, MutableInteger highestIndex, int wantedGroups) {
- boolean dynamicProvisioningEnabled = nodeRepository.zone().getCloud().dynamicProvisioning();
+ boolean dynamicProvisioningEnabled = nodeRepository.canProvisionHosts() && nodeRepository.zone().getCloud().dynamicProvisioning();
boolean allocateFully = dynamicProvisioningEnabled && preprovisionCapacityFlag.value().isEmpty();
// Try preparing in memory without global unallocated lock. Most of the time there should be no changes and we
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeResourceLimits.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeResourceLimits.java
index ad892054836..a11582e1151 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeResourceLimits.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeResourceLimits.java
@@ -6,6 +6,7 @@ import com.yahoo.config.provision.Environment;
import com.yahoo.config.provision.NodeResources;
import com.yahoo.config.provision.SystemName;
import com.yahoo.config.provision.Zone;
+import com.yahoo.vespa.hosted.provision.Node;
import com.yahoo.vespa.hosted.provision.NodeRepository;
import java.util.Locale;
@@ -61,7 +62,7 @@ public class NodeResourceLimits {
}
private double minAdvertisedVcpu(ClusterSpec.Type clusterType) {
- if (zone().environment() == Environment.dev && !zone().getCloud().dynamicProvisioning()) return 0.1;
+ if (zone().environment() == Environment.dev && zone().getCloud().allowHostSharing()) return 0.1;
return 0.5;
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java
index 0509ccc81c1..042b4aa049c 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java
@@ -58,7 +58,7 @@ public class MockNodeRepository extends NodeRepository {
*/
public MockNodeRepository(MockCurator curator, NodeFlavors flavors) {
super(flavors,
- new EmptyProvisionServiceProvider(),
+ new EmptyProvisionServiceProvider().getHostResourcesCalculator(),
curator,
Clock.fixed(Instant.ofEpochMilli(123), ZoneId.of("Z")),
Zone.defaultZone(),
@@ -66,6 +66,7 @@ public class MockNodeRepository extends NodeRepository {
DockerImage.fromString("docker-registry.domain.tld:8080/dist/vespa"),
new InMemoryFlagSource(),
true,
+ false,
0, 1000);
this.flavors = flavors;