diff options
-rw-r--r-- | configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandler.java | 44 | ||||
-rw-r--r-- | configserver/src/main/resources/configserver-app/services.xml | 13 |
2 files changed, 30 insertions, 27 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandler.java index 0d27af0a7ad..68c54b87fba 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandler.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandler.java @@ -13,6 +13,7 @@ import com.yahoo.container.jdisc.HttpRequest; import com.yahoo.container.jdisc.HttpResponse; import com.yahoo.jdisc.Response; import com.yahoo.jdisc.application.BindingMatch; +import com.yahoo.jdisc.application.UriPattern; import com.yahoo.vespa.config.server.ApplicationRepository; import com.yahoo.vespa.config.server.http.ContentHandler; import com.yahoo.vespa.config.server.http.ContentRequest; @@ -22,7 +23,11 @@ import com.yahoo.vespa.config.server.http.JSONResponse; import com.yahoo.vespa.config.server.http.NotFoundException; import java.time.Duration; +import java.util.List; +import java.util.Objects; import java.util.Optional; +import java.util.stream.Collectors; +import java.util.stream.Stream; /** * Operations on applications (delete, wait for config convergence, restart, application content etc.) @@ -31,6 +36,22 @@ import java.util.Optional; */ public class ApplicationHandler extends HttpHandler { + private static final List<UriPattern> URI_PATTERNS = Stream.of( + "http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/content/*", + "http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/filedistributionstatus", + "http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/restart", + "http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/suspended", + "http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/serviceconverge", + "http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/serviceconverge/*", + "http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/clustercontroller/*/status/*", + "http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/metrics", + "http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/logs", + "http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*", + "http://*/application/v2/tenant/*/application/*/logs", // TODO: Remove once all clients switched to handler with instance name + "http://*/application/v2/tenant/*/application/*") + .map(UriPattern::new) + .collect(Collectors.toList()); + private final Zone zone; private final ApplicationRepository applicationRepository; @@ -138,20 +159,15 @@ public class ApplicationHandler extends HttpHandler { } private static BindingMatch<?> getBindingMatch(HttpRequest request) { - return HttpConfigRequests.getBindingMatch(request, - // WARNING: UPDATE src/main/resources/configserver-app/services.xml IF YOU MAKE ANY CHANGES TO THESE BINDINGS! - "http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/content/*", - "http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/filedistributionstatus", - "http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/restart", - "http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/suspended", - "http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/serviceconverge", - "http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/serviceconverge/*", - "http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/clustercontroller/*/status/*", - "http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/metrics", - "http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/logs", - "http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*", - "http://*/application/v2/tenant/*/application/*/logs", // TODO: Remove once all clients switched to handler with instance name - "http://*/application/v2/tenant/*/application/*"); + return URI_PATTERNS.stream() + .map(pattern -> { + UriPattern.Match match = pattern.match(request.getUri()); + if (match == null) return null; + return new BindingMatch<>(match, new Object(), pattern); + }) + .filter(Objects::nonNull) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("Illegal url for config request: " + request.getUri())); } private static boolean isIsSuspendedRequest(HttpRequest request) { diff --git a/configserver/src/main/resources/configserver-app/services.xml b/configserver/src/main/resources/configserver-app/services.xml index baec8a31a8b..970dd49e865 100644 --- a/configserver/src/main/resources/configserver-app/services.xml +++ b/configserver/src/main/resources/configserver-app/services.xml @@ -116,20 +116,7 @@ <binding>http://*/application/v2/tenant/*/application/</binding> </handler> <handler id='com.yahoo.vespa.config.server.http.v2.ApplicationHandler' bundle='configserver'> - <!-- WARNING: THIS LIST *MUST* MATCH THE ONE IN ApplicationHandler::getBindingMatch --> - <binding>http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/content/*</binding> - <binding>http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/filedistributionstatus</binding> - <binding>http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/suspended</binding> - <binding>http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/restart</binding> - <binding>http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/converge</binding> - <binding>http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/serviceconverge</binding> - <binding>http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/serviceconverge/*</binding> - <binding>http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/clustercontroller/*/status/*</binding> - <binding>http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/metrics</binding> - <binding>http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*/logs</binding> - <binding>http://*/application/v2/tenant/*/application/*/environment/*/region/*/instance/*</binding> <binding>http://*/application/v2/tenant/*/application/*</binding> - <binding>http://*/application/v2/tenant/*/application/*/logs</binding> </handler> <handler id='com.yahoo.vespa.config.server.http.v2.HttpGetConfigHandler' bundle='configserver'> <binding>http://*/config/v2/tenant/*/application/*/*</binding> |