summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2017-09-20 08:48:27 +0200
committerMartin Polden <mpolden@mpolden.no>2017-09-20 09:13:56 +0200
commite019f5c7c1cac7ba4d390cf29b6027498f1cb43a (patch)
tree488a2c671ef5e56f929aa7f48c3be4c2d6c74362 /controller-server
parentd825bb328c94e138ea87301282c85cc4edb5e585 (diff)
Expose upgradePolicy in deployment API
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiHandler.java39
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerControllerTester.java11
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiTest.java50
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/responses/root.json9
4 files changed, 81 insertions, 28 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiHandler.java
index affd679f2c2..8a5f1e4639a 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiHandler.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiHandler.java
@@ -1,6 +1,7 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.controller.restapi.deployment;
+import com.yahoo.config.application.api.DeploymentSpec;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.container.jdisc.HttpRequest;
import com.yahoo.container.jdisc.HttpResponse;
@@ -98,25 +99,37 @@ public class DeploymentApiHandler extends LoggingRequestHandler {
if (failingSince == null) continue; // started working just now
Cursor applicationObject = failingArray.addObject();
- toSlime(id, applicationObject, request);
+ toSlime(application.get(), applicationObject, request);
applicationObject.setLong("failingSince", failingSince.toEpochMilli());
+
}
Cursor productionArray = versionObject.setArray("productionApplications");
- for (ApplicationId id : version.statistics().production())
- toSlime(id, productionArray.addObject(), request);
+ for (ApplicationId id : version.statistics().production()) {
+ Optional<Application> application = controller.applications().get(id);
+ if ( ! application.isPresent()) continue; // deleted just now
+ toSlime(application.get(), productionArray.addObject(), request);
+ }
}
return new SlimeJsonResponse(slime);
}
-
- private void toSlime(ApplicationId id, Cursor object, HttpRequest request) {
- object.setString("tenant", id.tenant().value());
- object.setString("application", id.application().value());
- object.setString("instance", id.instance().value());
- object.setString("url", new Uri(request.getUri()).withPath("/application/v4" +
- "/tenant/" + id.tenant().value() +
- "/application/" + id.application().value())
- .toString());
+
+ private void toSlime(Application application, Cursor object, HttpRequest request) {
+ object.setString("tenant", application.id().tenant().value());
+ object.setString("application", application.id().application().value());
+ object.setString("instance", application.id().instance().value());
+ object.setString("url", new Uri(request.getUri()).withPath("/application/v4/tenant/" +
+ application.id().tenant().value() +
+ "/application/" +
+ application.id().application().value()).toString());
+ object.setString("upgradePolicy", toString(application.deploymentSpec().upgradePolicy()));
}
-
+
+ private static String toString(DeploymentSpec.UpgradePolicy upgradePolicy) {
+ if (upgradePolicy == DeploymentSpec.UpgradePolicy.defaultPolicy) {
+ return "default";
+ }
+ return upgradePolicy.name();
+ }
+
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerControllerTester.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerControllerTester.java
index 72abbaa3477..ae88e7ab19c 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerControllerTester.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerControllerTester.java
@@ -54,12 +54,17 @@ public class ContainerControllerTester {
public ContainerTester containerTester() { return containerTester; }
public Application createApplication() {
- AthensDomain domain1 = addTenantAthensDomain("domain1", "mytenant");
- controller.tenants().addTenant(Tenant.createAthensTenant(new TenantId("tenant1"), domain1,
+ return createApplication("domain1","tenant1",
+ "application1");
+ }
+
+ public Application createApplication(String athensDomain, String tenant, String application) {
+ AthensDomain domain1 = addTenantAthensDomain(athensDomain, "mytenant");
+ controller.tenants().addTenant(Tenant.createAthensTenant(new TenantId(tenant), domain1,
new Property("property1"),
Optional.of(new PropertyId("1234"))),
Optional.of(TestIdentities.userNToken));
- ApplicationId app = ApplicationId.from("tenant1", "application1", "default");
+ ApplicationId app = ApplicationId.from(tenant, application, "default");
return controller.applications().createApplication(app, Optional.of(TestIdentities.userNToken));
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiTest.java
index 26741148d3a..ed04b73305d 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiTest.java
@@ -22,6 +22,7 @@ import java.util.ArrayList;
import java.util.List;
import static com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobType.component;
+import static com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobType.productionCorpUsEast1;
import static com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobType.stagingTest;
import static com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobType.systemTest;
@@ -37,18 +38,45 @@ public class DeploymentApiTest extends ControllerContainerTest {
ContainerControllerTester tester = new ContainerControllerTester(container, responseFiles);
tester.containerTester().updateSystemVersion();
long projectId = 11;
- Application app = tester.createApplication();
- ApplicationPackage applicationPackage = new ApplicationPackageBuilder()
- .environment(Environment.prod)
- .region("corp-us-east-1")
- .build();
- tester.notifyJobCompletion(app.id(), projectId, true, component);
- tester.deploy(app, applicationPackage, new Zone(Environment.test, RegionName.from("us-east-1")), projectId);
- tester.notifyJobCompletion(app.id(), projectId, true, systemTest);
- tester.deploy(app, applicationPackage, new Zone(Environment.staging, RegionName.from("us-east-3")), projectId);
- tester.notifyJobCompletion(app.id(), projectId, false, stagingTest);
- tester.controller().updateVersionStatus(censorConfigServers(VersionStatus.compute(tester.controller()),
+ {
+ Application failingApplication = tester.createApplication("domain1", "tenant1",
+ "application1");
+ ApplicationPackage applicationPackage = new ApplicationPackageBuilder()
+ .environment(Environment.prod)
+ .region("corp-us-east-1")
+ .build();
+ tester.notifyJobCompletion(failingApplication.id(), projectId, true, component);
+ tester.deploy(failingApplication, applicationPackage, new Zone(Environment.test,
+ RegionName.from("us-east-1")), projectId);
+ tester.notifyJobCompletion(failingApplication.id(), projectId, true, systemTest);
+ tester.deploy(failingApplication, applicationPackage, new Zone(Environment.staging,
+ RegionName.from("us-east-3")), projectId);
+ tester.notifyJobCompletion(failingApplication.id(), projectId, false, stagingTest);
+ }
+
+ {
+ Application productionApplication = tester.createApplication("domain2", "tenant2",
+ "application2");
+ ApplicationPackage applicationPackage = new ApplicationPackageBuilder()
+ .upgradePolicy("conservative")
+ .environment(Environment.prod)
+ .region("corp-us-east-1")
+ .build();
+ tester.notifyJobCompletion(productionApplication.id(), projectId, true, component);
+ tester.deploy(productionApplication, applicationPackage, new Zone(Environment.test,
+ RegionName.from("us-east-1")), projectId);
+ tester.notifyJobCompletion(productionApplication.id(), projectId, true, systemTest);
+ tester.deploy(productionApplication, applicationPackage, new Zone(Environment.staging,
+ RegionName.from("us-east-3")), projectId);
+ tester.notifyJobCompletion(productionApplication.id(), projectId, true, stagingTest);
+ tester.deploy(productionApplication, applicationPackage, new Zone(Environment.staging,
+ RegionName.from("corp-us-east-1")),
+ projectId);
+ tester.notifyJobCompletion(productionApplication.id(), projectId, true, productionCorpUsEast1);
+ }
+
+ tester.controller().updateVersionStatus(censorConfigServers(VersionStatus.compute(tester.controller()),
tester.controller()));
tester.assertResponse(new Request("http://localhost:8080/deployment/v1/"),
new File("root.json"));
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/responses/root.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/responses/root.json
index 4ea1359519f..77ee29f6c7a 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/responses/root.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/responses/root.json
@@ -21,11 +21,18 @@
"application":"application1",
"instance":"default",
"url":"http://localhost:8080/application/v4/tenant/tenant1/application/application1",
+ "upgradePolicy": "default",
"failingSince": "(ignore)"
}
],
"productionApplications":[
-
+ {
+ "tenant":"tenant2",
+ "application":"application2",
+ "instance":"default",
+ "url":"http://localhost:8080/application/v4/tenant/tenant2/application/application2",
+ "upgradePolicy": "conservative"
+ }
]
},
{