aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2022-04-10 13:44:39 +0200
committerjonmv <venstad@gmail.com>2022-04-11 13:42:26 +0200
commite4e448abbf8611f189a90e1ccc1348783005e983 (patch)
tree4feda00d2371bcc13c5e37c146c236066102878b
parent17a380052106a76047c614fb1d0d6571c75b2b13 (diff)
Add description and risk to application versions
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationVersion.java54
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java23
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/RevisionHistory.java4
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java10
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializer.java4
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java6
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java11
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java3
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/JobRunnerTest.java18
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java23
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializerTest.java15
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());