diff options
author | jonmv <venstad@gmail.com> | 2022-04-10 13:44:39 +0200 |
---|---|---|
committer | jonmv <venstad@gmail.com> | 2022-04-11 13:42:26 +0200 |
commit | e4e448abbf8611f189a90e1ccc1348783005e983 (patch) | |
tree | 4feda00d2371bcc13c5e37c146c236066102878b | |
parent | 17a380052106a76047c614fb1d0d6571c75b2b13 (diff) |
Add description and risk to application versions
11 files changed, 91 insertions, 80 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 b2f817a2393..75bb7c406e7 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 @@ -1,6 +1,7 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.api.integration.deployment; +import ai.vespa.validation.Validation; import com.yahoo.component.Version; import java.time.Instant; @@ -8,6 +9,8 @@ import java.util.Objects; import java.util.Optional; import java.util.OptionalLong; +import static ai.vespa.validation.Validation.requireAtLeast; + /** * An application package version, identified by a source revision and a build number. * @@ -18,9 +21,7 @@ import java.util.OptionalLong; public class ApplicationVersion implements Comparable<ApplicationVersion> { /** Should not be used, but may still exist in serialized data :S */ - public static final ApplicationVersion unknown = new ApplicationVersion(Optional.empty(), OptionalLong.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), true, Optional.empty(), false, true); + public static final ApplicationVersion unknown = new ApplicationVersion(Optional.empty(), OptionalLong.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), true, Optional.empty(), false, true, Optional.empty(), 0); // This never changes and is only used to create a valid semantic version number, as required by application bundles private static final String majorVersion = "1.0"; @@ -36,12 +37,13 @@ public class ApplicationVersion implements Comparable<ApplicationVersion> { private final Optional<String> bundleHash; private final boolean hasPackage; private final boolean shouldSkip; + private final Optional<String> description; + private final int risk; - /** Public for serialisation only. */ public ApplicationVersion(Optional<SourceRevision> source, OptionalLong buildNumber, Optional<String> authorEmail, Optional<Version> compileVersion, Optional<Instant> buildTime, Optional<String> sourceUrl, Optional<String> commit, boolean deployedDirectly, Optional<String> bundleHash, - boolean hasPackage, boolean shouldSkip) { + boolean hasPackage, boolean shouldSkip, Optional<String> description, int risk) { if (buildNumber.isEmpty() && ( source.isPresent() || authorEmail.isPresent() || compileVersion.isPresent() || buildTime.isPresent() || sourceUrl.isPresent() || commit.isPresent())) throw new IllegalArgumentException("Build number must be present if any other attribute is"); @@ -69,6 +71,8 @@ public class ApplicationVersion implements Comparable<ApplicationVersion> { this.bundleHash = bundleHash; this.hasPackage = hasPackage; this.shouldSkip = shouldSkip; + this.description = description; + this.risk = requireAtLeast(risk, "application build risk", 0); } public RevisionId id() { @@ -78,26 +82,26 @@ public class ApplicationVersion implements Comparable<ApplicationVersion> { /** Create an application package version from a completed build, without an author email */ public static ApplicationVersion from(SourceRevision source, long buildNumber) { - return new ApplicationVersion(Optional.of(source), OptionalLong.of(buildNumber), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), false, - Optional.empty(), true, false); + return new ApplicationVersion(Optional.of(source), OptionalLong.of(buildNumber), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), false, Optional.empty(), true, false, Optional.empty(), 0); } /** Creates a version from a completed build, an author email, and build meta data. */ public static ApplicationVersion from(SourceRevision source, long buildNumber, String authorEmail, Version compileVersion, Instant buildTime) { - return new ApplicationVersion(Optional.of(source), OptionalLong.of(buildNumber), Optional.of(authorEmail), - Optional.of(compileVersion), Optional.of(buildTime), Optional.empty(), Optional.empty(), false, - Optional.empty(), true, false); + return new ApplicationVersion(Optional.of(source), OptionalLong.of(buildNumber), Optional.of(authorEmail), Optional.of(compileVersion), Optional.of(buildTime), Optional.empty(), Optional.empty(), false, Optional.empty(), true, false, Optional.empty(), 0); } - /** Creates a version from a completed build, an author email, and build meta data. */ - public static ApplicationVersion from(Optional<SourceRevision> source, long buildNumber, Optional<String> authorEmail, - Optional<Version> compileVersion, Optional<Instant> buildTime, - Optional<String> sourceUrl, Optional<String> commit, boolean deployedDirectly, - Optional<String> bundleHash) { - return new ApplicationVersion(source, OptionalLong.of(buildNumber), authorEmail, compileVersion, - buildTime, sourceUrl, commit, deployedDirectly, bundleHash, true, false); + public static ApplicationVersion forDevelopment(long buildNumber, Optional<Version> compileVersion) { + return new ApplicationVersion(Optional.empty(), OptionalLong.of(buildNumber), Optional.empty(), compileVersion, Optional.empty(), Optional.empty(), Optional.empty(), true, Optional.empty(), true, false, Optional.empty(), 0); + } + + /** Creates a version from a completed build, an author email, and build metadata. */ + public static ApplicationVersion forProduction(Optional<SourceRevision> source, long buildNumber, Optional<String> authorEmail, + Optional<Version> compileVersion, Optional<Instant> buildTime, + Optional<String> sourceUrl, Optional<String> commit, boolean deployedDirectly, + Optional<String> bundleHash, Optional<String> description, int risk) { + return new ApplicationVersion(source, OptionalLong.of(buildNumber), authorEmail, compileVersion, buildTime, + sourceUrl, commit, deployedDirectly, bundleHash, true, false, description, risk); } /** Returns a unique identifier for this version or "unknown" if version is not known */ @@ -161,7 +165,7 @@ public class ApplicationVersion implements Comparable<ApplicationVersion> { /** Returns a copy of this without a package stored. */ public ApplicationVersion withoutPackage() { - return new ApplicationVersion(source, buildNumber, authorEmail, compileVersion, buildTime, sourceUrl, commit, deployedDirectly, bundleHash, false, shouldSkip); + return new ApplicationVersion(source, buildNumber, authorEmail, compileVersion, buildTime, sourceUrl, commit, deployedDirectly, bundleHash, false, shouldSkip, Optional.empty(), 0); } /** Whether we still have the package for this revision. */ @@ -171,7 +175,7 @@ public class ApplicationVersion implements Comparable<ApplicationVersion> { /** Returns a copy of this which will not be rolled out to production. */ public ApplicationVersion skipped() { - return new ApplicationVersion(source, buildNumber, authorEmail, compileVersion, buildTime, sourceUrl, commit, deployedDirectly, bundleHash, hasPackage, true); + return new ApplicationVersion(source, buildNumber, authorEmail, compileVersion, buildTime, sourceUrl, commit, deployedDirectly, bundleHash, hasPackage, true, Optional.empty(), 0); } /** Whether we still have the package for this revision. */ @@ -184,6 +188,16 @@ public class ApplicationVersion implements Comparable<ApplicationVersion> { return hasPackage && ! shouldSkip; } + /** An optional, free-text description on this build. */ + public Optional<String> description() { + return description; + } + + /** The assumed risk of rolling out this revision, relative to the previous. */ + public int risk() { + return risk; + } + @Override public boolean equals(Object o) { if (this == o) return true; 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 8878b081cca..ae40e5220af 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 @@ -444,7 +444,7 @@ public class JobController { /** Accepts and stores a new application package and test jar pair under a generated application version key. */ public ApplicationVersion submit(TenantAndApplicationId id, Optional<SourceRevision> revision, Optional<String> authorEmail, Optional<String> sourceUrl, long projectId, ApplicationPackage applicationPackage, - byte[] testPackageBytes) { + byte[] testPackageBytes, Optional<String> description, int risk) { ApplicationController applications = controller.applications(); AtomicReference<ApplicationVersion> version = new AtomicReference<>(); applications.lockApplicationOrThrow(id, application -> { @@ -453,13 +453,15 @@ public class JobController { .map(ApplicationPackage::new); long previousBuild = previousVersion.map(latestVersion -> latestVersion.buildNumber().getAsLong()).orElse(0L); String packageHash = applicationPackage.bundleHash() + ApplicationPackage.calculateHash(testPackageBytes); - version.set(ApplicationVersion.from(revision, 1 + previousBuild, authorEmail, - applicationPackage.compileVersion(), - applicationPackage.buildTime(), - sourceUrl, - revision.map(SourceRevision::commit), - false, - Optional.of(packageHash))); + version.set(ApplicationVersion.forProduction(revision, 1 + previousBuild, authorEmail, + applicationPackage.compileVersion(), + applicationPackage.buildTime(), + sourceUrl, + revision.map(SourceRevision::commit), + false, + Optional.of(packageHash), + description, + risk)); byte[] diff = previousPackage.map(previous -> ApplicationPackageDiff.diff(previous, applicationPackage)) .orElseGet(() -> ApplicationPackageDiff.diffAgainstEmpty(applicationPackage)); @@ -565,10 +567,7 @@ public class JobController { lastRun.filter(run -> ! run.hasEnded()).ifPresent(run -> abortAndWait(run.id())); long build = 1 + lastRun.map(run -> run.versions().targetApplication().buildNumber().orElse(0)).orElse(0L); - ApplicationVersion version = ApplicationVersion.from(Optional.empty(), build, Optional.empty(), - applicationPackage.compileVersion(), - Optional.empty(), Optional.empty(), - Optional.empty(), true, Optional.empty()); + ApplicationVersion version = ApplicationVersion.forDevelopment(build, applicationPackage.compileVersion()); byte[] diff = getDiff(applicationPackage, deploymentId, lastRun); diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/RevisionHistory.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/RevisionHistory.java index a03a6e2aa4b..183079954bc 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/RevisionHistory.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/RevisionHistory.java @@ -88,9 +88,7 @@ public class RevisionHistory { // Fallback for when an application version isn't known for the given key. private static ApplicationVersion revisionOf(RevisionId id, boolean production) { - return new ApplicationVersion(Optional.empty(), OptionalLong.of(id.number()), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), - ! production, Optional.empty(), false, false); + return new ApplicationVersion(Optional.empty(), OptionalLong.of(id.number()), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), ! production, Optional.empty(), false, false, Optional.empty(), 0); } /** Returns the production {@link ApplicationVersion} with this revision ID. */ diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java index 3863733ad63..68965ba8ef9 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java @@ -110,6 +110,8 @@ public class ApplicationSerializer { private static final String repositoryField = "repositoryField"; private static final String branchField = "branchField"; private static final String commitField = "commitField"; + private static final String descriptionField = "description"; + private static final String riskField = "risk"; private static final String authorEmailField = "authorEmailField"; private static final String deployedDirectlyField = "deployedDirectly"; private static final String hasPackageField = "hasPackage"; @@ -254,6 +256,8 @@ public class ApplicationSerializer { object.setBool(deployedDirectlyField, applicationVersion.isDeployedDirectly()); object.setBool(hasPackageField, applicationVersion.hasPackage()); object.setBool(shouldSkipField, applicationVersion.shouldSkip()); + applicationVersion.description().ifPresent(description -> object.setString(descriptionField, description)); + if (applicationVersion.risk() != 0) object.setLong(riskField, applicationVersion.risk()); applicationVersion.bundleHash().ifPresent(bundleHash -> object.setString(bundleHashField, bundleHash)); } @@ -469,10 +473,12 @@ public class ApplicationSerializer { boolean deployedDirectly = object.field(deployedDirectlyField).asBool(); boolean hasPackage = ! object.field(hasPackageField).valid() || object.field(hasPackageField).asBool(); // TODO jonmv: remove default boolean shouldSkip = object.field(shouldSkipField).asBool(); + Optional<String> description = SlimeUtils.optionalString(object.field(descriptionField)); + int risk = (int) object.field(riskField).asLong(); Optional<String> bundleHash = SlimeUtils.optionalString(object.field(bundleHashField)); - return new ApplicationVersion(sourceRevision, applicationBuildNumber, authorEmail, compileVersion, buildTime, - sourceUrl, commit, deployedDirectly, bundleHash, hasPackage, shouldSkip); + return new ApplicationVersion(sourceRevision, applicationBuildNumber, authorEmail, compileVersion, buildTime, sourceUrl, + commit, deployedDirectly, bundleHash, hasPackage, shouldSkip, description, risk); } private Optional<SourceRevision> sourceRevisionFromSlime(Inspector object) { diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializer.java index 0a9795e7f3e..afe45bf6a1b 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializer.java @@ -186,8 +186,7 @@ class RunSerializer { boolean deployedDirectly = versionObject.field(deployedDirectlyField).asBool(); Optional<String> bundleHash = SlimeUtils.optionalString(versionObject.field(bundleHashField)); - return new ApplicationVersion(source, OptionalLong.of(buildNumber), authorEmail, compileVersion, - buildTime, sourceUrl, commit, deployedDirectly, bundleHash, false, false); + return new ApplicationVersion(source, OptionalLong.of(buildNumber), authorEmail, compileVersion, buildTime, sourceUrl, commit, deployedDirectly, bundleHash, false, false, Optional.empty(), 0); } // Don't change this — introduce a separate array instead. @@ -264,7 +263,6 @@ class RunSerializer { private void toSlime(Version platformVersion, ApplicationVersion applicationVersion, Cursor versionsObject) { versionsObject.setString(platformVersionField, platformVersion.toString()); applicationVersion.buildNumber().ifPresent(number -> versionsObject.setLong(buildField, number)); - // TODO jonmv: Remove source revision. applicationVersion.source().map(SourceRevision::repository).ifPresent(repository -> versionsObject.setString(repositoryField, repository)); applicationVersion.source().map(SourceRevision::branch).ifPresent(branch -> versionsObject.setString(branchField, branch)); applicationVersion.source().map(SourceRevision::commit).ifPresent(commit -> versionsObject.setString(commitField, commit)); diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java index d7e6a1d9c70..6800961c7de 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java @@ -2732,6 +2732,8 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler { : Optional.empty(); Optional<String> sourceUrl = optional("sourceUrl", submitOptions); Optional<String> authorEmail = optional("authorEmail", submitOptions); + Optional<String> description = optional("description", submitOptions); + int risk = (int) submitOptions.field("risk").asLong(); sourceUrl.map(URI::create).ifPresent(url -> { if (url.getHost() == null || url.getScheme() == null) @@ -2754,6 +2756,8 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler { sourceRevision, authorEmail, sourceUrl, + description, + risk, projectId, applicationPackage, dataParts.get(EnvironmentResource.APPLICATION_TEST_ZIP)); @@ -2761,7 +2765,7 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler { private HttpResponse removeAllProdDeployments(String tenant, String application) { JobControllerApiHandlerHelper.submitResponse(controller.jobController(), tenant, application, - Optional.empty(), Optional.empty(), Optional.empty(), 1, + Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), 0, 1, ApplicationPackage.deploymentRemoval(), new byte[0]); return new MessageResponse("All deployments removed"); } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java index d3dc42eb352..a9152e5d4bb 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java @@ -195,15 +195,10 @@ class JobControllerApiHandlerHelper { */ static HttpResponse submitResponse(JobController jobController, String tenant, String application, Optional<SourceRevision> sourceRevision, Optional<String> authorEmail, - Optional<String> sourceUrl, long projectId, + Optional<String> sourceUrl, Optional<String> description, int risk, long projectId, ApplicationPackage applicationPackage, byte[] testPackage) { - ApplicationVersion version = jobController.submit(TenantAndApplicationId.from(tenant, application), - sourceRevision, - authorEmail, - sourceUrl, - projectId, - applicationPackage, - testPackage); + ApplicationVersion version = jobController.submit(TenantAndApplicationId.from(tenant, application), sourceRevision, authorEmail, + sourceUrl, projectId, applicationPackage, testPackage, description, risk); return new MessageResponse(version.toString()); } 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 812a22d60a2..703cde6a589 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 @@ -283,8 +283,7 @@ public class DeploymentContext { .projectId() .orElse(1000); // These are really set through submission, so just pick one if it hasn't been set. var testerpackage = new byte[]{ (byte) (salt >> 56), (byte) (salt >> 48), (byte) (salt >> 40), (byte) (salt >> 32), (byte) (salt >> 24), (byte) (salt >> 16), (byte) (salt >> 8), (byte) salt }; - lastSubmission = jobs.submit(applicationId, sourceRevision, Optional.of("a@b"), Optional.empty(), - projectId, applicationPackage, testerpackage); + lastSubmission = jobs.submit(applicationId, sourceRevision, Optional.of("a@b"), Optional.empty(), projectId, applicationPackage, testerpackage, Optional.empty(), 0); return this; } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/JobRunnerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/JobRunnerTest.java index 71a6fcb1d84..f19833f9a40 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/JobRunnerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/JobRunnerTest.java @@ -94,7 +94,8 @@ public class JobRunnerTest { TenantAndApplicationId appId = tester.createApplication("tenant", "real", "default").id(); ApplicationId id = appId.defaultInstance(); - jobs.submit(appId, versions.targetApplication().source(), Optional.empty(), Optional.empty(), 2, applicationPackage, new byte[0]); + byte[] testPackageBytes = new byte[0]; + jobs.submit(appId, versions.targetApplication().source(), Optional.empty(), Optional.empty(), 2, applicationPackage, testPackageBytes, Optional.empty(), 0); start(jobs, id, systemTest); try { @@ -125,7 +126,8 @@ public class JobRunnerTest { TenantAndApplicationId appId = tester.createApplication("tenant", "real", "default").id(); ApplicationId id = appId.defaultInstance(); - jobs.submit(appId, versions.targetApplication().source(), Optional.empty(), Optional.empty(), 2, applicationPackage, new byte[0]); + byte[] testPackageBytes = new byte[0]; + jobs.submit(appId, versions.targetApplication().source(), Optional.empty(), Optional.empty(), 2, applicationPackage, testPackageBytes, Optional.empty(), 0); Supplier<Run> run = () -> jobs.last(id, systemTest).get(); start(jobs, id, systemTest); @@ -232,7 +234,8 @@ public class JobRunnerTest { TenantAndApplicationId appId = tester.createApplication("tenant", "real", "default").id(); ApplicationId id = appId.defaultInstance(); - jobs.submit(appId, versions.targetApplication().source(), Optional.empty(), Optional.empty(), 2, applicationPackage, new byte[0]); + byte[] testPackageBytes = new byte[0]; + jobs.submit(appId, versions.targetApplication().source(), Optional.empty(), Optional.empty(), 2, applicationPackage, testPackageBytes, Optional.empty(), 0); RunId runId = new RunId(id, systemTest, 1); start(jobs, id, systemTest); @@ -269,7 +272,8 @@ public class JobRunnerTest { TenantAndApplicationId appId = tester.createApplication("tenant", "real", "default").id(); ApplicationId instanceId = appId.defaultInstance(); JobId jobId = new JobId(instanceId, systemTest); - jobs.submit(appId, versions.targetApplication().source(), Optional.empty(), Optional.empty(), 2, applicationPackage, new byte[0]); + byte[] testPackageBytes = new byte[0]; + jobs.submit(appId, versions.targetApplication().source(), Optional.empty(), Optional.empty(), 2, applicationPackage, testPackageBytes, Optional.empty(), 0); assertFalse(jobs.lastSuccess(jobId).isPresent()); for (int i = 0; i < jobs.historyLength(); i++) { @@ -364,7 +368,8 @@ public class JobRunnerTest { TenantAndApplicationId appId = tester.createApplication("tenant", "real", "default").id(); ApplicationId id = appId.defaultInstance(); - jobs.submit(appId, versions.targetApplication().source(), Optional.empty(), Optional.empty(), 2, applicationPackage, new byte[0]); + byte[] testPackageBytes = new byte[0]; + jobs.submit(appId, versions.targetApplication().source(), Optional.empty(), Optional.empty(), 2, applicationPackage, testPackageBytes, Optional.empty(), 0); start(jobs, id, systemTest); tester.clock().advance(JobRunner.jobTimeout.plus(Duration.ofSeconds(1))); @@ -381,7 +386,8 @@ public class JobRunnerTest { TenantAndApplicationId appId = tester.createApplication("tenant", "real", "default").id(); ApplicationId id = appId.defaultInstance(); - jobs.submit(appId, versions.targetApplication().source(), Optional.empty(), Optional.empty(), 2, applicationPackage, new byte[0]); + byte[] testPackageBytes = new byte[0]; + jobs.submit(appId, versions.targetApplication().source(), Optional.empty(), Optional.empty(), 2, applicationPackage, testPackageBytes, Optional.empty(), 0); for (Step step : JobProfile.of(systemTest).steps()) outcomes.put(step, running); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java index 8b1751cbb8d..742bbaec918 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java @@ -85,16 +85,10 @@ public class ApplicationSerializerTest { List<Deployment> deployments = new ArrayList<>(); ApplicationVersion applicationVersion1 = new ApplicationVersion(Optional.of(new SourceRevision("git@github:org/repo.git", "branch1", "commit1")), - OptionalLong.of(31), - Optional.of("william@shakespeare"), - Optional.of(Version.fromString("1.2.3")), - Optional.of(Instant.ofEpochMilli(666)), - Optional.empty(), - Optional.of("best commit"), - true, - Optional.of("hash1"), - true, - false); + OptionalLong.of(31), Optional.of("william@shakespeare"), + Optional.of(Version.fromString("1.2.3")), Optional.of(Instant.ofEpochMilli(666)), + Optional.empty(), Optional.of("best commit"), true, Optional.of("hash1"), + true, false, Optional.of("~(˘▾˘)~"), 3); assertEquals("https://github/org/repo/tree/commit1", applicationVersion1.sourceUrl().get()); ApplicationVersion applicationVersion2 = ApplicationVersion @@ -120,8 +114,8 @@ public class ApplicationSerializerTest { ApplicationId id1 = ApplicationId.from("t1", "a1", "i1"); ApplicationId id3 = ApplicationId.from("t1", "a1", "i3"); - RevisionHistory revisions = RevisionHistory.ofRevisions(List.of(applicationVersion2), - Map.of(new JobId(id3, JobType.devUsEast1), List.of(applicationVersion1))); + RevisionHistory revisions = RevisionHistory.ofRevisions(List.of(applicationVersion1), + Map.of(new JobId(id3, JobType.devUsEast1), List.of(applicationVersion2))); List<Instance> instances = List.of(new Instance(id1, deployments, Map.of(JobType.systemTest, Instant.ofEpochMilli(333)), @@ -153,12 +147,17 @@ public class ApplicationSerializerTest { assertEquals(original.id(), serialized.id()); assertEquals(original.createdAt(), serialized.createdAt()); + assertEquals(applicationVersion1, serialized.revisions().last().get()); assertEquals(original.revisions().last(), serialized.revisions().last()); assertEquals(original.revisions().last().get().authorEmail(), serialized.revisions().last().get().authorEmail()); assertEquals(original.revisions().last().get().buildTime(), serialized.revisions().last().get().buildTime()); assertEquals(original.revisions().last().get().sourceUrl(), serialized.revisions().last().get().sourceUrl()); assertEquals(original.revisions().last().get().commit(), serialized.revisions().last().get().commit()); assertEquals(original.revisions().last().get().bundleHash(), serialized.revisions().last().get().bundleHash()); + assertEquals(original.revisions().last().get().hasPackage(), serialized.revisions().last().get().hasPackage()); + assertEquals(original.revisions().last().get().shouldSkip(), serialized.revisions().last().get().shouldSkip()); + assertEquals(original.revisions().last().get().description(), serialized.revisions().last().get().description()); + assertEquals(original.revisions().last().get().risk(), serialized.revisions().last().get().risk()); assertEquals(original.revisions().withPackage(), serialized.revisions().withPackage()); assertEquals(original.revisions().production(), serialized.revisions().production()); assertEquals(original.revisions().development(), serialized.revisions().development()); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializerTest.java index 237d54db20c..5f7d280a230 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializerTest.java @@ -25,6 +25,7 @@ import java.nio.file.Paths; import java.time.Instant; import java.util.Collections; import java.util.Optional; +import java.util.OptionalLong; import static com.yahoo.vespa.hosted.controller.deployment.RunStatus.aborted; import static com.yahoo.vespa.hosted.controller.deployment.RunStatus.running; @@ -82,17 +83,9 @@ public class RunSerializerTest { assertEquals(running, run.status()); assertEquals(3, run.lastTestLogEntry()); assertEquals(new Version(1, 2, 3), run.versions().targetPlatform()); - ApplicationVersion applicationVersion = ApplicationVersion.from(Optional.of(new SourceRevision("git@github.com:user/repo.git", - "master", - "f00bad")), - 123, - Optional.of("a@b"), - Optional.of(Version.fromString("6.3.1")), - Optional.of(Instant.ofEpochMilli(100)), - Optional.empty(), - Optional.empty(), - true, - Optional.empty()); + ApplicationVersion applicationVersion = new ApplicationVersion(Optional.of(new SourceRevision("git@github.com:user/repo.git", + "master", + "f00bad")), OptionalLong.of(123), Optional.of("a@b"), Optional.of(Version.fromString("6.3.1")), Optional.of(Instant.ofEpochMilli(100)), Optional.empty(), Optional.empty(), true, Optional.empty(), true, false, Optional.empty(), 0); assertEquals(applicationVersion, run.versions().targetApplication()); assertEquals(applicationVersion.authorEmail(), run.versions().targetApplication().authorEmail()); assertEquals(applicationVersion.buildTime(), run.versions().targetApplication().buildTime()); |