diff options
author | Jon Marius Venstad <venstad@gmail.com> | 2021-04-26 11:54:47 +0200 |
---|---|---|
committer | Jon Marius Venstad <venstad@gmail.com> | 2021-04-26 11:54:47 +0200 |
commit | d5a79bc8f72a0c7b78341995c9d20bb9dbc50ff3 (patch) | |
tree | 11d368108f8f8053c2f8bf603569acb1121451e0 | |
parent | 631c80aa875baff4f2d3de15bf54736ed97c4096 (diff) |
Let null values mean no query, and allow explicitly empty parameters
3 files changed, 23 insertions, 58 deletions
diff --git a/configserver-client/src/main/java/ai/vespa/hosted/client/AbstractConfigServerClient.java b/configserver-client/src/main/java/ai/vespa/hosted/client/AbstractConfigServerClient.java index 626b08d17ee..d7853320149 100644 --- a/configserver-client/src/main/java/ai/vespa/hosted/client/AbstractConfigServerClient.java +++ b/configserver-client/src/main/java/ai/vespa/hosted/client/AbstractConfigServerClient.java @@ -146,12 +146,23 @@ public abstract class AbstractConfigServerClient implements ConfigServerClient { } @Override + public ConfigServerClient.RequestBuilder emptyParameters(List<String> keys) { + for (String key : keys) + uriBuilder.setParameter(key, null); + + return this; + } + + @Override public RequestBuilder parameters(List<String> pairs) { if (pairs.size() % 2 != 0) throw new IllegalArgumentException("Must supply parameter key/values in pairs"); - for (int i = 0; i < pairs.size(); ) - uriBuilder.setParameter(pairs.get(i++), pairs.get(i++)); + for (int i = 0; i < pairs.size(); ) { + String key = pairs.get(i++), value = pairs.get(i++); + if (value != null) + uriBuilder.setParameter(key, value); + } return this; } diff --git a/configserver-client/src/main/java/ai/vespa/hosted/client/ConfigServerClient.java b/configserver-client/src/main/java/ai/vespa/hosted/client/ConfigServerClient.java index f8cb22c65b0..c92acd7cd0b 100644 --- a/configserver-client/src/main/java/ai/vespa/hosted/client/ConfigServerClient.java +++ b/configserver-client/src/main/java/ai/vespa/hosted/client/ConfigServerClient.java @@ -4,7 +4,6 @@ package ai.vespa.hosted.client; import org.apache.hc.client5.http.config.RequestConfig; import org.apache.hc.core5.http.ClassicHttpRequest; import org.apache.hc.core5.http.ClassicHttpResponse; -import org.apache.hc.core5.http.ContentType; import org.apache.hc.core5.http.HttpEntity; import org.apache.hc.core5.http.HttpStatus; import org.apache.hc.core5.http.Method; @@ -21,7 +20,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; -import java.util.function.BiFunction; import java.util.function.Consumer; import java.util.function.Function; import java.util.stream.IntStream; @@ -77,12 +75,20 @@ public interface ConfigServerClient extends Closeable { /** Sets the request body. */ RequestBuilder body(HttpEntity entity); - /** Sets the parameter key/values for the request. Number of arguments must be even. */ + /** Sets query parameters without a value, like {@code ?debug&recursive}. */ + default RequestBuilder emptyParameters(String... keys) { + return emptyParameters(Arrays.asList(keys)); + } + + /** Sets query parameters without a value, like {@code ?debug&recursive}. */ + RequestBuilder emptyParameters(List<String> keys); + + /** Sets the parameter key/values for the request. Number of arguments must be even. Null values are omitted. */ default RequestBuilder parameters(String... pairs) { return parameters(Arrays.asList(pairs)); } - /** Sets the parameter key/values for the request. Number of arguments must be even. */ + /** Sets the parameter key/values for the request. Number of arguments must be even. Null values are omitted. */ RequestBuilder parameters(List<String> pairs); /** Overrides the default socket read timeout of the request. {@code Duration.ZERO} gives infinite timeout. */ diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/ConfigServerException.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/ConfigServerException.java deleted file mode 100644 index 4240b0d9fa6..00000000000 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/ConfigServerException.java +++ /dev/null @@ -1,52 +0,0 @@ -// 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.api.integration.configserver; - -import java.net.URI; -import java.util.Objects; - -/** - * @author Tony Vaagenes - */ -public class ConfigServerException extends RuntimeException { - - private final URI serverUri; - private final ErrorCode errorCode; - private final String serverMessage; - - public ConfigServerException(URI serverUri, String context, String serverMessage, ErrorCode errorCode, Throwable cause) { - super(context + ": " + serverMessage, cause); - this.serverUri = Objects.requireNonNull(serverUri); - this.errorCode = Objects.requireNonNull(errorCode); - this.serverMessage = Objects.requireNonNull(serverMessage); - } - - public ErrorCode getErrorCode() { - return errorCode; - } - - public URI getServerUri() { - return serverUri; - } - - public String getServerMessage() { - return serverMessage; - } - - // TODO: Copied from Vespa. Expose these in Vespa and use them here - public enum ErrorCode { - APPLICATION_LOCK_FAILURE, - BAD_REQUEST, - ACTIVATION_CONFLICT, - INTERNAL_SERVER_ERROR, - INVALID_APPLICATION_PACKAGE, - METHOD_NOT_ALLOWED, - NOT_FOUND, - OUT_OF_CAPACITY, - REQUEST_TIMEOUT, - UNKNOWN_VESPA_VERSION, - PARENT_HOST_NOT_READY, - CERTIFICATE_NOT_READY, - LOAD_BALANCER_NOT_READY - } - -} |