summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2022-02-11 12:56:16 +0100
committerMartin Polden <mpolden@mpolden.no>2022-02-11 12:56:16 +0100
commitf1d670e03ac8ed0ce4bd37b10448b57f769917d9 (patch)
tree2b632e38ddff73e7df6a39a283196acc1e6f9137
parentb85edf5d732c4ceaca4012c15e7755e6e690bdf2 (diff)
Add /routing/v2/status API
Allows status client to retrieve everything it needs with a single request.
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v1/RoutingStatusApiHandler.java19
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v1/RoutingStatusApiHandlerTest.java16
2 files changed, 35 insertions, 0 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v1/RoutingStatusApiHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v1/RoutingStatusApiHandler.java
index d9cbc7bc533..569ed1525b2 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v1/RoutingStatusApiHandler.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v1/RoutingStatusApiHandler.java
@@ -63,6 +63,7 @@ public class RoutingStatusApiHandler extends RestApiRequestHandler<RoutingStatus
private static RestApi createRestApiDefinition(RoutingStatusApiHandler self) {
return RestApi.builder()
+ // TODO(mpolden): Remove this route when clients have migrated to v2
.addRoute(RestApi.route("/routing/v1/status")
.get(self::listInactiveDeployments))
.addRoute(RestApi.route("/routing/v1/status/zone")
@@ -72,9 +73,27 @@ public class RoutingStatusApiHandler extends RestApiRequestHandler<RoutingStatus
.addRoute(RestApi.route("/routing/v1/status/{upstreamName}")
.get(self::getDeploymentStatus)
.put(self::changeDeploymentStatus))
+ .addRoute(RestApi.route("/routing/v2/status")
+ .get(self::getDeploymentStatusV2))
.build();
}
+ /* Get inactive deployments and zone status */
+ private SlimeJsonResponse getDeploymentStatusV2(RestApi.RequestContext context) {
+ Slime slime = new Slime();
+ Cursor root = slime.setObject();
+ Cursor inactiveDeploymentsArray = root.setArray("inactiveDeployments");
+ curator.getChildren(DEPLOYMENT_STATUS_ROOT).stream()
+ .filter(upstreamName -> deploymentStatus(upstreamName).status() == RoutingStatus.out)
+ .sorted()
+ .forEach(upstreamName -> {
+ Cursor deploymentObject = inactiveDeploymentsArray.addObject();
+ deploymentObject.setString("upstreamName", upstreamName);
+ });
+ root.setBool("zoneActive", zoneStatus() == RoutingStatus.in);
+ return new SlimeJsonResponse(slime);
+ }
+
/** Get upstream of all deployments with status OUT */
private SlimeJsonResponse listInactiveDeployments(RestApi.RequestContext context) {
List<String> inactiveDeployments = curator.getChildren(DEPLOYMENT_STATUS_ROOT).stream()
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v1/RoutingStatusApiHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v1/RoutingStatusApiHandlerTest.java
index e2b45d33cbc..f389829a160 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v1/RoutingStatusApiHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v1/RoutingStatusApiHandlerTest.java
@@ -62,6 +62,22 @@ public class RoutingStatusApiHandlerTest {
}
@Test
+ public void get_deployment_status_v2() {
+ String response = responseAsString(executeRequest(Method.GET, "/routing/v2/status/", null));
+ assertEquals("{\"inactiveDeployments\":[],\"zoneActive\":true}", response);
+
+ // Set deployment out
+ executeRequest(Method.PUT, "/routing/v1/status/" + upstreamName + "?application=" + instance.serializedForm(), statusOut());
+ response = responseAsString(executeRequest(Method.GET, "/routing/v2/status/", null));
+ assertEquals("{\"inactiveDeployments\":[{\"upstreamName\":\"test-upstream-name\"}],\"zoneActive\":true}", response);
+
+ // Set zone out
+ executeRequest(Method.PUT, "/routing/v1/status/zone", null);
+ response = responseAsString(executeRequest(Method.GET, "/routing/v2/status/", null));
+ assertEquals("{\"inactiveDeployments\":[{\"upstreamName\":\"test-upstream-name\"}],\"zoneActive\":false}", response);
+ }
+
+ @Test
public void set_deployment_status() {
String response = responseAsString(executeRequest(Method.PUT, "/routing/v1/status/" + upstreamName + "?application=" + instance.serializedForm(),
statusOut()));