summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2020-05-06 14:09:10 +0200
committerMartin Polden <mpolden@mpolden.no>2020-05-06 15:05:39 +0200
commit5aa8f4c900e1c7ff87c7dd804939713f5a87b9e2 (patch)
tree5c5e1bcfd6761ce4afcca1239a77dd4271d434f6 /node-repository
parentee4fb54e2078961257a9c399f6e90622dc0b2298 (diff)
Model cloud features explicitly
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java4
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocatableClusterResources.java9
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityReportMaintainer.java9
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java2
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java11
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java4
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java4
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisionTest.java15
8 files changed, 27 insertions, 31 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 a459cc2826f..b7863ba8b3c 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
@@ -651,7 +651,7 @@ public class NodeRepository extends AbstractComponent {
children.forEach(child -> requireRemovable(child, true, force));
db.removeNodes(children);
List<Node> removed = new ArrayList<>(children);
- if (zone.cloud().value().equals("aws"))
+ if (zone.cloud().dynamicProvisioning())
db.removeNodes(List.of(node));
else {
node = node.with(IP.Config.EMPTY);
@@ -797,7 +797,7 @@ public class NodeRepository extends AbstractComponent {
if (host.status().wantToRetire() || host.allocation().map(alloc -> alloc.membership().retired()).orElse(false))
return false;
- if (!zone.cloud().value().equals("aws")) return host.state() == State.active;
+ if (!zone.cloud().dynamicProvisioning()) return host.state() == State.active;
else return EnumSet.of(State.active, State.ready, State.provisioned).contains(host.state());
}
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 c6778af6efb..fc70ae060de 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
@@ -1,7 +1,6 @@
// 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.autoscale;
-import com.yahoo.config.provision.CloudName;
import com.yahoo.config.provision.ClusterResources;
import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.Flavor;
@@ -152,7 +151,7 @@ public class AllocatableClusterResources {
NodeResources cappedNodeResources = limits.cap(resources.nodeResources());
cappedNodeResources = new NodeResourceLimits(nodeRepository.zone()).enlargeToLegal(cappedNodeResources, clusterType);
- if (allowsHostSharing(nodeRepository.zone().cloud())) {
+ if (nodeRepository.zone().cloud().allowHostSharing()) {
// return the requested resources, or empty if they cannot fit on existing hosts
for (Flavor flavor : nodeRepository.flavors().getFlavors()) {
if (flavor.resources().satisfies(cappedNodeResources))
@@ -199,10 +198,4 @@ public class AllocatableClusterResources {
return true;
}
- // TODO: Put this in zone config instead?
- private static boolean allowsHostSharing(CloudName cloudName) {
- if (cloudName.value().equals("aws")) return false;
- return true;
- }
-
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityReportMaintainer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityReportMaintainer.java
index abd1b477d4f..e85af1acf26 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityReportMaintainer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityReportMaintainer.java
@@ -2,16 +2,17 @@
package com.yahoo.vespa.hosted.provision.maintenance;
import com.yahoo.jdisc.Metric;
-import java.util.logging.Level;
import com.yahoo.vespa.hosted.provision.Node;
import com.yahoo.vespa.hosted.provision.NodeRepository;
import java.time.Duration;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.stream.Collectors;
-import java.util.*;
-
/**
* Performs analysis on the node repository to produce metrics that pertain to the capacity of the node repository.
* These metrics include:
@@ -37,7 +38,7 @@ public class CapacityReportMaintainer extends NodeRepositoryMaintainer {
@Override
protected void maintain() {
- if (nodeRepository.zone().cloud().value().equals("aws")) return; // Hosts and nodes are 1-1
+ if (nodeRepository.zone().cloud().dynamicProvisioning()) return; // Hosts and nodes are 1-1
CapacityChecker capacityChecker = new CapacityChecker(this.nodeRepository);
List<Node> overcommittedHosts = capacityChecker.findOvercommittedHosts();
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 a2bf83eb6c3..7ddeb936d10 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
@@ -28,7 +28,7 @@ public class CapacityPolicies {
public CapacityPolicies(Zone zone) {
this.zone = zone;
this.nodeResourceLimits = new NodeResourceLimits(zone);
- this.isUsingAdvertisedResources = zone.cloud().value().equals("aws");
+ this.isUsingAdvertisedResources = zone.cloud().dynamicProvisioning();
}
public int decideSize(int requested, Capacity capacity, ClusterSpec cluster, ApplicationId application) {
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 39a848a17f5..8b01868e75e 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
@@ -1,9 +1,8 @@
// 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.autoscale;
-import com.google.common.collect.Sets;
import com.yahoo.config.provision.ApplicationId;
-import com.yahoo.config.provision.CloudName;
+import com.yahoo.config.provision.Cloud;
import com.yahoo.config.provision.ClusterResources;
import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.Environment;
@@ -12,14 +11,11 @@ import com.yahoo.config.provision.NodeResources;
import com.yahoo.config.provision.RegionName;
import com.yahoo.config.provision.SystemName;
import com.yahoo.config.provision.Zone;
-import com.yahoo.io.IOUtils;
import org.junit.Test;
import java.util.ArrayList;
-import java.util.HashSet;
import java.util.List;
import java.util.Optional;
-import java.util.Set;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@@ -284,7 +280,10 @@ public class AutoscalingTest {
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)));
- AutoscalingTester tester = new AutoscalingTester(new Zone(CloudName.from("aws"), SystemName.main,
+ AutoscalingTester tester = new AutoscalingTester(new Zone(Cloud.defaultCloud()
+ .withDynamicProvisioning(true)
+ .withAllowHostSharing(false),
+ SystemName.main,
Environment.prod, RegionName.from("us-east")),
flavors);
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 5233181bfbf..0e424779331 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
@@ -206,7 +206,7 @@ class AutoscalingTester {
@Override
public NodeResources realResourcesOf(Node node, NodeRepository nodeRepository) {
- if (zone.cloud().value().equals("aws"))
+ if (zone.cloud().dynamicProvisioning())
return node.flavor().resources().withMemoryGb(node.flavor().resources().memoryGb() - 3);
else
return node.flavor().resources();
@@ -214,7 +214,7 @@ class AutoscalingTester {
@Override
public NodeResources advertisedResourcesOf(Flavor flavor) {
- if (zone.cloud().value().equals("aws"))
+ if (zone.cloud().dynamicProvisioning())
return flavor.resources().withMemoryGb(flavor.resources().memoryGb() + 3);
else
return flavor.resources();
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java
index 05976066664..df66916f3c7 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java
@@ -3,7 +3,7 @@ package com.yahoo.vespa.hosted.provision.maintenance;
import com.yahoo.component.Version;
import com.yahoo.config.provision.ApplicationId;
-import com.yahoo.config.provision.CloudName;
+import com.yahoo.config.provision.Cloud;
import com.yahoo.config.provision.ClusterMembership;
import com.yahoo.config.provision.DockerImage;
import com.yahoo.config.provision.Environment;
@@ -214,7 +214,7 @@ public class DynamicProvisioningMaintainerTest {
static final ApplicationId proxyApp = ApplicationId.from("vespa", "proxy", "default");
private final ManualClock clock = new ManualClock();
- private final Zone zone = new Zone(CloudName.from("aws"), SystemName.defaultSystem(), Environment.defaultEnvironment(), RegionName.defaultName());
+ private final Zone zone = new Zone(Cloud.defaultCloud().withDynamicProvisioning(true), SystemName.defaultSystem(), Environment.defaultEnvironment(), RegionName.defaultName());
private final NodeRepository nodeRepository = new NodeRepository(nodeFlavors,
hostResourcesCalculator,
new MockCurator(),
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 a32baf5beda..7a6e92b8d71 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
@@ -4,7 +4,7 @@ package com.yahoo.vespa.hosted.provision.provisioning;
import com.yahoo.component.Version;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.Capacity;
-import com.yahoo.config.provision.CloudName;
+import com.yahoo.config.provision.Cloud;
import com.yahoo.config.provision.ClusterResources;
import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.Environment;
@@ -33,6 +33,8 @@ import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
+import static com.yahoo.config.provision.NodeResources.DiskSpeed.fast;
+import static com.yahoo.config.provision.NodeResources.StorageType.remote;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@@ -41,9 +43,6 @@ import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
-import static com.yahoo.config.provision.NodeResources.DiskSpeed.*;
-import static com.yahoo.config.provision.NodeResources.StorageType.*;
-
/**
* @author freva
*/
@@ -160,7 +159,9 @@ public class DynamicDockerProvisionTest {
List<Flavor> flavors = List.of(new Flavor("2x",
new NodeResources(2, 17, 200, 10, fast, remote)));
- ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(CloudName.from("aws"),
+ ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Cloud.defaultCloud()
+ .withDynamicProvisioning(true)
+ .withAllowHostSharing(false),
SystemName.main,
Environment.prod,
RegionName.from("us-east")))
@@ -210,7 +211,9 @@ public class DynamicDockerProvisionTest {
new Flavor("2x", new NodeResources(2, 20 - memoryTax, 200, 0.1, fast, remote)),
new Flavor("4x", new NodeResources(4, 40 - memoryTax, 400, 0.1, fast, remote)));
- ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(CloudName.from("aws"),
+ ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Cloud.defaultCloud()
+ .withDynamicProvisioning(true)
+ .withAllowHostSharing(false),
SystemName.main,
Environment.prod,
RegionName.from("us-east")))