summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorJon Marius Venstad <jonmv@users.noreply.github.com>2022-04-19 16:18:59 +0200
committerGitHub <noreply@github.com>2022-04-19 16:18:59 +0200
commit5cf282748f208c6c30e4943484042679185334b9 (patch)
tree271bcaefd3863bf4c7f29a6e597e9690bbc08ee6 /controller-server
parent926dec1639b088d7a33a88ea3e03e679e7a618d0 (diff)
parentecc1d05760fedf9c49a24a949160aa7930838dcc (diff)
Merge pull request #22119 from vespa-engine/jonmv/no-more-serviceview/v1
Jonmv/no more serviceview/v1
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/pom.xml7
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java8
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java27
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ServiceApiResponse.java197
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java41
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java35
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ServiceApiResponseTest.java95
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/service-api-response-with-urls.json18
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/service-api-response.json18
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/service.json7
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/services.json18
11 files changed, 0 insertions, 471 deletions
diff --git a/controller-server/pom.xml b/controller-server/pom.xml
index 5697d849b0f..5cf53929a98 100644
--- a/controller-server/pom.xml
+++ b/controller-server/pom.xml
@@ -56,13 +56,6 @@
<dependency>
<groupId>com.yahoo.vespa</groupId>
- <artifactId>serviceview</artifactId>
- <version>${project.version}</version>
- <scope>provided</scope>
- </dependency>
-
- <dependency>
- <groupId>com.yahoo.vespa</groupId>
<artifactId>config-provisioning</artifactId>
<version>${project.version}</version>
<scope>provided</scope>
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java
index 52f1a5e0ab0..ca8f6a3ae33 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java
@@ -29,14 +29,12 @@ import com.yahoo.vespa.hosted.controller.persistence.CuratorDb;
import com.yahoo.vespa.hosted.controller.persistence.JobControlFlags;
import com.yahoo.vespa.hosted.controller.security.AccessControl;
import com.yahoo.vespa.hosted.controller.support.access.SupportAccessControl;
-import com.yahoo.vespa.hosted.controller.api.identifiers.ControllerVersion;
import com.yahoo.vespa.hosted.controller.versions.OsVersion;
import com.yahoo.vespa.hosted.controller.versions.OsVersionStatus;
import com.yahoo.vespa.hosted.controller.versions.OsVersionTarget;
import com.yahoo.vespa.hosted.controller.versions.VersionStatus;
import com.yahoo.vespa.hosted.controller.versions.VespaVersion;
import com.yahoo.vespa.hosted.rotation.config.RotationsConfig;
-import com.yahoo.vespa.serviceview.bindings.ApplicationView;
import com.yahoo.yolean.concurrent.Sleeper;
import java.time.Clock;
@@ -50,7 +48,6 @@ import java.util.Set;
import java.util.TreeSet;
import java.util.function.Function;
import java.util.function.Predicate;
-import java.util.function.Supplier;
import java.util.logging.Logger;
import java.util.stream.Collectors;
@@ -173,11 +170,6 @@ public class Controller extends AbstractComponent {
public ControllerConfig controllerConfig() { return controllerConfig; }
- public ApplicationView getApplicationView(String tenantName, String applicationName, String instanceName,
- String environment, String region) {
- return serviceRegistry.configServer().getApplicationView(tenantName, applicationName, instanceName, environment, region);
- }
-
/** Replace the current version status by a new one */
public void updateVersionStatus(VersionStatus newStatus) {
VersionStatus currentStatus = readVersionStatus();
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
index 8b43de58cbe..6d146c6ba66 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
@@ -119,7 +119,6 @@ import com.yahoo.vespa.hosted.controller.tenant.TenantContacts;
import com.yahoo.vespa.hosted.controller.tenant.TenantInfo;
import com.yahoo.vespa.hosted.controller.versions.VersionStatus;
import com.yahoo.vespa.hosted.controller.versions.VespaVersion;
-import com.yahoo.vespa.serviceview.bindings.ApplicationView;
import com.yahoo.yolean.Exceptions;
import javax.ws.rs.ForbiddenException;
@@ -268,8 +267,6 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler {
if (path.matches("/application/v4/tenant/{tenant}/application/{application}/instance/{instance}/environment/{environment}/region/{region}")) return deployment(path.get("tenant"), path.get("application"), path.get("instance"), path.get("environment"), path.get("region"), request);
if (path.matches("/application/v4/tenant/{tenant}/application/{application}/instance/{instance}/environment/{environment}/region/{region}/reindexing")) return getReindexing(path.get("tenant"), path.get("application"), path.get("instance"), path.get("environment"), path.get("region"), request);
if (path.matches("/application/v4/tenant/{tenant}/application/{application}/instance/{instance}/environment/{environment}/region/{region}/suspended")) return suspended(path.get("tenant"), path.get("application"), path.get("instance"), path.get("environment"), path.get("region"), request);
- if (path.matches("/application/v4/tenant/{tenant}/application/{application}/instance/{instance}/environment/{environment}/region/{region}/service")) return services(path.get("tenant"), path.get("application"), path.get("instance"), path.get("environment"), path.get("region"), request);
- if (path.matches("/application/v4/tenant/{tenant}/application/{application}/instance/{instance}/environment/{environment}/region/{region}/service/{service}/state/v1/{*}")) return service(path.get("tenant"), path.get("application"), path.get("instance"), path.get("environment"), path.get("region"), path.get("service"), path.getRest(), request);
if (path.matches("/application/v4/tenant/{tenant}/application/{application}/instance/{instance}/environment/{environment}/region/{region}/service/{service}/{host}/status/{*}")) return status(path.get("tenant"), path.get("application"), path.get("instance"), path.get("environment"), path.get("region"), path.get("service"), path.get("host"), path.getRest(), request);
if (path.matches("/application/v4/tenant/{tenant}/application/{application}/instance/{instance}/environment/{environment}/region/{region}/service/{service}/{host}/state/v1/{*}")) return stateV1(path.get("tenant"), path.get("application"), path.get("instance"), path.get("environment"), path.get("region"), path.get("service"), path.get("host"), path.getRest(), request);
if (path.matches("/application/v4/tenant/{tenant}/application/{application}/instance/{instance}/environment/{environment}/region/{region}/orchestrator")) return orchestrator(path.get("tenant"), path.get("application"), path.get("instance"), path.get("environment"), path.get("region"));
@@ -285,8 +282,6 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler {
if (path.matches("/application/v4/tenant/{tenant}/application/{application}/environment/{environment}/region/{region}/instance/{instance}")) return deployment(path.get("tenant"), path.get("application"), path.get("instance"), path.get("environment"), path.get("region"), request);
if (path.matches("/application/v4/tenant/{tenant}/application/{application}/environment/{environment}/region/{region}/instance/{instance}")) return deployment(path.get("tenant"), path.get("application"), path.get("instance"), path.get("environment"), path.get("region"), request);
if (path.matches("/application/v4/tenant/{tenant}/application/{application}/environment/{environment}/region/{region}/instance/{instance}/suspended")) return suspended(path.get("tenant"), path.get("application"), path.get("instance"), path.get("environment"), path.get("region"), request);
- if (path.matches("/application/v4/tenant/{tenant}/application/{application}/environment/{environment}/region/{region}/instance/{instance}/service")) return services(path.get("tenant"), path.get("application"), path.get("instance"), path.get("environment"), path.get("region"), request);
- if (path.matches("/application/v4/tenant/{tenant}/application/{application}/environment/{environment}/region/{region}/instance/{instance}/service/{service}/state/v1/{*}")) return service(path.get("tenant"), path.get("application"), path.get("instance"), path.get("environment"), path.get("region"), path.get("service"), path.getRest(), request);
if (path.matches("/application/v4/tenant/{tenant}/application/{application}/environment/{environment}/region/{region}/instance/{instance}/service/{service}/{host}/status/{*}")) return status(path.get("tenant"), path.get("application"), path.get("instance"), path.get("environment"), path.get("region"), path.get("service"), path.get("host"), path.getRest(), request);
if (path.matches("/application/v4/tenant/{tenant}/application/{application}/environment/{environment}/region/{region}/instance/{instance}/nodes")) return nodes(path.get("tenant"), path.get("application"), path.get("instance"), path.get("environment"), path.get("region"));
if (path.matches("/application/v4/tenant/{tenant}/application/{application}/environment/{environment}/region/{region}/instance/{instance}/clusters")) return clusters(path.get("tenant"), path.get("application"), path.get("instance"), path.get("environment"), path.get("region"));
@@ -1780,17 +1775,6 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler {
return new SlimeJsonResponse(slime);
}
- private HttpResponse services(String tenantName, String applicationName, String instanceName, String environment, String region, HttpRequest request) {
- ApplicationView applicationView = controller.getApplicationView(tenantName, applicationName, instanceName, environment, region);
- ZoneId zone = requireZone(environment, region);
- ServiceApiResponse response = new ServiceApiResponse(zone,
- new ApplicationId.Builder().tenant(tenantName).applicationName(applicationName).instanceName(instanceName).build(),
- List.of(controller.zoneRegistry().getConfigServerVipUri(zone)),
- request.getUri());
- response.setResponse(applicationView);
- return response;
- }
-
private HttpResponse status(String tenantName, String applicationName, String instanceName, String environment, String region, String serviceName, String host, HttpURL.Path restPath, HttpRequest request) {
DeploymentId deploymentId = new DeploymentId(ApplicationId.from(tenantName, applicationName, instanceName), requireZone(environment, region));
return controller.serviceRegistry().configServer().getServiceNodePage(deploymentId,
@@ -1813,17 +1797,6 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler {
deploymentId, serviceName, DomainName.of(host), HttpURL.Path.parse("/state/v1").append(rest), query);
}
- private HttpResponse service(String tenantName, String applicationName, String instanceName, String environment, String region, String serviceName, HttpURL.Path restPath, HttpRequest request) {
- DeploymentId deploymentId = new DeploymentId(ApplicationId.from(tenantName, applicationName, instanceName), requireZone(environment, region));
- Map<?,?> result = controller.serviceRegistry().configServer().getServiceApiResponse(deploymentId, serviceName, restPath);
- ServiceApiResponse response = new ServiceApiResponse(deploymentId.zoneId(),
- deploymentId.applicationId(),
- List.of(controller.zoneRegistry().getConfigServerVipUri(deploymentId.zoneId())),
- request.getUri());
- response.setResponse(result, serviceName, HttpURL.Path.parse("/state/v1").append(restPath));
- return response;
- }
-
private HttpResponse content(String tenantName, String applicationName, String instanceName, String environment, String region, HttpURL.Path restPath, HttpRequest request) {
DeploymentId deploymentId = new DeploymentId(ApplicationId.from(tenantName, applicationName, instanceName), requireZone(environment, region));
return controller.serviceRegistry().configServer().getApplicationPackageContent(deploymentId, restPath, request.getUri());
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ServiceApiResponse.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ServiceApiResponse.java
deleted file mode 100644
index ee4ed1b31f9..00000000000
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ServiceApiResponse.java
+++ /dev/null
@@ -1,197 +0,0 @@
-// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.hosted.controller.restapi.application;
-
-import ai.vespa.http.HttpURL;
-import ai.vespa.http.HttpURL.Path;
-import ai.vespa.http.HttpURL.Query;
-import com.yahoo.config.provision.ApplicationId;
-import com.yahoo.config.provision.zone.ZoneId;
-import com.yahoo.container.jdisc.HttpResponse;
-import com.yahoo.slime.Cursor;
-import com.yahoo.slime.JsonFormat;
-import com.yahoo.slime.Slime;
-import com.yahoo.vespa.serviceview.bindings.ApplicationView;
-import com.yahoo.vespa.serviceview.bindings.ClusterView;
-import com.yahoo.vespa.serviceview.bindings.ServiceView;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.net.URI;
-import java.util.List;
-import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * A response containing a service view for an application deployment.
- * This does not define the API response but merely proxies the API response provided by Vespa, with URLs
- * rewritten to include zone and application information allow proxying through the controller
- *
- * @author Steinar Knutsen
- * @author bratseth
- */
-class ServiceApiResponse extends HttpResponse {
-
- private final ZoneId zone;
- private final ApplicationId application;
- private final List<URI> configServerURIs;
- private final Slime slime;
- private final HttpURL requestUri;
-
- // Only set for one of the setResponse calls
- private String serviceName = null;
- private Path restPath = null;
-
- public ServiceApiResponse(ZoneId zone, ApplicationId application, List<URI> configServerURIs, URI requestUri) {
- super(200);
- this.zone = zone;
- this.application = application;
- this.configServerURIs = configServerURIs;
- this.slime = new Slime();
- this.requestUri = HttpURL.from(requestUri).withQuery(Query.empty());
- }
-
- public void setResponse(ApplicationView applicationView) {
- Cursor clustersArray = slime.setObject().setArray("clusters");
- for (ClusterView clusterView : applicationView.clusters) {
- Cursor clusterObject = clustersArray.addObject();
- clusterObject.setString("name", clusterView.name);
- clusterObject.setString("type", clusterView.type);
- setNullableString("url", rewriteIfUrl(clusterView.url, requestUri), clusterObject);
- Cursor servicesArray = clusterObject.setArray("services");
- for (ServiceView serviceView : clusterView.services) {
- Cursor serviceObject = servicesArray.addObject();
- setNullableString("url", rewriteIfUrl(serviceView.url, requestUri), serviceObject);
- serviceObject.setString("serviceType", serviceView.serviceType);
- serviceObject.setString("serviceName", serviceView.serviceName);
- serviceObject.setString("configId", serviceView.configId);
- serviceObject.setString("host", serviceView.host);
- }
- }
- }
-
- public void setResponse(Map<?,?> responseData, String serviceName, Path restPath) {
- this.serviceName = serviceName;
- this.restPath = restPath;
- mapToSlime(responseData, slime.setObject());
- }
-
- @Override
- public void render(OutputStream stream) throws IOException {
- new JsonFormat(true).encode(stream, slime);
- }
-
- @Override
- public String getContentType() {
- return "application/json";
- }
-
- @SuppressWarnings("unchecked")
- private void mapToSlime(Map<?,?> data, Cursor object) {
- for (Map.Entry<String, Object> entry : ((Map<String, Object>)data).entrySet())
- fieldToSlime(entry.getKey(), entry.getValue(), object);
- }
-
- private void fieldToSlime(String key, Object value, Cursor object) {
- if (value instanceof String) {
- if (key.equals("url") || key.equals("link"))
- value = rewriteIfUrl((String)value, generateLocalLinkPrefix(serviceName, restPath));
- setNullableString(key, (String)value, object);
- }
- else if (value instanceof Integer) {
- object.setLong(key, (int)value);
- }
- else if (value instanceof Long) {
- object.setLong(key, (long)value);
- }
- else if (value instanceof Float) {
- object.setDouble(key, (double)value);
- }
- else if (value instanceof Double) {
- object.setDouble(key, (double)value);
- }
- else if (value instanceof List) {
- listToSlime((List)value, object.setArray(key));
- }
- else if (value instanceof Map) {
- mapToSlime((Map<?,?>)value, object.setObject(key));
- }
- }
-
- private void listToSlime(List<?> list, Cursor array) {
- for (Object entry : list)
- entryToSlime(entry, array);
- }
-
- private void entryToSlime(Object entry, Cursor array) {
- if (entry instanceof String)
- addNullableString(rewriteIfUrl((String)entry, generateLocalLinkPrefix(serviceName, restPath)), array);
- else if (entry instanceof Integer)
- array.addLong((long)entry);
- else if (entry instanceof Long)
- array.addLong((long)entry);
- else if (entry instanceof Float)
- array.addDouble((double)entry);
- else if (entry instanceof Double)
- array.addDouble((double)entry);
- else if (entry instanceof List)
- listToSlime((List)entry, array.addArray());
- else if (entry instanceof Map)
- mapToSlime((Map)entry, array.addObject());
- }
-
- private String rewriteIfUrl(String urlOrAnyString, HttpURL requestUri) {
- if (urlOrAnyString == null) return null;
-
- String hostPattern = "(" +
- String.join(
- "|", configServerURIs.stream()
- .map(URI::toString)
- .map(s -> s.substring(0, s.length() -1))
- .map(Pattern::quote)
- .toArray(String[]::new))
- + ")";
-
- String remoteServicePath = "/serviceview/"
- + "v1/tenant/" + application.tenant().value()
- + "/application/" + application.application().value()
- + "/environment/" + zone.environment().value()
- + "/region/" + zone.region().value()
- + "/instance/" + application.instance()
- + "/service/";
-
- Pattern remoteServiceResourcePattern = Pattern.compile("^(" + hostPattern + Pattern.quote(remoteServicePath) + ")");
- Matcher matcher = remoteServiceResourcePattern.matcher(urlOrAnyString);
-
- if (matcher.find()) {
- String proxiedPath = urlOrAnyString.substring(matcher.group().length());
- return requestUri.withPath(requestUri.path().append(Path.parse(proxiedPath))).asURI().toString();
- } else {
- return urlOrAnyString; // not a service url
- }
- }
-
- private HttpURL generateLocalLinkPrefix(String identifier, Path restPath) {
- Path proxiedPath = Path.parse(identifier).append(restPath);
- if (requestUri.path().tail(proxiedPath.length()).equals(proxiedPath)) {
- return requestUri.withPath(requestUri.path().cut(proxiedPath.length()));
- } else {
- throw new IllegalStateException("Expected the resource " + requestUri.path() + " to end with " + proxiedPath);
- }
- }
-
- private void setNullableString(String key, String valueOrNull, Cursor receivingObject) {
- if (valueOrNull == null)
- receivingObject.setNix(key);
- else
- receivingObject.setString(key, valueOrNull);
- }
-
- private void addNullableString(String valueOrNull, Cursor receivingArray) {
- if (valueOrNull == null)
- receivingArray.addNix();
- else
- receivingArray.addString(valueOrNull);
- }
-
-}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java
index a9937fad01e..644d60fbe72 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java
@@ -45,9 +45,6 @@ import com.yahoo.vespa.hosted.controller.api.integration.noderepository.RestartF
import com.yahoo.vespa.hosted.controller.api.integration.secrets.TenantSecretStore;
import com.yahoo.vespa.hosted.controller.application.SystemApplication;
import com.yahoo.vespa.hosted.controller.application.pkg.ApplicationPackage;
-import com.yahoo.vespa.serviceview.bindings.ApplicationView;
-import com.yahoo.vespa.serviceview.bindings.ClusterView;
-import com.yahoo.vespa.serviceview.bindings.ServiceView;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
@@ -487,32 +484,6 @@ public class ConfigServerMock extends AbstractComponent implements ConfigServer
removeLoadBalancers(deployment.applicationId(), deployment.zoneId());
}
- // Returns a canned example response
- @Override
- public ApplicationView getApplicationView(String tenantName, String applicationName, String instanceName,
- String environment, String region) {
- String cfgHostname = Text.format("https://cfg.%s.%s.test.vip:4443", environment, region);
- String cfgServiceUrlPrefix = Text.format("%s/serviceview/v1/tenant/%s/application/%s/environment/%s/region/%s/instance/%s/service",
- cfgHostname, tenantName, applicationName,
- environment, region, instanceName);
- ApplicationView applicationView = new ApplicationView();
- ClusterView cluster = new ClusterView();
- cluster.name = "cluster1";
- cluster.type = "content";
- cluster.url = cfgServiceUrlPrefix + "/container-clustercontroller-6s8slgtps7ry8uh6lx21ejjiv/cluster/v2/cluster1";
- ServiceView service = new ServiceView();
- service.configId = "cluster1/storage/0";
- service.host = "host1";
- service.serviceName = "storagenode";
- service.serviceType = "storagenode";
- service.url = cfgServiceUrlPrefix + "/storagenode-awe3slno6mmq2fye191y324jl/state/v1/";
- cluster.services = new ArrayList<>();
- cluster.services.add(service);
- applicationView.clusters = new ArrayList<>();
- applicationView.clusters.add(cluster);
- return applicationView;
- }
-
@Override
public List<ClusterMetrics> getDeploymentMetrics(DeploymentId deployment) {
return Collections.unmodifiableList(clusterMetrics.getOrDefault(deployment, List.of()));
@@ -523,18 +494,6 @@ public class ConfigServerMock extends AbstractComponent implements ConfigServer
return this.protonMetrics;
}
- // Returns a canned example response
- @Override
- public Map<?,?> getServiceApiResponse(DeploymentId deployment, String serviceName, Path restPath) {
- Map<String,List<?>> root = new HashMap<>();
- List<Map<?,?>> resources = new ArrayList<>();
- Map<String,String> resource = new HashMap<>();
- resource.put("url", "http://localhost:8080/application/v4/tenant/tenant1/application/application1/environment/prod/region/us-west-1/instance/default/service/filedistributorservice-dud1f4w037qdxdrn0ovxfdtgw/state/v1/config");
- resources.add(resource);
- root.put("resources", resources);
- return root;
- }
-
@Override
public ProxyResponse getServiceNodePage(DeploymentId deployment, String serviceName, DomainName node, Path subPath, Query query) {
return new ProxyResponse((subPath + " and " + query).getBytes(UTF_8), "text/html", 200);
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java
index cc5af52282d..992ef59d9a5 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java
@@ -694,15 +694,6 @@ public class ApplicationApiTest extends ControllerContainerTest {
.userIdentity(USER_ID),
new File("suspended.json"));
- // GET services
- tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/prod/region/us-central-1/instance/instance1/service", GET)
- .userIdentity(USER_ID),
- new File("services.json"));
-
- // GET service
- tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/prod/region/us-central-1/instance/instance1/service/storagenode-awe3slno6mmq2fye191y324jl/state/v1/", GET)
- .userIdentity(USER_ID),
- new File("service.json"));
// GET service/state/v1
tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/environment/prod/region/us-central-1/service/storagenode/host.com/state/v1/?foo=bar", GET)
@@ -1645,32 +1636,6 @@ public class ApplicationApiTest extends ControllerContainerTest {
}
@Test
- public void testServiceView() {
- createAthenzDomainWithAdmin(ATHENZ_TENANT_DOMAIN, USER_ID);
- String serviceApi="/application/v4/tenant/tenant1/application/application1/environment/prod/region/us-central-1/instance/instance1/service";
- // Not allowed to request apis not listed in feature flag allowed-service-view-apis. e.g /document/v1
- tester.assertResponse(request(serviceApi + "/storagenode-awe3slno6mmq2fye191y324jl/document/v1/", GET)
- .userIdentity(USER_ID)
- .oAuthCredentials(OKTA_CREDENTIALS),
- "{\"error-code\":\"NOT_FOUND\",\"message\":\"Nothing at path '/application/v4/tenant/tenant1/application/application1/environment/prod/region/us-central-1/instance/instance1/service/storagenode-awe3slno6mmq2fye191y324jl/document/v1/'\"}",
- 404);
-
- // Test path traversal
- tester.assertResponse(request(serviceApi + "/storagenode-awe3slno6mmq2fye191y324jl/state/v1/../../document/v1/", GET)
- .userIdentity(USER_ID)
- .oAuthCredentials(OKTA_CREDENTIALS),
- "{\"error-code\":\"NOT_FOUND\",\"message\":\"Nothing at path '/application/v4/tenant/tenant1/application/application1/environment/prod/region/us-central-1/instance/instance1/service/storagenode-awe3slno6mmq2fye191y324jl/document/v1/'\"}",
- 404);
-
- // Test urlencoded path traversal
- tester.assertResponse(request(serviceApi + "/storagenode-awe3slno6mmq2fye191y324jl/state%2Fv1%2F..%2F..%2Fdocument%2Fv1%2F", GET)
- .userIdentity(USER_ID)
- .oAuthCredentials(OKTA_CREDENTIALS),
- accessDenied,
- 403);
- }
-
- @Test
public void create_application_on_deploy() {
// Setup
createAthenzDomainWithAdmin(ATHENZ_TENANT_DOMAIN, USER_ID);
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ServiceApiResponseTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ServiceApiResponseTest.java
deleted file mode 100644
index c69cd51e20d..00000000000
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ServiceApiResponseTest.java
+++ /dev/null
@@ -1,95 +0,0 @@
-// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.hosted.controller.restapi.application;
-
-import com.yahoo.config.provision.ApplicationId;
-import com.yahoo.config.provision.Environment;
-import com.yahoo.config.provision.RegionName;
-import com.yahoo.config.provision.zone.ZoneId;
-import com.yahoo.io.IOUtils;
-import com.yahoo.slime.Slime;
-import com.yahoo.slime.SlimeUtils;
-import com.yahoo.vespa.serviceview.bindings.ApplicationView;
-import com.yahoo.vespa.serviceview.bindings.ClusterView;
-import com.yahoo.vespa.serviceview.bindings.ServiceView;
-import org.junit.Test;
-
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.IOException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.nio.charset.StandardCharsets;
-import java.util.Collections;
-
-import static org.junit.Assert.assertEquals;
-
-/**
- * @author bratseth
- */
-public class ServiceApiResponseTest {
-
- private final static String responseFiles = "src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/";
-
- @Test
- public void testServiceViewResponse() throws URISyntaxException, IOException {
- ServiceApiResponse response = new ServiceApiResponse(ZoneId.from(Environment.prod, RegionName.from("us-west-1")),
- ApplicationId.from("tenant1", "application1", "default"),
- Collections.singletonList(new URI("config-server1")),
- new URI("http://server1:4080/request/path?foo=bar"));
- ApplicationView applicationView = new ApplicationView();
- ClusterView clusterView = new ClusterView();
- clusterView.type = "container";
- clusterView.name = "cluster1";
- clusterView.url = "cluster-url";
- ServiceView serviceView = new ServiceView();
- serviceView.url = null;
- serviceView.serviceType = "container";
- serviceView.serviceName = "service1";
- serviceView.configId = "configId1";
- serviceView.host = "host1";
- serviceView.legacyStatusPages = "legacyPages";
- clusterView.services = Collections.singletonList(serviceView);
- applicationView.clusters = Collections.singletonList(clusterView);
- response.setResponse(applicationView);
- ByteArrayOutputStream stream = new ByteArrayOutputStream();
- response.render(stream);
- Slime responseSlime = SlimeUtils.jsonToSlime(stream.toByteArray());
- Slime expectedSlime = SlimeUtils.jsonToSlime(IOUtils.readFile(new File(responseFiles + "service-api-response.json")).getBytes(StandardCharsets.UTF_8));
-
- assertEquals("service-api-response.json",
- new String(SlimeUtils.toJsonBytes(expectedSlime), StandardCharsets.UTF_8),
- new String(SlimeUtils.toJsonBytes(responseSlime), StandardCharsets.UTF_8));
- }
-
- @Test
- public void testServiceViewResponseWithURLs() throws URISyntaxException, IOException {
- ServiceApiResponse response = new ServiceApiResponse(ZoneId.from(Environment.prod, RegionName.from("us-west-1")),
- ApplicationId.from("tenant2", "application2", "default"),
- Collections.singletonList(new URI("http://cfg1.test/")),
- new URI("http://cfg1.test/serviceview/v1/tenant/tenant2/application/application2/environment/prod/region/us-west-1/instance/default/service/searchnode-9dujk1pa0vufxrj6n4yvmi8uc/state/v1"));
- ApplicationView applicationView = new ApplicationView();
- ClusterView clusterView = new ClusterView();
- clusterView.type = "container";
- clusterView.name = "cluster1";
- clusterView.url = "http://cfg1.test/serviceview/v1/tenant/tenant2/application/application2/environment/prod/region/us-west-1/instance/default/service/searchnode-9dujk1pa0vufxrj6n4yvmi8uc/state/v1/health";
- ServiceView serviceView = new ServiceView();
- serviceView.url = null;
- serviceView.serviceType = "container";
- serviceView.serviceName = "service1";
- serviceView.configId = "configId1";
- serviceView.host = "host1";
- serviceView.legacyStatusPages = "legacyPages";
- clusterView.services = Collections.singletonList(serviceView);
- applicationView.clusters = Collections.singletonList(clusterView);
- response.setResponse(applicationView);
- ByteArrayOutputStream stream = new ByteArrayOutputStream();
- response.render(stream);
- Slime responseSlime = SlimeUtils.jsonToSlime(stream.toByteArray());
- Slime expectedSlime = SlimeUtils.jsonToSlime(IOUtils.readFile(new File(responseFiles + "service-api-response-with-urls.json")).getBytes(StandardCharsets.UTF_8));
-
- assertEquals("service-api-response.json",
- new String(SlimeUtils.toJsonBytes(expectedSlime), StandardCharsets.UTF_8),
- new String(SlimeUtils.toJsonBytes(responseSlime), StandardCharsets.UTF_8));
- }
-
-}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/service-api-response-with-urls.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/service-api-response-with-urls.json
deleted file mode 100644
index 0e610c4d4b2..00000000000
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/service-api-response-with-urls.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "clusters": [
- {
- "name": "cluster1",
- "type": "container",
- "url": "http://cfg1.test/serviceview/v1/tenant/tenant2/application/application2/environment/prod/region/us-west-1/instance/default/service/searchnode-9dujk1pa0vufxrj6n4yvmi8uc/state/v1/searchnode-9dujk1pa0vufxrj6n4yvmi8uc/state/v1/health",
- "services": [
- {
- "url": null,
- "serviceType": "container",
- "serviceName": "service1",
- "configId": "configId1",
- "host": "host1"
- }
- ]
- }
- ]
-}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/service-api-response.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/service-api-response.json
deleted file mode 100644
index 3380eb26911..00000000000
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/service-api-response.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "clusters": [
- {
- "name": "cluster1",
- "type": "container",
- "url": "cluster-url",
- "services": [
- {
- "url": null,
- "serviceType": "container",
- "serviceName": "service1",
- "configId": "configId1",
- "host": "host1"
- }
- ]
- }
- ]
-} \ No newline at end of file
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/service.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/service.json
deleted file mode 100644
index 81892fd547e..00000000000
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/service.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "resources": [
- {
- "url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/environment/prod/region/us-west-1/instance/default/service/filedistributorservice-dud1f4w037qdxdrn0ovxfdtgw/state/v1/config"
- }
- ]
-}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/services.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/services.json
deleted file mode 100644
index 1a434afafbb..00000000000
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/services.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "clusters": [
- {
- "name": "cluster1",
- "type": "content",
- "url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/environment/prod/region/us-central-1/instance/instance1/service/container-clustercontroller-6s8slgtps7ry8uh6lx21ejjiv/cluster/v2/cluster1",
- "services": [
- {
- "url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/environment/prod/region/us-central-1/instance/instance1/service/storagenode-awe3slno6mmq2fye191y324jl/state/v1/",
- "serviceType": "storagenode",
- "serviceName": "storagenode",
- "configId": "cluster1/storage/0",
- "host": "host1"
- }
- ]
- }
- ]
-}