diff options
author | Jon Bratseth <bratseth@oath.com> | 2020-03-18 08:22:26 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-18 08:22:26 +0100 |
commit | 8259eb143d2d1dc54a869c0742d00b62da8de3b0 (patch) | |
tree | e598fa882ec828239ee699d410d7757ba4f72e85 | |
parent | 1518f32b03986dfeabd0b7962738165d40a60bda (diff) | |
parent | c4e24c2b5f5b1db2596cdad278b047b6c85ce5bb (diff) |
Merge pull request #12604 from vespa-engine/hmusum/log-which-cluster-which-has-too-low-redundancy
Log cluster spec when a cluster has too low redundancy
3 files changed, 10 insertions, 10 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 c0664086498..94f8fb29b9a 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 @@ -31,12 +31,12 @@ public class CapacityPolicies { this.isUsingAdvertisedResources = zone.cloud().value().equals("aws"); } - public int decideSize(Capacity capacity, ClusterSpec.Type clusterType, ApplicationId application) { + public int decideSize(Capacity capacity, ClusterSpec cluster, ApplicationId application) { int requestedNodes = capacity.nodeCount(); if (application.instance().isTester()) return 1; - ensureRedundancy(requestedNodes, clusterType, capacity.canFail()); + ensureRedundancy(requestedNodes, cluster, capacity.canFail()); if (capacity.isRequired()) return requestedNodes; @@ -105,12 +105,12 @@ public class CapacityPolicies { * * @throws IllegalArgumentException if only one node is requested and we can fail */ - private void ensureRedundancy(int nodeCount, ClusterSpec.Type clusterType, boolean canFail) { + private void ensureRedundancy(int nodeCount, ClusterSpec cluster, boolean canFail) { if (canFail && nodeCount == 1 && - requiresRedundancy(clusterType) && + requiresRedundancy(cluster.type()) && zone.environment().isProduction()) - throw new IllegalArgumentException("Deployments to prod require at least 2 nodes per cluster for redundancy"); + throw new IllegalArgumentException("Deployments to prod require at least 2 nodes per cluster for redundancy. Not fulfilled for " + cluster); } private static boolean requiresRedundancy(ClusterSpec.Type clusterType) { 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 07cf297a314..7a49ad9c44d 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 @@ -89,7 +89,7 @@ public class NodeRepositoryProvisioner implements Provisioner { NodeSpec requestedNodes; Optional<NodeResources> resources = requestedCapacity.nodeResources(); if ( requestedCapacity.type() == NodeType.tenant) { - int nodeCount = capacityPolicies.decideSize(requestedCapacity, cluster.type(), application); + int nodeCount = capacityPolicies.decideSize(requestedCapacity, cluster, application); if (zone.environment().isManuallyDeployed() && nodeCount < requestedCapacity.nodeCount()) logger.log(Level.INFO, "Requested " + requestedCapacity.nodeCount() + " nodes for " + cluster + ", downscaling to " + nodeCount + " nodes in " + zone.environment()); 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 a5527a4a6ee..5cc79891b4e 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 @@ -754,10 +754,10 @@ public class ProvisioningTest { allHosts.addAll(content1); Function<Integer, Capacity> capacity = count -> Capacity.fromCount(count, Optional.empty(), required, true); - int expectedContainer0Size = tester.capacityPolicies().decideSize(capacity.apply(container0Size), containerCluster0.type(), application); - int expectedContainer1Size = tester.capacityPolicies().decideSize(capacity.apply(container1Size), containerCluster1.type(), application); - int expectedContent0Size = tester.capacityPolicies().decideSize(capacity.apply(content0Size), contentCluster0.type(), application); - int expectedContent1Size = tester.capacityPolicies().decideSize(capacity.apply(content1Size), contentCluster1.type(), application); + int expectedContainer0Size = tester.capacityPolicies().decideSize(capacity.apply(container0Size), containerCluster0, application); + int expectedContainer1Size = tester.capacityPolicies().decideSize(capacity.apply(container1Size), containerCluster1, application); + int expectedContent0Size = tester.capacityPolicies().decideSize(capacity.apply(content0Size), contentCluster0, application); + int expectedContent1Size = tester.capacityPolicies().decideSize(capacity.apply(content1Size), contentCluster1, application); assertEquals("Hosts in each group cluster is disjunct and the total number of unretired nodes is correct", expectedContainer0Size + expectedContainer1Size + expectedContent0Size + expectedContent1Size, |