diff options
author | Martin Polden <mpolden@mpolden.no> | 2017-09-20 08:48:27 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2017-09-20 09:13:56 +0200 |
commit | e019f5c7c1cac7ba4d390cf29b6027498f1cb43a (patch) | |
tree | 488a2c671ef5e56f929aa7f48c3be4c2d6c74362 /controller-server | |
parent | d825bb328c94e138ea87301282c85cc4edb5e585 (diff) |
Expose upgradePolicy in deployment API
Diffstat (limited to 'controller-server')
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" + } ] }, { |