aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorValerij Fredriksen <freva@users.noreply.github.com>2023-05-15 13:14:46 +0200
committerGitHub <noreply@github.com>2023-05-15 13:14:46 +0200
commitc078bfb87b1e4198e285b41ec1eec154e8064cf8 (patch)
tree2afcd001d4c82101238927f32cba42760f2a0ec6
parente448e60fac350ecb006c9576abdb25abd101cf69 (diff)
parented584bf928e2c83cea57b7b2966956777b147bad (diff)
Merge pull request #27111 from vespa-engine/jonmv/submission-timestamp
Add submission timestamp for prod packages, and show in detail API
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationVersion.java25
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/RevisionHistory.java2
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/Submission.java12
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java5
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java4
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java1
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java4
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java2
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/JobRunnerTest.java17
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java4
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview-2.json9
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview.json12
12 files changed, 63 insertions, 34 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 eb2005bf268..29e1d494ffc 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
@@ -35,12 +35,14 @@ public class ApplicationVersion implements Comparable<ApplicationVersion> {
private final boolean hasPackage;
private final boolean shouldSkip;
private final Optional<String> description;
+ private final Optional<Instant> submittedAt;
private final int risk;
public ApplicationVersion(RevisionId id, Optional<SourceRevision> source, Optional<String> authorEmail,
Optional<Version> compileVersion, Optional<Integer> allowedMajor, Optional<Instant> buildTime,
Optional<String> sourceUrl, Optional<String> commit, Optional<String> bundleHash,
- Optional<Instant> obsoleteAt, boolean hasPackage, boolean shouldSkip, Optional<String> description, int risk) {
+ Optional<Instant> obsoleteAt, boolean hasPackage, boolean shouldSkip, Optional<String> description,
+ Optional<Instant> submittedAt, int risk) {
if (commit.isPresent() && commit.get().length() > 128)
throw new IllegalArgumentException("Commit may not be longer than 128 characters");
@@ -64,6 +66,7 @@ public class ApplicationVersion implements Comparable<ApplicationVersion> {
this.hasPackage = hasPackage;
this.shouldSkip = shouldSkip;
this.description = description;
+ this.submittedAt = requireNonNull(submittedAt);
this.risk = requireAtLeast(risk, "application build risk", 0);
}
@@ -73,15 +76,18 @@ public class ApplicationVersion implements Comparable<ApplicationVersion> {
/** Creates a minimal version for a development build. */
public static ApplicationVersion forDevelopment(RevisionId id, Optional<Version> compileVersion, Optional<Integer> allowedMajor) {
- return new ApplicationVersion(id, Optional.empty(), Optional.empty(), compileVersion, allowedMajor, Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), true, false, Optional.empty(), 0);
+ return new ApplicationVersion(id, Optional.empty(), Optional.empty(), compileVersion, allowedMajor, Optional.empty(),
+ Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), true, false,
+ Optional.empty(), Optional.empty(), 0);
}
/** Creates a version from a completed build, an author email, and build metadata. */
public static ApplicationVersion forProduction(RevisionId id, Optional<SourceRevision> source, Optional<String> authorEmail,
Optional<Version> compileVersion, Optional<Integer> allowedMajor, Optional<Instant> buildTime, Optional<String> sourceUrl,
- Optional<String> commit, Optional<String> bundleHash, Optional<String> description, int risk) {
+ Optional<String> commit, Optional<String> bundleHash, Optional<String> description, Instant submittedAt, int risk) {
return new ApplicationVersion(id, source, authorEmail, compileVersion, allowedMajor, buildTime,
- sourceUrl, commit, bundleHash, Optional.empty(), true, false, description, risk);
+ sourceUrl, commit, bundleHash, Optional.empty(), true, false,
+ description, Optional.of(submittedAt), risk);
}
/** Returns a unique identifier for this version or "unknown" if version is not known */
@@ -140,12 +146,12 @@ public class ApplicationVersion implements Comparable<ApplicationVersion> {
/** Returns a copy of this without a package stored. */
public ApplicationVersion withoutPackage() {
- return new ApplicationVersion(id, source, authorEmail, compileVersion, allowedMajor, buildTime, sourceUrl, commit, bundleHash, obsoleteAt, false, shouldSkip, description, risk);
+ return new ApplicationVersion(id, source, authorEmail, compileVersion, allowedMajor, buildTime, sourceUrl, commit, bundleHash, obsoleteAt, false, shouldSkip, description, submittedAt, risk);
}
/** Returns a copy of this which is obsolete now. */
public ApplicationVersion obsoleteAt(Instant now) {
- return new ApplicationVersion(id, source, authorEmail, compileVersion, allowedMajor, buildTime, sourceUrl, commit, bundleHash, Optional.of(now), hasPackage, shouldSkip, description, risk);
+ return new ApplicationVersion(id, source, authorEmail, compileVersion, allowedMajor, buildTime, sourceUrl, commit, bundleHash, Optional.of(now), hasPackage, shouldSkip, description, submittedAt, risk);
}
/** Returns the instant at which this became obsolete, i.e., no longer relevant for automated deployments. */
@@ -160,7 +166,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(id, source, authorEmail, compileVersion, allowedMajor, buildTime, sourceUrl, commit, bundleHash, obsoleteAt, hasPackage, true, description, risk);
+ return new ApplicationVersion(id, source, authorEmail, compileVersion, allowedMajor, buildTime, sourceUrl, commit, bundleHash, obsoleteAt, hasPackage, true, description, submittedAt, risk);
}
/** Whether we still have the package for this revision. */
@@ -178,6 +184,11 @@ public class ApplicationVersion implements Comparable<ApplicationVersion> {
return description;
}
+ /** Instant at which this version was submitted to the build system. */
+ public Optional<Instant> submittedAt() {
+ return submittedAt;
+ }
+
/** The assumed risk of rolling out this revision, relative to the previous. */
public int risk() {
return risk;
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 272417ba0ac..72fff51d6b2 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
@@ -93,7 +93,7 @@ public class RevisionHistory {
// Fallback for when an application version isn't known for the given key.
private static ApplicationVersion revisionOf(RevisionId id) {
- return new ApplicationVersion(id, Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), false, false, Optional.empty(), 0);
+ return new ApplicationVersion(id, Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), false, false, Optional.empty(), 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/deployment/Submission.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/Submission.java
index 6c9de2fd584..e59b4eb0a07 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/Submission.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/Submission.java
@@ -5,8 +5,8 @@ import com.yahoo.vespa.hosted.controller.api.integration.deployment.RevisionId;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.SourceRevision;
import com.yahoo.vespa.hosted.controller.application.pkg.ApplicationPackage;
+import java.time.Instant;
import java.util.Optional;
-import java.util.OptionalInt;
import static com.yahoo.vespa.hosted.controller.application.pkg.ApplicationPackage.calculateHash;
@@ -21,23 +21,22 @@ public class Submission {
private final Optional<SourceRevision> source;
private final Optional<String> authorEmail;
private final Optional<String> description;
+ private final Instant now;
private final int risk;
public Submission(ApplicationPackage applicationPackage, byte[] testPackage, Optional<String> sourceUrl,
- Optional<SourceRevision> source, Optional<String> authorEmail, Optional<String> description, int risk) {
+ Optional<SourceRevision> source, Optional<String> authorEmail, Optional<String> description,
+ Instant now, int risk) {
this.applicationPackage = applicationPackage;
this.testPackage = testPackage;
this.sourceUrl = sourceUrl;
this.source = source;
this.authorEmail = authorEmail;
this.description = description;
+ this.now = now;
this.risk = risk;
}
- public static Submission basic(ApplicationPackage applicationPackage, byte[] testPackage) {
- return new Submission(applicationPackage, testPackage, Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), 0);
- }
-
public ApplicationVersion toApplicationVersion(long number) {
return ApplicationVersion.forProduction(RevisionId.forProduction(number),
source,
@@ -49,6 +48,7 @@ public class Submission {
source.map(SourceRevision::commit),
Optional.of(applicationPackage.bundleHash() + calculateHash(testPackage)),
description,
+ now,
risk);
}
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 e5006ab9785..9890a5b361b 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
@@ -116,6 +116,7 @@ public class ApplicationSerializer {
private static final String branchField = "branchField";
private static final String commitField = "commitField";
private static final String descriptionField = "description";
+ private static final String submittedAtField = "submittedAt";
private static final String riskField = "risk";
private static final String authorEmailField = "authorEmailField";
private static final String deployedDirectlyField = "deployedDirectly";
@@ -271,6 +272,7 @@ public class ApplicationSerializer {
object.setBool(hasPackageField, applicationVersion.hasPackage());
object.setBool(shouldSkipField, applicationVersion.shouldSkip());
applicationVersion.description().ifPresent(description -> object.setString(descriptionField, description));
+ applicationVersion.submittedAt().ifPresent(at -> object.setLong(submittedAtField, at.toEpochMilli()));
if (applicationVersion.risk() != 0) object.setLong(riskField, applicationVersion.risk());
applicationVersion.bundleHash().ifPresent(bundleHash -> object.setString(bundleHashField, bundleHash));
}
@@ -496,11 +498,12 @@ public class ApplicationSerializer {
boolean hasPackage = object.field(hasPackageField).asBool();
boolean shouldSkip = object.field(shouldSkipField).asBool();
Optional<String> description = SlimeUtils.optionalString(object.field(descriptionField));
+ Optional<Instant> submittedAt = SlimeUtils.optionalInstant(object.field(submittedAtField));
int risk = (int) object.field(riskField).asLong();
Optional<String> bundleHash = SlimeUtils.optionalString(object.field(bundleHashField));
return new ApplicationVersion(id, sourceRevision, authorEmail, compileVersion, allowedMajor, buildTime,
- sourceUrl, commit, bundleHash, obsoleteAt, hasPackage, shouldSkip, description, risk);
+ sourceUrl, commit, bundleHash, obsoleteAt, hasPackage, shouldSkip, description, submittedAt, risk);
}
private Optional<SourceRevision> sourceRevisionFromSlime(Inspector object) {
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 f7cca7d1015..f911bde9535 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
@@ -3070,7 +3070,7 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler {
ApplicationPackage applicationPackage =
new ApplicationPackage(dataParts.get(APPLICATION_ZIP), true, controller.system().isPublic());
byte[] testPackage = dataParts.getOrDefault(APPLICATION_TEST_ZIP, new byte[0]);
- Submission submission = new Submission(applicationPackage, testPackage, sourceUrl, sourceRevision, authorEmail, description, risk);
+ Submission submission = new Submission(applicationPackage, testPackage, sourceUrl, sourceRevision, authorEmail, description, controller.clock().instant(), risk);
TenantName tenantName = TenantName.from(tenant);
controller.applications().verifyPlan(tenantName);
@@ -3089,7 +3089,7 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler {
JobControllerApiHandlerHelper.submitResponse(controller.jobController(),
TenantAndApplicationId.from(tenant, application),
new Submission(ApplicationPackage.deploymentRemoval(), new byte[0], Optional.empty(),
- Optional.empty(), Optional.empty(), Optional.empty(), 0),
+ Optional.empty(), Optional.empty(), Optional.empty(), controller.clock().instant(), 0),
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 7f2b8c8a924..2f93ce999cd 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
@@ -416,6 +416,7 @@ class JobControllerApiHandlerHelper {
version.description().ifPresent(description -> versionObject.setString("description", description));
if (version.risk() != 0) versionObject.setLong("risk", version.risk());
versionObject.setBool("deployable", version.isDeployable());
+ version.submittedAt().ifPresent(submittedAt -> versionObject.setLong("submittedAt", submittedAt.toEpochMilli()));
}
static void toSlime(Cursor versionObject, ApplicationVersion version) {
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java
index 04c8c46e1ef..693a74f8651 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java
@@ -109,7 +109,7 @@ public class ControllerTest {
context.submit(applicationPackage);
RevisionId id = RevisionId.forProduction(1);
Version compileVersion = new Version("6.1");
- assertEquals(new ApplicationVersion(id, Optional.of(DeploymentContext.defaultSourceRevision), Optional.of("a@b"), Optional.of(compileVersion), Optional.empty(), Optional.of(Instant.ofEpochSecond(1)), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), true, false, Optional.empty(), 0),
+ assertEquals(new ApplicationVersion(id, Optional.of(DeploymentContext.defaultSourceRevision), Optional.of("a@b"), Optional.of(compileVersion), Optional.empty(), Optional.of(Instant.ofEpochSecond(1)), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), true, false, Optional.empty(), Optional.empty(), 0),
context.application().revisions().get(context.instance().change().revision().get()),
"Application version is known from completion of initial job");
context.runJob(systemTest);
@@ -1339,7 +1339,7 @@ public class ControllerTest {
ApplicationPackage applicationPackage = ApplicationPackageBuilder.fromDeploymentXml(deploymentXml);
byte[] testPackage = ApplicationPackage.filesZip(Map.of("tests/staging-test/foo.json", new byte[0]));
var app = tester.newDeploymentContext();
- tester.jobs().submit(app.application().id(), Submission.basic(applicationPackage, testPackage), 1);
+ tester.jobs().submit(app.application().id(), new Submission(applicationPackage, testPackage, Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Instant.EPOCH, 0), 1);
assertEquals(List.of(new Notification(tester.clock().instant(),
Type.testPackage,
Level.warning,
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 d32ec03469e..da982fa67a8 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
@@ -318,7 +318,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, new Submission(applicationPackage, testerpackage, Optional.empty(), sourceRevision, Optional.of("a@b"), Optional.empty(), risk), projectId).id();
+ lastSubmission = jobs.submit(applicationId, new Submission(applicationPackage, testerpackage, Optional.empty(), sourceRevision, Optional.of("a@b"), Optional.empty(), tester.clock().instant(), risk), projectId).id();
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 f761c605f9d..b0fe2867ab7 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
@@ -24,6 +24,7 @@ import com.yahoo.vespa.hosted.controller.integration.MetricsMock;
import org.junit.jupiter.api.Test;
import java.time.Duration;
+import java.time.Instant;
import java.util.Collections;
import java.util.EnumMap;
import java.util.List;
@@ -92,7 +93,7 @@ public class JobRunnerTest {
TenantAndApplicationId appId = tester.createApplication("tenant", "real", "default").id();
ApplicationId id = appId.defaultInstance();
byte[] testPackageBytes = new byte[0];
- jobs.submit(appId, Submission.basic(applicationPackage, testPackageBytes), 2);
+ jobs.submit(appId, submission(applicationPackage, testPackageBytes), 2);
start(jobs, id, systemTest);
try {
start(jobs, id, systemTest);
@@ -128,7 +129,7 @@ public class JobRunnerTest {
TenantAndApplicationId appId = tester.createApplication("tenant", "real", "default").id();
ApplicationId id = appId.defaultInstance();
byte[] testPackageBytes = new byte[0];
- jobs.submit(appId, Submission.basic(applicationPackage, testPackageBytes), 2);
+ jobs.submit(appId, submission(applicationPackage, testPackageBytes), 2);
Supplier<Run> run = () -> jobs.last(id, systemTest).get();
start(jobs, id, systemTest);
@@ -236,7 +237,7 @@ public class JobRunnerTest {
TenantAndApplicationId appId = tester.createApplication("tenant", "real", "default").id();
ApplicationId id = appId.defaultInstance();
byte[] testPackageBytes = new byte[0];
- jobs.submit(appId, Submission.basic(applicationPackage, testPackageBytes), 2);
+ jobs.submit(appId, submission(applicationPackage, testPackageBytes), 2);
RunId runId = new RunId(id, systemTest, 1);
start(jobs, id, systemTest);
@@ -276,7 +277,7 @@ public class JobRunnerTest {
ApplicationId instanceId = appId.defaultInstance();
JobId jobId = new JobId(instanceId, systemTest);
byte[] testPackageBytes = new byte[0];
- jobs.submit(appId, Submission.basic(applicationPackage, testPackageBytes), 2);
+ jobs.submit(appId, submission(applicationPackage, testPackageBytes), 2);
assertFalse(jobs.lastSuccess(jobId).isPresent());
for (int i = 0; i < jobs.historyLength(); i++) {
@@ -372,7 +373,7 @@ public class JobRunnerTest {
TenantAndApplicationId appId = tester.createApplication("tenant", "real", "default").id();
ApplicationId id = appId.defaultInstance();
byte[] testPackageBytes = new byte[0];
- jobs.submit(appId, Submission.basic(applicationPackage, testPackageBytes), 2);
+ jobs.submit(appId, submission(applicationPackage, testPackageBytes), 2);
start(jobs, id, systemTest);
tester.clock().advance(JobRunner.jobTimeout.plus(Duration.ofSeconds(1)));
@@ -390,7 +391,7 @@ public class JobRunnerTest {
TenantAndApplicationId appId = tester.createApplication("tenant", "real", "default").id();
ApplicationId id = appId.defaultInstance();
byte[] testPackageBytes = new byte[0];
- jobs.submit(appId, Submission.basic(applicationPackage, testPackageBytes), 2);
+ jobs.submit(appId, submission(applicationPackage, testPackageBytes), 2);
for (Step step : JobProfile.of(systemTest).steps())
outcomes.put(step, running);
@@ -475,4 +476,8 @@ public class JobRunnerTest {
};
}
+ private static Submission submission(ApplicationPackage applicationPackage, byte[] testPackage) {
+ return new Submission(applicationPackage, testPackage, Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Instant.EPOCH, 0);
+ }
+
}
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 b71d3cf838b..69b473dce87 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
@@ -105,13 +105,14 @@ public class ApplicationSerializerTest {
true,
false,
Optional.of("~(˘▾˘)~"),
+ Optional.of(Instant.ofEpochMilli(496)),
3);
assertEquals("https://github/org/repo/tree/commit1", applicationVersion1.sourceUrl().get());
RevisionId id = RevisionId.forDevelopment(31, new JobId(id1, DeploymentContext.productionUsEast3));
SourceRevision source = new SourceRevision("repo1", "branch1", "commit1");
Version compileVersion = Version.fromString("6.3.1");
- ApplicationVersion applicationVersion2 = new ApplicationVersion(id, Optional.of(source), Optional.of("a@b"), Optional.of(compileVersion), Optional.empty(), Optional.of(Instant.ofEpochMilli(496)), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), true, false, Optional.empty(), 0);
+ ApplicationVersion applicationVersion2 = new ApplicationVersion(id, Optional.of(source), Optional.of("a@b"), Optional.of(compileVersion), Optional.empty(), Optional.of(Instant.ofEpochMilli(496)), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), true, false, Optional.empty(), Optional.empty(), 0);
Instant activityAt = Instant.parse("2018-06-01T10:15:30.00Z");
deployments.add(new Deployment(zone1, CloudAccount.empty, applicationVersion1.id(), Version.fromString("1.2.3"), Instant.ofEpochMilli(3),
DeploymentMetrics.none, DeploymentActivity.none, QuotaUsage.none, OptionalDouble.empty()));
@@ -179,6 +180,7 @@ public class ApplicationSerializerTest {
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().submittedAt(), serialized.revisions().last().get().submittedAt());
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());
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview-2.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview-2.json
index b103b579166..19b3d5dc2d7 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview-2.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview-2.json
@@ -1266,21 +1266,24 @@
"compileVersion": "6.1.0",
"sourceUrl": "repository1/tree/commit1",
"commit": "commit1",
- "deployable": true
+ "deployable": true,
+ "submittedAt": 14403000
},
{
"build": 2,
"compileVersion": "6.1.0",
"sourceUrl": "repository1/tree/commit1",
"commit": "commit1",
- "deployable": true
+ "deployable": true,
+ "submittedAt": 1000
},
{
"build": 1,
"compileVersion": "6.1.0",
"sourceUrl": "repository1/tree/commit1",
"commit": "commit1",
- "deployable": true
+ "deployable": true,
+ "submittedAt": 0
}
]
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview.json
index 500f66a7cdb..1d115049b35 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview.json
@@ -706,7 +706,8 @@
"commit": "commit1",
"description": "my best commit yet",
"risk": 9001,
- "deployable": true
+ "deployable": true,
+ "submittedAt": 1600000000000
},
{
"build": 3,
@@ -715,7 +716,8 @@
"commit": "commit1",
"description": "my best commit yet",
"risk": 9001,
- "deployable": false
+ "deployable": false,
+ "submittedAt": 1600000000000
},
{
"build": 2,
@@ -724,7 +726,8 @@
"commit": "commit1",
"description": "my best commit yet",
"risk": 9001,
- "deployable": false
+ "deployable": false,
+ "submittedAt": 1600000000000
},
{
"build": 1,
@@ -733,7 +736,8 @@
"commit": "commit1",
"description": "my best commit yet",
"risk": 9001,
- "deployable": true
+ "deployable": true,
+ "submittedAt": 1600000000000
}
]
}