summaryrefslogtreecommitdiffstats
path: root/configserver
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@verizonmedia.com>2019-10-28 19:33:53 +0100
committerValerij Fredriksen <valerijf@verizonmedia.com>2019-10-28 19:33:53 +0100
commit8db26b1b2cc3babb1afd234fe152857440de37ba (patch)
tree2aef1d019c4425be40b58a27579f0e154becc1e4 /configserver
parent93b092487fe0ee071b83787f8073bbaeb00e9826 (diff)
Fix application handler bindings to work with instance
Diffstat (limited to 'configserver')
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandler.java44
-rw-r--r--configserver/src/main/resources/configserver-app/services.xml13
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>