diff options
author | Harald Musum <musum@oath.com> | 2018-10-11 09:58:06 +0200 |
---|---|---|
committer | Harald Musum <musum@oath.com> | 2018-10-11 09:58:06 +0200 |
commit | c45ab98850922317dea48fa945524ee187b60cb4 (patch) | |
tree | 4b109078d76aa6475b9a8e721cbc8a9293f0fdfc /node-repository/src | |
parent | a902861604ddbaa45be0078a733add8f5009a30e (diff) |
Allow only one node for admin clusters in prod
Diffstat (limited to 'node-repository/src')
3 files changed, 12 insertions, 12 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 6168d6fcf78..a272efc2d37 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 @@ -10,6 +10,7 @@ import com.yahoo.config.provision.Zone; import com.yahoo.config.provision.Flavor; import com.yahoo.config.provision.NodeFlavors; +import java.util.Arrays; import java.util.Optional; /** @@ -27,8 +28,8 @@ public class CapacityPolicies { this.flavors = flavors; } - public int decideSize(Capacity requestedCapacity) { - int requestedNodes = ensureRedundancy(requestedCapacity.nodeCount()); + public int decideSize(Capacity requestedCapacity, ClusterSpec.Type clusterType) { + int requestedNodes = ensureRedundancy(requestedCapacity.nodeCount(), clusterType); if (requestedCapacity.isRequired()) return requestedNodes; switch(zone.environment()) { @@ -65,13 +66,14 @@ public class CapacityPolicies { } /** - * Throw if the node count is 1 and we're in a production zone + * Throw if the node count is 1 for container and content clusters and we're in a production zone * * @return the argument node count * @throws IllegalArgumentException if only one node is requested */ - private int ensureRedundancy(int nodeCount) { - if (nodeCount == 1 && zone.environment().isProduction() && zone.system() != SystemName.cd) { + private int ensureRedundancy(int nodeCount, ClusterSpec.Type clusterType) { + if (Arrays.asList(ClusterSpec.Type.container, ClusterSpec.Type.content).contains(clusterType) && + nodeCount == 1 && zone.environment().isProduction() && zone.system() != SystemName.cd) { throw new IllegalArgumentException("Deployments to prod require at least 2 nodes per cluster for redundancy"); } return nodeCount; 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 06a86cbddf7..fd28975bfad 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 @@ -21,12 +21,10 @@ import com.yahoo.vespa.hosted.provision.NodeRepository; import com.yahoo.vespa.hosted.provision.node.filter.ApplicationFilter; import com.yahoo.vespa.hosted.provision.node.filter.NodeHostFilter; -import java.time.Clock; import java.util.ArrayList; import java.util.Collection; import java.util.Comparator; import java.util.List; -import java.util.Optional; import java.util.logging.Level; import java.util.logging.Logger; @@ -81,7 +79,7 @@ public class NodeRepositoryProvisioner implements Provisioner { int effectiveGroups; NodeSpec requestedNodes; if ( requestedCapacity.type() == NodeType.tenant) { - int nodeCount = application.instance().isTester() ? 1 : capacityPolicies.decideSize(requestedCapacity); + int nodeCount = application.instance().isTester() ? 1 : capacityPolicies.decideSize(requestedCapacity, cluster.type()); if (zone.environment().isManuallyDeployed() && nodeCount < requestedCapacity.nodeCount()) logger.log(Level.INFO, "Requested " + requestedCapacity.nodeCount() + " nodes for " + cluster + diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java index 758d7cc71d9..0f86b072d4d 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java @@ -846,10 +846,10 @@ public class ProvisioningTest { allHosts.addAll(content1); Function<Integer, Capacity> capacity = count -> Capacity.fromNodeCount(count, Optional.empty(), required, true); - int expectedContainer0Size = tester.capacityPolicies().decideSize(capacity.apply(container0Size)); - int expectedContainer1Size = tester.capacityPolicies().decideSize(capacity.apply(container1Size)); - int expectedContent0Size = tester.capacityPolicies().decideSize(capacity.apply(content0Size)); - int expectedContent1Size = tester.capacityPolicies().decideSize(capacity.apply(content1Size)); + int expectedContainer0Size = tester.capacityPolicies().decideSize(capacity.apply(container0Size), containerCluster0.type()); + int expectedContainer1Size = tester.capacityPolicies().decideSize(capacity.apply(container1Size), containerCluster1.type()); + int expectedContent0Size = tester.capacityPolicies().decideSize(capacity.apply(content0Size), contentCluster0.type()); + int expectedContent1Size = tester.capacityPolicies().decideSize(capacity.apply(content1Size), contentCluster1.type()); assertEquals("Hosts in each group cluster is disjunct and the total number of unretired nodes is correct", expectedContainer0Size + expectedContainer1Size + expectedContent0Size + expectedContent1Size, |