diff options
author | jonmv <venstad@gmail.com> | 2023-01-23 14:14:20 +0100 |
---|---|---|
committer | jonmv <venstad@gmail.com> | 2023-01-23 14:14:20 +0100 |
commit | 50faf8143c47508441512621f6ca389df21135cb (patch) | |
tree | 24d317eb8e0088c29315a49ac8cd9249a06dac21 /controller-server | |
parent | d485fdef78704f15fbd0f988a639622ed73356c6 (diff) |
Dedupe on instances when computing confidence
Diffstat (limited to 'controller-server')
2 files changed, 11 insertions, 17 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/pkg/ApplicationPackageStream.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/pkg/ApplicationPackageStream.java index f947926eb9c..f86073cfb25 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/pkg/ApplicationPackageStream.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/pkg/ApplicationPackageStream.java @@ -1,19 +1,12 @@ package com.yahoo.vespa.hosted.controller.application.pkg; -import com.yahoo.security.X509CertificateUtils; - -import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream; import java.io.UncheckedIOException; -import java.security.cert.X509Certificate; -import java.util.ArrayList; import java.util.HashMap; -import java.util.List; import java.util.Map; -import java.util.Optional; import java.util.concurrent.atomic.AtomicReference; import java.util.function.Predicate; import java.util.function.Supplier; @@ -22,10 +15,8 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; -import static com.yahoo.security.X509CertificateUtils.certificateListFromPem; import static java.io.OutputStream.nullOutputStream; import static java.lang.Math.min; -import static java.nio.charset.StandardCharsets.UTF_8; /** * Wraps a zipped application package stream. diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VespaVersion.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VespaVersion.java index 127e2828732..e9947f3d565 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VespaVersion.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VespaVersion.java @@ -6,6 +6,7 @@ import com.yahoo.config.provision.SystemName; import com.yahoo.vespa.hosted.controller.Controller; import com.yahoo.vespa.hosted.controller.application.ApplicationList; import com.yahoo.vespa.hosted.controller.application.InstanceList; +import com.yahoo.vespa.hosted.controller.application.TenantAndApplicationId; import java.time.Instant; import java.time.ZoneOffset; @@ -40,7 +41,7 @@ public record VespaVersion(Version version, .not().upgradingTo(statistics.version()); InstanceList failingOnThis = all.matching(instance -> statistics.failingUpgrades().stream().anyMatch(run -> run.id().application().equals(instance))); - // 'broken' if any Canary fails + // 'broken' if any canary fails if ( ! failingOnThis.with(UpgradePolicy.canary).isEmpty()) return Confidence.broken; @@ -53,8 +54,8 @@ public record VespaVersion(Version version, return Confidence.low; // 'high' if 90% of all default upgrade applications upgraded - if (productionOnThis.with(UpgradePolicy.defaultPolicy).size() >= - all.withProductionDeployment().with(UpgradePolicy.defaultPolicy).size() * 0.9) + if (productionOnThis.with(UpgradePolicy.defaultPolicy).groupingBy(TenantAndApplicationId::from).size() >= + all.withProductionDeployment().with(UpgradePolicy.defaultPolicy).groupingBy(TenantAndApplicationId::from).size() * 0.9) return Confidence.high; return Confidence.normal; @@ -156,14 +157,16 @@ public record VespaVersion(Version version, private static boolean nonCanaryApplicationsBroken(Version version, InstanceList failingOnThis, InstanceList productionOnThis) { - InstanceList failingNonCanaries = failingOnThis.startedFailingOn(version).not().with(UpgradePolicy.canary); - InstanceList productionNonCanaries = productionOnThis.not().with(UpgradePolicy.canary); + int failingNonCanaries = failingOnThis.startedFailingOn(version) + .not().with(UpgradePolicy.canary) + .groupingBy(TenantAndApplicationId::from).size(); + int productionNonCanaries = productionOnThis.not().with(UpgradePolicy.canary) + .groupingBy(TenantAndApplicationId::from).size(); - if (productionNonCanaries.size() + failingNonCanaries.size() == 0) return false; + if (productionNonCanaries + failingNonCanaries == 0) return false; // 'broken' if 6 non-canary was broken by this, and that is at least 5% of all - int brokenByThisVersion = failingNonCanaries.size(); - return brokenByThisVersion >= 6 && brokenByThisVersion >= productionOnThis.size() * 0.05; + return failingNonCanaries >= 6 && failingNonCanaries >= productionOnThis.groupingBy(TenantAndApplicationId::from).size() * 0.05; } } |