summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorHarald Musum <musum@oath.com>2018-10-11 09:58:06 +0200
committerHarald Musum <musum@oath.com>2018-10-11 09:58:06 +0200
commitc45ab98850922317dea48fa945524ee187b60cb4 (patch)
tree4b109078d76aa6475b9a8e721cbc8a9293f0fdfc /node-repository
parenta902861604ddbaa45be0078a733add8f5009a30e (diff)
Allow only one node for admin clusters in prod
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java12
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java4
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java8
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,