diff options
author | Jon Marius Venstad <venstad@gmail.com> | 2021-09-07 10:53:19 +0200 |
---|---|---|
committer | Valerij Fredriksen <valerijf@verizonmedia.com> | 2021-09-09 21:41:10 +0200 |
commit | 902fd292cf302470473ef958cbcf9e5ac1f63ee8 (patch) | |
tree | c34a4d9e9795a24d6167b0f8ea31a82e4b947f06 | |
parent | 7b90204f58716ef9fd9238de4f65bfb1c2ba29a3 (diff) |
Direct deployments are "before" submitted versions
5 files changed, 11 insertions, 7 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationVersion.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationVersion.java index 76d7bdc4f12..978b6349dc0 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationVersion.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationVersion.java @@ -174,6 +174,9 @@ public class ApplicationVersion implements Comparable<ApplicationVersion> { if (buildNumber().isEmpty() || o.buildNumber().isEmpty()) return Boolean.compare(buildNumber().isPresent(), o.buildNumber.isPresent()); // Unknown version sorts first + if (deployedDirectly || o.deployedDirectly) + return Boolean.compare(deployedDirectly, o.deployedDirectly); // Directly deployed versions sort first + return Long.compare(buildNumber().getAsLong(), o.buildNumber().getAsLong()); } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/Change.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/Change.java index 33eafecf60a..ff266e18bb6 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/Change.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/Change.java @@ -36,7 +36,7 @@ public final class Change { private Change(Optional<Version> platform, Optional<ApplicationVersion> application, boolean pinned) { this.platform = requireNonNull(platform, "platform cannot be null"); this.application = requireNonNull(application, "application cannot be null"); - if (application.isPresent() && application.get().isUnknown()) { + if (application.isPresent() && (application.get().isUnknown() || application.get().isDeployedDirectly())) { throw new IllegalArgumentException("Application version to deploy must be a known version"); } this.pinned = pinned; diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java index aab193c1a0c..1b02f5aa338 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java @@ -561,7 +561,7 @@ public class JobController { application.get().productionDeployments().values().stream() .flatMap(List::stream) .map(Deployment::applicationVersion) - .filter(version -> ! version.isUnknown()) + .filter(version -> ! version.isUnknown() && ! version.isDeployedDirectly()) .min(Comparator.comparingLong(applicationVersion -> applicationVersion.buildNumber().getAsLong())) .ifPresent(oldestDeployed -> { controller.applications().applicationStore().prune(id.tenant(), id.application(), oldestDeployed); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java index 420d0be04ac..a125459105a 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java @@ -492,8 +492,8 @@ public class DeploymentContext { Run run = jobs.last(job) .filter(r -> r.id().type() == job.type()) .orElseThrow(() -> new AssertionError(job.type() + " is not among the active: " + jobs.active())); - assertFalse(run.id() + " should not have failed yet", run.hasFailed()); - assertFalse(run.id() + " should not have ended yet", run.hasEnded()); + assertFalse(run.id() + " should not have failed yet: " + run, run.hasFailed()); + assertFalse(run.id() + " should not have ended yet: " + run, run.hasEnded()); return run; } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggerTest.java index 3e3c06be0ab..0a7a0ac067a 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggerTest.java @@ -1110,15 +1110,16 @@ public class DeploymentTriggerTest { // System and staging tests both require unknown versions, and are broken. tester.controller().applications().deploymentTrigger().forceTrigger(app.instanceId(), productionCdUsCentral1, "user", false); app.runJob(productionCdUsCentral1) - .abortJob(systemTest) - .abortJob(stagingTest) + .jobAborted(systemTest) + .jobAborted(stagingTest) .runJob(systemTest) .runJob(stagingTest) .runJob(productionCdAwsUsEast1a); app.runJob(productionCdUsCentral1, cdPackage); app.submit(cdPackage); - app.runJob(systemTest); + app.jobAborted(systemTest) + .runJob(systemTest); // Staging test requires unknown initial version, and is broken. tester.controller().applications().deploymentTrigger().forceTrigger(app.instanceId(), productionCdUsCentral1, "user", false); app.runJob(productionCdUsCentral1) |