summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2019-02-27 09:44:33 +0100
committerMartin Polden <mpolden@mpolden.no>2019-02-27 09:44:33 +0100
commitac8e514c25340390750ce8ef71545bbf962a5a4e (patch)
tree7b51897b218d98168e38e5546584fd45528772d5 /controller-server
parentc975bdf233d3cf01d225b5e507aea7b8194b5a8a (diff)
Expose per-cluster rotations in application API
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java7
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java13
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java17
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application-cluster-global-rotation.json18
4 files changed, 55 insertions, 0 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java
index a5e952b76c1..d68b3652675 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java
@@ -46,6 +46,7 @@ import com.yahoo.vespa.hosted.controller.application.Deployment;
import com.yahoo.vespa.hosted.controller.application.JobList;
import com.yahoo.vespa.hosted.controller.application.JobStatus;
import com.yahoo.vespa.hosted.controller.application.JobStatus.JobRun;
+import com.yahoo.vespa.hosted.controller.application.RoutingPolicy;
import com.yahoo.vespa.hosted.controller.application.SystemApplication;
import com.yahoo.vespa.hosted.controller.athenz.impl.ZmsClientFacade;
import com.yahoo.vespa.hosted.controller.concurrent.Once;
@@ -699,10 +700,16 @@ public class ApplicationController {
application, zone, platformVersion, applicationVersion, deployment.version(), deployment.applicationVersion()));
}
+ /** Returns the rotation repository, used for managing global rotation assignments */
public RotationRepository rotationRepository() {
return rotationRepository;
}
+ /** Returns all known routing policies for given application */
+ public Set<RoutingPolicy> routingPolicies(ApplicationId application) {
+ return curator.readRoutingPolicies(application);
+ }
+
/** Sort given list of applications by application ID */
private static List<Application> sort(List<Application> applications) {
return applications.stream().sorted(Comparator.comparing(Application::id)).collect(Collectors.toList());
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 a22f8ff37fd..0d5130b8aeb 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
@@ -9,6 +9,7 @@ import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.ApplicationName;
import com.yahoo.config.provision.Environment;
import com.yahoo.config.provision.RegionName;
+import com.yahoo.config.provision.RotationName;
import com.yahoo.config.provision.TenantName;
import com.yahoo.container.jdisc.HttpRequest;
import com.yahoo.container.jdisc.HttpResponse;
@@ -63,8 +64,10 @@ import com.yahoo.vespa.hosted.controller.application.Deployment;
import com.yahoo.vespa.hosted.controller.application.DeploymentCost;
import com.yahoo.vespa.hosted.controller.application.DeploymentJobs;
import com.yahoo.vespa.hosted.controller.application.DeploymentMetrics;
+import com.yahoo.vespa.hosted.controller.application.GlobalDnsName;
import com.yahoo.vespa.hosted.controller.application.JobStatus;
import com.yahoo.vespa.hosted.controller.application.RotationStatus;
+import com.yahoo.vespa.hosted.controller.application.RoutingPolicy;
import com.yahoo.vespa.hosted.controller.application.SystemApplication;
import com.yahoo.vespa.hosted.controller.athenz.impl.ZmsClientFacade;
import com.yahoo.vespa.hosted.controller.deployment.DeploymentTrigger;
@@ -98,6 +101,7 @@ import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Scanner;
+import java.util.Set;
import java.util.logging.Level;
import static java.util.stream.Collectors.joining;
@@ -483,6 +487,15 @@ public class ApplicationApiHandler extends LoggingRequestHandler {
object.setString("rotationId", application.rotation().get().asString());
});
+ // Per-cluster rotations
+ Set<RoutingPolicy> routingPolicies = controller.applications().routingPolicies(application.id());
+ for (RoutingPolicy policy : routingPolicies) {
+ for (RotationName rotation : policy.rotations()) {
+ GlobalDnsName dnsName = new GlobalDnsName(application.id(), controller.system(), rotation);
+ globalRotationsArray.addString(dnsName.oathUrl().toString());
+ }
+ }
+
// Deployments sorted according to deployment spec
List<Deployment> deployments = controller.applications().deploymentTrigger()
.steps(application.deploymentSpec())
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 8705945c75c..e2bf6a20684 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
@@ -10,6 +10,7 @@ import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.Environment;
import com.yahoo.config.provision.HostName;
import com.yahoo.config.provision.RegionName;
+import com.yahoo.config.provision.RotationName;
import com.yahoo.config.provision.TenantName;
import com.yahoo.slime.Cursor;
import com.yahoo.slime.Inspector;
@@ -44,6 +45,7 @@ import com.yahoo.vespa.hosted.controller.application.DeploymentJobs;
import com.yahoo.vespa.hosted.controller.application.DeploymentMetrics;
import com.yahoo.vespa.hosted.controller.application.JobStatus;
import com.yahoo.vespa.hosted.controller.application.RotationStatus;
+import com.yahoo.vespa.hosted.controller.application.RoutingPolicy;
import com.yahoo.vespa.hosted.controller.athenz.ApplicationAction;
import com.yahoo.vespa.hosted.controller.athenz.HostedAthenzIdentities;
import com.yahoo.vespa.hosted.controller.athenz.mock.AthenzClientFactoryMock;
@@ -76,6 +78,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
+import java.util.Set;
import java.util.TreeMap;
import java.util.function.Supplier;
@@ -1285,6 +1288,20 @@ public class ApplicationApiTest extends ControllerContainerTest {
assertEquals(DeploymentJobs.JobError.outOfCapacity, jobStatus.jobError().get());
}
+ @Test
+ public void applicationWithPerClusterGlobalRotation() {
+ Application app = controllerTester.createApplication();
+ RoutingPolicy policy = new RoutingPolicy(app.id(), ZoneId.from(Environment.prod, RegionName.from("us-west-1")),
+ HostName.from("lb-0"), HostName.from("lb-0-canonical-name"),
+ Optional.of("dns-zone-1"), Set.of(RotationName.from("c0")));
+ tester.controller().curator().writeRoutingPolicies(app.id(), Set.of(policy));
+
+ // GET application
+ tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1", GET)
+ .userIdentity(USER_ID),
+ new File("application-cluster-global-rotation.json"));
+ }
+
private void notifyCompletion(DeploymentJobs.JobReport report, ContainerControllerTester tester) {
assertResponse(request("/application/v4/tenant/tenant1/application/application1/jobreport", POST)
.userIdentity(HOSTED_VESPA_OPERATOR)
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application-cluster-global-rotation.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application-cluster-global-rotation.json
new file mode 100644
index 00000000000..d23662b024b
--- /dev/null
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application-cluster-global-rotation.json
@@ -0,0 +1,18 @@
+{
+ "application": "application1",
+ "instance": "default",
+ "deployments": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/default/job/",
+ "deployedInternally": false,
+ "deploymentJobs": [],
+ "changeBlockers": [],
+ "compileVersion": "7.0.0",
+ "globalRotations": [
+ "https://c0--application1--tenant1.global.vespa.oath.cloud:4443/"
+ ],
+ "instances": [],
+ "metrics": {
+ "queryServiceQuality": 0.0,
+ "writeServiceQuality": 0.0
+ },
+ "activity": {}
+}