summaryrefslogtreecommitdiffstats
path: root/configserver
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2021-12-03 11:31:37 +0100
committerMartin Polden <mpolden@mpolden.no>2021-12-03 11:31:37 +0100
commit204252c84781ad59927269d385e7ffe8596d70a3 (patch)
tree8df97ffd7fc3a7f05bdfd91f621e50e501c1c40f /configserver
parent6bdde0ca417ff739a520169819c9d89344519c5c (diff)
Ignore duplicate upstream names in API
Diffstat (limited to 'configserver')
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v1/RoutingStatusApiHandler.java17
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v1/RoutingStatusApiHandlerTest.java2
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());