diff options
author | Jon Marius Venstad <jonmv@gmail.com> | 2022-04-07 16:29:59 +0200 |
---|---|---|
committer | Jon Marius Venstad <jonmv@gmail.com> | 2022-04-07 16:29:59 +0200 |
commit | 75114c6c4b96f507071a2caf145b24a22ef0c5ff (patch) | |
tree | e4cca74c128bfdad380bc74a9f501d981b9c78ef /configserver | |
parent | 190dde5de267462b02c43a18ad605da469715949 (diff) |
Use HttpURL for base url and query in StateRequestHandler
Diffstat (limited to 'configserver')
-rw-r--r-- | configserver/src/main/java/com/yahoo/vespa/serviceview/StateRequestHandler.java | 42 | ||||
-rw-r--r-- | configserver/src/test/java/com/yahoo/vespa/serviceview/StateRequestHandlerTest.java | 9 |
2 files changed, 26 insertions, 25 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/serviceview/StateRequestHandler.java b/configserver/src/main/java/com/yahoo/vespa/serviceview/StateRequestHandler.java index 1eea88e9caf..59b91a52791 100644 --- a/configserver/src/main/java/com/yahoo/vespa/serviceview/StateRequestHandler.java +++ b/configserver/src/main/java/com/yahoo/vespa/serviceview/StateRequestHandler.java @@ -12,7 +12,6 @@ import ai.vespa.http.HttpURL.Query; import ai.vespa.http.HttpURL.Scheme; import com.yahoo.restapi.RestApi; import com.yahoo.restapi.RestApiRequestHandler; -import com.yahoo.restapi.UriBuilder; import com.yahoo.vespa.serviceview.bindings.ApplicationView; import com.yahoo.vespa.serviceview.bindings.ConfigClient; import com.yahoo.vespa.serviceview.bindings.HealthClient; @@ -92,7 +91,7 @@ public class StateRequestHandler extends RestApiRequestHandler<StateRequestHandl } private ApplicationView getDefaultUserInfo(RestApi.RequestContext context) { - return getUserInfo(context.uriBuilder(), "default", "default", "default", "default", "default"); + return getUserInfo(context.baseRequestURL(), "default", "default", "default", "default", "default"); } private ApplicationView getUserInfo(RestApi.RequestContext context) { @@ -101,7 +100,7 @@ public class StateRequestHandler extends RestApiRequestHandler<StateRequestHandl String environmentName = context.pathParameters().getStringOrThrow("environmentName"); String regionName = context.pathParameters().getStringOrThrow("regionName"); String instanceName = context.pathParameters().getStringOrThrow("instanceName"); - return getUserInfo(context.uriBuilder(), tenantName, applicationName, environmentName, regionName, instanceName); + return getUserInfo(context.baseRequestURL(), tenantName, applicationName, environmentName, regionName, instanceName); } public HashMap<?, ?> singleService(RestApi.RequestContext context) { @@ -112,14 +111,15 @@ public class StateRequestHandler extends RestApiRequestHandler<StateRequestHandl String instanceName = context.pathParameters().getStringOrThrow("instanceName"); String identifier = context.pathParameters().getStringOrThrow("serviceIdentifier"); Path apiParams = context.pathParameters().getRest().orElse(Path.empty()); - return singleService(context.uriBuilder(), context.request().getUri(), tenantName, applicationName, environmentName, regionName, instanceName, identifier, apiParams); + Query apiQuery = context.queryParameters().getFullQuery(); + return singleService(context.baseRequestURL(), tenantName, applicationName, environmentName, regionName, instanceName, identifier, apiParams, apiQuery); } - protected ApplicationView getUserInfo(UriBuilder uriBuilder, String tenantName, String applicationName, String environmentName, String regionName, String instanceName) { + protected ApplicationView getUserInfo(HttpURL url, String tenantName, String applicationName, String environmentName, String regionName, String instanceName) { ServiceModel model = new ServiceModel( getModelConfig(tenantName, applicationName, environmentName, regionName, instanceName)); return model.showAllClusters( - baseUri(uriBuilder).toString(), + baseUri(url).toString(), applicationIdentifier(tenantName, applicationName, environmentName, regionName, instanceName)); } @@ -130,18 +130,18 @@ public class StateRequestHandler extends RestApiRequestHandler<StateRequestHandl } protected HashMap<?, ?> singleService( - UriBuilder uriBuilder, URI requestUri, String tenantName, String applicationName, String environmentName, String regionName, String instanceName, String identifier, Path apiParams) { + HttpURL url, String tenantName, String applicationName, String environmentName, String regionName, String instanceName, String identifier, Path path, Query query) { ServiceModel model = new ServiceModel(getModelConfig(tenantName, applicationName, environmentName, regionName, instanceName)); Service s = model.getService(identifier); int requestedPort = s.matchIdentifierWithPort(identifier); - HealthClient resource = getHealthClient(apiParams, s, requestedPort, requestUri.getRawQuery(), client); + HealthClient resource = getHealthClient(path, s, requestedPort, query, client); HashMap<?, ?> apiResult = resource.getHealthInfo(); - rewriteResourceLinks(uriBuilder, apiResult, model, s, applicationIdentifier(tenantName, applicationName, environmentName, regionName, instanceName), identifier); + rewriteResourceLinks(url, apiResult, model, s, applicationIdentifier(tenantName, applicationName, environmentName, regionName, instanceName), identifier); return apiResult; } - protected HealthClient getHealthClient(Path apiParams, Service s, int requestedPort, String uriQuery, Client client) { - URI uri = HttpURL.create(Scheme.http, DomainName.of(s.host), requestedPort, apiParams, Query.parse(uriQuery)).asURI(); + protected HealthClient getHealthClient(Path apiParams, Service s, int requestedPort, Query query, Client client) { + URI uri = HttpURL.create(Scheme.http, DomainName.of(s.host), requestedPort, apiParams, query).asURI(); WebTarget target = client.target(uri); return WebResourceFactory.newResource(HealthClient.class, target); } @@ -154,7 +154,7 @@ public class StateRequestHandler extends RestApiRequestHandler<StateRequestHandl + "/instance/" + instance; } - private void rewriteResourceLinks(UriBuilder uriBuilder, + private void rewriteResourceLinks(HttpURL url, Object apiResult, ServiceModel model, Service self, @@ -165,7 +165,7 @@ public class StateRequestHandler extends RestApiRequestHandler<StateRequestHandl Object resource = i.next(); if (resource instanceof String) { try { - StringBuilder buffer = linkBuffer(uriBuilder, applicationIdentifier); + StringBuilder buffer = linkBuffer(url, applicationIdentifier); // if it points to a port and host not part of the application, rewriting will not occur, so this is kind of safe retarget(model, self, buffer, (String) resource); i.set(buffer.toString()); @@ -173,7 +173,7 @@ public class StateRequestHandler extends RestApiRequestHandler<StateRequestHandl break; // assume relatively homogenous lists when doing rewrites to avoid freezing up on scanning long lists } } else { - rewriteResourceLinks(uriBuilder, resource, model, self, applicationIdentifier, incomingIdentifier); + rewriteResourceLinks(url, resource, model, self, applicationIdentifier, incomingIdentifier); } } } else if (apiResult instanceof Map) { @@ -182,14 +182,14 @@ public class StateRequestHandler extends RestApiRequestHandler<StateRequestHandl for (Map.Entry<Object, Object> entry : api.entrySet()) { if (SINGLE_API_LINK.equals(entry.getKey()) && entry.getValue() instanceof String) { try { - rewriteSingleLink(entry, model, self, linkBuffer(uriBuilder, applicationIdentifier)); + rewriteSingleLink(entry, model, self, linkBuffer(url, applicationIdentifier)); } catch (GiveUpLinkRetargetingException e) { // NOP } } else if ("link".equals(entry.getKey()) && entry.getValue() instanceof String) { - buildSingleLink(entry, linkBuffer(uriBuilder, applicationIdentifier), incomingIdentifier); + buildSingleLink(entry, linkBuffer(url, applicationIdentifier), incomingIdentifier); } else { - rewriteResourceLinks(uriBuilder, entry.getValue(), model, self, applicationIdentifier, incomingIdentifier); + rewriteResourceLinks(url, entry.getValue(), model, self, applicationIdentifier, incomingIdentifier); } } } @@ -210,8 +210,8 @@ public class StateRequestHandler extends RestApiRequestHandler<StateRequestHandl } } - private StringBuilder linkBuffer(UriBuilder uriBuilder, String applicationIdentifier) { - return baseUri(uriBuilder).append(applicationIdentifier); + private StringBuilder linkBuffer(HttpURL url, String applicationIdentifier) { + return new StringBuilder(baseUri(url).appendPath(Path.parse(applicationIdentifier)).toString()); } private void rewriteSingleLink(Map.Entry<Object, Object> entry, @@ -247,7 +247,7 @@ public class StateRequestHandler extends RestApiRequestHandler<StateRequestHandl newUri.append(link.getRawPath()); } - private static StringBuilder baseUri(UriBuilder uriBuilder) { - return new StringBuilder(uriBuilder.withPath("/serviceview/v1/").toString()); + private static HttpURL baseUri(HttpURL url) { + return url.withPath(Path.parse("/serviceview/v1/")); } } diff --git a/configserver/src/test/java/com/yahoo/vespa/serviceview/StateRequestHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/serviceview/StateRequestHandlerTest.java index 0e5bd085743..79ed38b2025 100644 --- a/configserver/src/test/java/com/yahoo/vespa/serviceview/StateRequestHandlerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/serviceview/StateRequestHandlerTest.java @@ -1,10 +1,11 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.serviceview; +import ai.vespa.http.HttpURL; +import ai.vespa.http.HttpURL.Query; import com.yahoo.cloud.config.ConfigserverConfig; import com.yahoo.jdisc.test.MockMetric; import ai.vespa.http.HttpURL.Path; -import com.yahoo.restapi.UriBuilder; import com.yahoo.vespa.serviceview.bindings.ApplicationView; import com.yahoo.vespa.serviceview.bindings.HealthClient; import com.yahoo.vespa.serviceview.bindings.ModelResponse; @@ -46,7 +47,7 @@ public class StateRequestHandlerTest { } @Override - protected HealthClient getHealthClient(Path apiParams, Service s, int requestedPort, String uriQuery, Client client) { + protected HealthClient getHealthClient(Path apiParams, Service s, int requestedPort, Query query, Client client) { HealthClient healthClient = Mockito.mock(HealthClient.class); HashMap<Object, Object> dummyHealthData = new HashMap<>(); HashMap<String, String> dummyLink = new HashMap<>(); @@ -76,14 +77,14 @@ public class StateRequestHandlerTest { public final void test() { Service s = correspondingModel.resolve("vespa.yahoo.com", 8080, null); String api = "/state/v1"; - HashMap<?, ?> boom = testHandler.singleService(new UriBuilder("http://someserver:8080"), URI.create(EXTERNAL_BASE_URI), "default", "default", "default", "default", "default", s.getIdentifier(8080), Path.parse(api)); + HashMap<?, ?> boom = testHandler.singleService(HttpURL.from(URI.create("http://someserver:8080")), "default", "default", "default", "default", "default", s.getIdentifier(8080), Path.parse(api), Query.empty().add("foo", "bar")); assertEquals(EXTERNAL_BASE_URI + "tenant/default/application/default/environment/default/region/default/instance/default/service/" + s.getIdentifier(8080) + api, ((Map<?, ?>) ((List<?>) boom.get("resources")).get(0)).get("url")); } @Test public final void testLinkEquality() { - ApplicationView explicitParameters = testHandler.getUserInfo(new UriBuilder("http://someserver:8080"), "default", "default", "default", "default", "default"); + ApplicationView explicitParameters = testHandler.getUserInfo(HttpURL.from(URI.create("http://someserver:8080")), "default", "default", "default", "default", "default"); assertEquals(EXTERNAL_BASE_URI + "tenant/default/application/default/environment/default/region/default/instance" + "/default/service/container-clustercontroller-2ul67p8psr451t3w8kdd0qwgg/state/v1/", explicitParameters.clusters.get(0).services.get(0).url); |