From 29987bdca3f1f2df4232c4b5f4dc0a4b6d009d5d Mon Sep 17 00:00:00 2001 From: Øyvind Grønnesby Date: Fri, 9 Oct 2020 11:29:50 +0200 Subject: Do not make assumptions on presence of provisioned - Do not assume all clusters are in provisioned object - Do not assume all clusters in provisioned object have a capacity object --- .../model/application/validation/QuotaValidator.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'config-model/src') diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/QuotaValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/QuotaValidator.java index d06d616efac..8a4eabbd12c 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/QuotaValidator.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/QuotaValidator.java @@ -8,6 +8,8 @@ import com.yahoo.vespa.model.VespaModel; import java.math.BigDecimal; import java.util.Locale; +import java.util.Map; +import java.util.Objects; import java.util.stream.Collectors; /** @@ -24,11 +26,11 @@ public class QuotaValidator extends Validator { } private void validateBudget(BigDecimal budget, VespaModel model) { - var spend = model.allClusters().stream() - .map(clusterId -> model.provisioned().all().get(clusterId)) + var spend = model.provisioned().all().values().stream() + .filter(Objects::nonNull) .map(Capacity::maxResources) - .map(clusterCapacity -> clusterCapacity.nodeResources().cost() * clusterCapacity.nodes()) - .reduce(0.0, Double::sum); + .mapToDouble(clusterCapacity -> clusterCapacity.nodeResources().cost() * clusterCapacity.nodes()) + .sum(); if (budget.doubleValue() < spend) { throwBudgetExceeded(spend, budget); @@ -37,12 +39,14 @@ public class QuotaValidator extends Validator { /** Check that all clusters in the application do not exceed the quota max cluster size. */ private void validateMaxClusterSize(int maxClusterSize, VespaModel model) { - var invalidClusters = model.allClusters().stream() - .filter(clusterId -> { - var cluster = model.provisioned().all().get(clusterId); + var invalidClusters = model.provisioned().all().entrySet().stream() + .filter(entry -> entry.getValue() != null) + .filter(entry -> { + var cluster = entry.getValue(); var clusterSize = cluster.maxResources().nodes(); return clusterSize > maxClusterSize; }) + .map(Map.Entry::getKey) .map(ClusterSpec.Id::value) .collect(Collectors.toList()); -- cgit v1.2.3