diff options
author | Martin Polden <mpolden@mpolden.no> | 2021-12-03 11:31:37 +0100 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2021-12-03 11:31:37 +0100 |
commit | 204252c84781ad59927269d385e7ffe8596d70a3 (patch) | |
tree | 8df97ffd7fc3a7f05bdfd91f621e50e501c1c40f /configserver | |
parent | 6bdde0ca417ff739a520169819c9d89344519c5c (diff) |
Ignore duplicate upstream names in API
Diffstat (limited to 'configserver')
2 files changed, 11 insertions, 8 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 76ae03e8b3a..957868f2abb 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 @@ -21,10 +21,12 @@ import com.yahoo.yolean.Exceptions; import java.time.Clock; import java.time.Duration; import java.time.Instant; +import java.util.Arrays; import java.util.List; import java.util.Locale; import java.util.Objects; import java.util.Optional; +import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; import java.util.stream.Collectors; @@ -105,12 +107,12 @@ public class RoutingStatusApiHandler extends RestApiRequestHandler<RoutingStatus /** Change routing status of a deployment */ private SlimeJsonResponse changeDeploymentStatus(RestApi.RequestContext context) { - List<String> upstreamNames = upstreamNames(context); + Set<String> upstreamNames = upstreamNames(context); ApplicationId instance = instance(context); RestApi.RequestContext.RequestContent requestContent = context.requestContentOrThrow(); Slime requestBody = Exceptions.uncheck(() -> SlimeUtils.jsonToSlime(requestContent.content().readAllBytes())); DeploymentRoutingStatus wantedStatus = deploymentRoutingStatusFromSlime(requestBody, clock.instant()); - DeploymentRoutingStatus currentStatus = deploymentStatus(upstreamNames.get(0)); + DeploymentRoutingStatus currentStatus = deploymentStatus(upstreamNames.iterator().next()); // Redeploy application so that a new LbServicesConfig containing the updated status is generated and consumed // by routing layer. This is required to update weights for application endpoints when routing status for a @@ -151,7 +153,7 @@ public class RoutingStatusApiHandler extends RestApiRequestHandler<RoutingStatus } /** Change the status of one or more upstream names */ - private void changeStatus(List<String> upstreamNames, DeploymentRoutingStatus newStatus) { + private void changeStatus(Set<String> upstreamNames, DeploymentRoutingStatus newStatus) { CuratorTransaction transaction = new CuratorTransaction(curator); for (var upstreamName : upstreamNames) { Path path = deploymentStatusPath(upstreamName); @@ -194,12 +196,13 @@ public class RoutingStatusApiHandler extends RestApiRequestHandler<RoutingStatus } private static String upstreamName(RestApi.RequestContext context) { - return upstreamNames(context).get(0); + return upstreamNames(context).iterator().next(); } - private static List<String> upstreamNames(RestApi.RequestContext context) { - List<String> upstreamNames = List.of(context.pathParameters().getStringOrThrow("upstreamName") - .split(",")); + private static Set<String> upstreamNames(RestApi.RequestContext context) { + Set<String> upstreamNames = Arrays.stream(context.pathParameters().getStringOrThrow("upstreamName") + .split(",")) + .collect(Collectors.toSet()); if (upstreamNames.isEmpty()) { throw new RestApiException.BadRequest("At least one upstream name must be specified"); } 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 760607d538f..d16030767d5 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 @@ -93,7 +93,7 @@ public class RoutingStatusApiHandlerTest { // Change status of multiple upstreams deployer.failNextDeployment(false); String upstreamName2 = "upstream2"; - String upstreams = upstreamName + "," + upstreamName2; + String upstreams = upstreamName + "," + upstreamName2 + "," + upstreamName2; response = responseAsString(executeRequest(Method.PUT, "/routing/v1/status/" + upstreams + "?application=" + instance.serializedForm(), statusOut())); String outResponse = response("OUT", "issue-XXX", "operator", clock.instant()); |