summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Musum <musum@verizonmedia.com>2019-07-16 14:39:17 +0200
committerGitHub <noreply@github.com>2019-07-16 14:39:17 +0200
commit42ddcf1448be94f0db216f20d552f1a00623a783 (patch)
treedf0785dcc404e55b6d68efa6c10c4290390e086d
parent91f91af6c61c7c4aa6f4cd9b61ec0186cc9582b0 (diff)
parent9fdac26d4032aef2ba491c69238c8fc039727e05 (diff)
Merge pull request #10046 from vespa-engine/mpolden/app-version-of-direct-deployment
Handle lookup of application version of direct deployments
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/Versions.java17
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/InternalDeploymentTester.java3
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelperTest.java24
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobs-direct-deployment.json79
4 files changed, 110 insertions, 13 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/Versions.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/Versions.java
index bef61dda875..068a41ed92c 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/Versions.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/Versions.java
@@ -131,18 +131,21 @@ public class Versions {
return change.platform().get();
return max(change.platform(), deployment.map(Deployment::version))
- .orElse(application.oldestDeployedPlatform()
- .orElse(defaultVersion));
+ .orElseGet(() -> application.oldestDeployedPlatform().orElse(defaultVersion));
}
private static ApplicationVersion targetApplication(Application application, Change change,
Optional<Deployment> deployment) {
return max(change.application(), deployment.map(Deployment::applicationVersion))
- .orElse(application.oldestDeployedApplication()
- .orElse(application.deploymentJobs().jobStatus().get(JobType.component)
- .lastSuccess()
- .get()
- .application()));
+ .orElseGet(() -> defaultApplicationVersion(application));
+ }
+
+ private static ApplicationVersion defaultApplicationVersion(Application application) {
+ return application.oldestDeployedApplication()
+ .orElseGet(() -> Optional.ofNullable(application.deploymentJobs().jobStatus().get(JobType.component))
+ .flatMap(JobStatus::lastSuccess)
+ .map(JobStatus.JobRun::application)
+ .orElse(ApplicationVersion.unknown));
}
private static <T extends Comparable<T>> Optional<T> max(Optional<T> o1, Optional<T> o2) {
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/InternalDeploymentTester.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/InternalDeploymentTester.java
index a992ce1e3de..6725e05dd6d 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/InternalDeploymentTester.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/InternalDeploymentTester.java
@@ -34,6 +34,7 @@ import static com.yahoo.vespa.hosted.controller.deployment.RunStatus.aborted;
import static com.yahoo.vespa.hosted.controller.deployment.Step.Status.unfinished;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertTrue;
public class InternalDeploymentTester {
@@ -171,7 +172,7 @@ public class InternalDeploymentTester {
.findAny()
.orElseThrow(() -> new AssertionError(type + " is not among the active: " + jobs.active()));
assertFalse(run.hasFailed());
- assertFalse(run.status() == aborted);
+ assertNotSame(aborted, run.status());
ZoneId zone = type.zone(tester.controller().system());
DeploymentId deployment = new DeploymentId(appId, zone);
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelperTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelperTest.java
index 616db640132..614df953ca9 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelperTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelperTest.java
@@ -2,11 +2,13 @@
package com.yahoo.vespa.hosted.controller.restapi.application;
import com.yahoo.component.Version;
+import com.yahoo.config.provision.zone.ZoneId;
import com.yahoo.container.jdisc.HttpResponse;
+import com.yahoo.vespa.hosted.controller.api.application.v4.model.DeployOptions;
import com.yahoo.vespa.hosted.controller.api.integration.configserver.ConfigServerException;
-import com.yahoo.config.provision.zone.ZoneId;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.ApplicationVersion;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.JobType;
+import com.yahoo.vespa.hosted.controller.deployment.ApplicationPackageBuilder;
import com.yahoo.vespa.hosted.controller.deployment.InternalDeploymentTester;
import org.json.JSONException;
import org.json.JSONObject;
@@ -134,12 +136,24 @@ public class JobControllerApiHandlerHelperTest {
assertResponse(JobControllerApiHandlerHelper.jobTypeResponse(tester.tester().controller(), appId, URI.create("https://some.url:43/root")), "dev-overview.json");
}
+ @Test
+ public void testResponsesWithDirectDeployment() {
+ var tester = new InternalDeploymentTester();
+ tester.clock().setInstant(Instant.EPOCH);
+ var region = "us-west-1";
+ var applicationPackage = new ApplicationPackageBuilder().region(region).build();
+ // Deploy directly to production zone, like integration tests.
+ tester.tester().controller().applications().deploy(tester.app().id(), ZoneId.from("prod", region),
+ Optional.of(applicationPackage),
+ new DeployOptions(true, Optional.empty(),
+ false, false));
+ assertResponse(JobControllerApiHandlerHelper.jobTypeResponse(tester.tester().controller(), appId, URI.create("https://some.url:43/root/")),
+ "jobs-direct-deployment.json");
+ }
+
private void compare(HttpResponse response, String expected) throws JSONException, IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
response.render(baos);
-
- System.err.println(baos);
-
JSONObject actualJSON = new JSONObject(new String(baos.toByteArray()));
JSONObject expectedJSON = new JSONObject(expected);
assertEquals(expectedJSON.toString(), actualJSON.toString());
@@ -148,7 +162,7 @@ public class JobControllerApiHandlerHelperTest {
private void assertResponse(HttpResponse response, String fileName) {
try {
Path path = Paths.get("src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/").resolve(fileName);
- String expected = new String(Files.readAllBytes(path));
+ String expected = Files.readString(path);
compare(response, expected);
} catch (Exception e) {
throw new RuntimeException(e);
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobs-direct-deployment.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobs-direct-deployment.json
new file mode 100644
index 00000000000..5535e286dcd
--- /dev/null
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobs-direct-deployment.json
@@ -0,0 +1,79 @@
+{
+ "devJobs": {},
+ "deployments": [
+ {
+ "us-west-1": {
+ "at": 0,
+ "application": {
+ "hash": "unknown"
+ },
+ "verified": false,
+ "platform": "6.1"
+ }
+ }
+ ],
+ "lastVersions": {},
+ "deploying": {},
+ "jobs": {
+ "staging-test": {
+ "runs": [
+ {
+ "reason": "Testing for productionUsWest1",
+ "wantedPlatform": "6.1",
+ "currentPlatform": "6.1",
+ "wantedApplication": {
+ "hash": "unknown"
+ },
+ "currentApplication": {
+ "hash": "unknown"
+ },
+ "tasks": {
+ "capacity": "running"
+ },
+ "status": "pending"
+ }
+ ],
+ "url": "https://some.url:43/root/staging-test"
+ },
+ "system-test": {
+ "runs": [
+ {
+ "reason": "Testing for productionUsWest1",
+ "wantedPlatform": "6.1",
+ "currentPlatform": "6.1",
+ "wantedApplication": {
+ "hash": "unknown"
+ },
+ "currentApplication": {
+ "hash": "unknown"
+ },
+ "tasks": {
+ "capacity": "running"
+ },
+ "status": "pending"
+ }
+ ],
+ "url": "https://some.url:43/root/system-test"
+ },
+ "us-west-1": {
+ "runs": [
+ {
+ "wantedPlatform": "6.1",
+ "currentPlatform": "6.1",
+ "wantedApplication": {
+ "hash": "unknown"
+ },
+ "currentApplication": {
+ "hash": "unknown"
+ },
+ "tasks": {
+ "staging-test": "pending",
+ "system-test": "pending"
+ },
+ "status": "pending"
+ }
+ ],
+ "url": "https://some.url:43/root/production-us-west-1"
+ }
+ }
+}