diff options
author | Martin Polden <mpolden@mpolden.no> | 2020-05-06 14:09:10 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2020-05-06 15:05:39 +0200 |
commit | 5aa8f4c900e1c7ff87c7dd804939713f5a87b9e2 (patch) | |
tree | 5c5e1bcfd6761ce4afcca1239a77dd4271d434f6 /node-repository | |
parent | ee4fb54e2078961257a9c399f6e90622dc0b2298 (diff) |
Model cloud features explicitly
Diffstat (limited to 'node-repository')
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"))) |