summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorValerij Fredriksen <freva@users.noreply.github.com>2019-05-23 15:17:35 +0200
committerGitHub <noreply@github.com>2019-05-23 15:17:35 +0200
commitc8856d2a54e8b49f927d4a1e5955cf5ecdcc4754 (patch)
tree8766fd62bf944e37f3ef0234e3cb194d1a8ae105 /controller-server
parentd51ea3aa7294ca6aaa6f57e32409425ff22d4487 (diff)
parent34c4932d15693496ec53d6dd77dfbe2e989e3943 (diff)
Merge pull request #9519 from vespa-engine/jvenstad/dev-jobs-in-overview
Display last of each dev deployment job in overview
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/JobRunner.java1
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java19
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java6
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelperTest.java14
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/dev-overview.json25
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobs.json4
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview.json3
7 files changed, 61 insertions, 11 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/JobRunner.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/JobRunner.java
index fb1e0599a4c..f13c31de5d7 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/JobRunner.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/JobRunner.java
@@ -34,7 +34,6 @@ public class JobRunner extends Maintainer {
private final ExecutorService executors;
private final StepRunner runner;
- @Inject
public JobRunner(Controller controller, Duration duration, JobControl jobControl) {
this(controller, duration, jobControl, Executors.newFixedThreadPool(32), new InternalStepRunner(controller));
}
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 d402f150725..ef7510ad18c 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
@@ -94,9 +94,11 @@ class JobControllerApiHandlerHelper {
Slime slime = new Slime();
Cursor responseObject = slime.setObject();
- Cursor lastVersionsObject = responseObject.setObject("lastVersions");
- lastPlatformToSlime(lastVersionsObject.setObject("platform"), controller, application, change, steps);
- lastApplicationToSlime(lastVersionsObject.setObject("application"), application, change, steps, controller);
+ if (application.deploymentJobs().statusOf(component).flatMap(JobStatus::lastSuccess).isPresent()) {
+ Cursor lastVersionsObject = responseObject.setObject("lastVersions");
+ lastPlatformToSlime(lastVersionsObject.setObject("platform"), controller, application, change, steps);
+ lastApplicationToSlime(lastVersionsObject.setObject("application"), application, change, steps, controller);
+ }
if ( ! change.isEmpty()) {
Cursor deployingObject = responseObject.setObject("deploying");
@@ -132,6 +134,17 @@ class JobControllerApiHandlerHelper {
running,
baseUriForJobs.resolve(baseUriForJobs.getPath() + "/" + type.jobName()).normalize());
});
+
+ Cursor devJobsObject = responseObject.setObject("devJobs");
+ for (JobType type : JobType.allIn(controller.system()))
+ if ( type.environment() != null
+ && type.environment().isManuallyDeployed()
+ && application.deployments().containsKey(type.zone(controller.system())))
+ controller.jobController().last(application.id(), type)
+ .ifPresent(last -> runToSlime(devJobsObject.setObject(type.jobName()),
+ last,
+ baseUriForJobs.resolve(baseUriForJobs.getPath() + "/" + type.jobName()).normalize()));
+
return new SlimeJsonResponse(slime);
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java
index 4ec075c3c16..a12a2b5e57a 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java
@@ -133,6 +133,7 @@ public class ApplicationApiTest extends ControllerContainerTest {
@Test
public void testApplicationApi() {
tester.computeVersionStatus();
+ tester.controller().jobController().setRunner(__ -> { }); // Avoid uncontrollable, multi-threaded job execution
createAthenzDomainWithAdmin(ATHENZ_TENANT_DOMAIN, USER_ID); // (Necessary but not provided in this API)
@@ -658,11 +659,6 @@ public class ApplicationApiTest extends ControllerContainerTest {
.screwdriverIdentity(SCREWDRIVER_ID),
"{\"message\":\"Successfully copied environment hosted-instance_tenant1_application1_placeholder_component_default to hosted-instance_tenant1_application1_us-west-1_prod_default\"}");
- // DELETE the deployment to dev
- tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/dev/region/us-east-1/instance/default", DELETE)
- .userIdentity(USER_ID),
- "Deactivated tenant/tenant1/application/application1/environment/dev/region/us-east-1/instance/default");
-
// DELETE an application
tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1", DELETE).userIdentity(USER_ID)
.oktaAccessToken(OKTA_AT),
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 8580677431c..616db640132 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
@@ -120,6 +120,20 @@ public class JobControllerApiHandlerHelperTest {
assertResponse(JobControllerApiHandlerHelper.runResponse(tester.jobs().runs(appId, devAwsUsEast2a), URI.create("https://some.url:43/root")), "dev-aws-us-east-2a-runs.json");
}
+ @Test
+ public void testDevResponses() {
+ InternalDeploymentTester tester = new InternalDeploymentTester();
+ tester.clock().setInstant(Instant.EPOCH);
+
+ ZoneId zone = JobType.devUsEast1.zone(tester.tester().controller().system());
+ tester.jobs().deploy(appId, JobType.devUsEast1, Optional.empty(), applicationPackage);
+ tester.configServer().convergeServices(appId, zone);
+ tester.setEndpoints(appId, zone);
+ tester.runner().run();
+
+ assertResponse(JobControllerApiHandlerHelper.jobTypeResponse(tester.tester().controller(), appId, URI.create("https://some.url:43/root")), "dev-overview.json");
+ }
+
private void compare(HttpResponse response, String expected) throws JSONException, IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
response.render(baos);
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/dev-overview.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/dev-overview.json
new file mode 100644
index 00000000000..c845d31a5fc
--- /dev/null
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/dev-overview.json
@@ -0,0 +1,25 @@
+{
+ "deployments": [],
+ "jobs": {},
+ "devJobs": {
+ "dev-us-east-1": {
+ "id": 1,
+ "status": "success",
+ "start": 0,
+ "end": 0,
+ "wantedPlatform": "6.1",
+ "wantedApplication": {
+ "hash": "unknown"
+ },
+ "steps": {
+ "deployReal": "succeeded",
+ "installReal": "succeeded"
+ },
+ "tasks": {
+ "deploy": "succeeded",
+ "install": "succeeded"
+ },
+ "log": "https://some.url:43/root/dev-us-east-1/run/1"
+ }
+ }
+}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobs.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobs.json
index 72dd13474dc..a5e4dd23079 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobs.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobs.json
@@ -128,5 +128,7 @@
],
"url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/default/job/production-us-west-1"
}
- }
+ },
+ "devJobs": {}
}
+
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview.json
index 84866650afc..a8ec9295868 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview.json
@@ -739,5 +739,6 @@
],
"url": "https://some.url:43/root/production-us-east-3"
}
- }
+ },
+ "devJobs": {}
}