aboutsummaryrefslogtreecommitdiffstats
path: root/configserver
diff options
context:
space:
mode:
authorJon Marius Venstad <jonmv@gmail.com>2022-04-07 16:29:59 +0200
committerJon Marius Venstad <jonmv@gmail.com>2022-04-07 16:29:59 +0200
commit75114c6c4b96f507071a2caf145b24a22ef0c5ff (patch)
treee4cca74c128bfdad380bc74a9f501d981b9c78ef /configserver
parent190dde5de267462b02c43a18ad605da469715949 (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.java42
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/serviceview/StateRequestHandlerTest.java9
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);