summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2022-04-28 10:12:06 +0200
committerjonmv <venstad@gmail.com>2022-04-28 10:12:06 +0200
commit1a4c0d52ab509782dacf128624665789c9b0f59b (patch)
tree6de8bb1c6bfa1e4f8f8792146a03d93881933b37
parentcd04e0c3a06499971c82678e88510b257d4d6faa (diff)
Split out the general part of the configserver-client
-rw-r--r--configserver-client/src/main/java/ai/vespa/hosted/client/HttpConfigServerClient.java66
-rw-r--r--http-client/OWNERS (renamed from configserver-client/OWNERS)0
-rw-r--r--http-client/README.md (renamed from configserver-client/README.md)2
-rw-r--r--http-client/pom.xml (renamed from configserver-client/pom.xml)22
-rw-r--r--http-client/src/main/java/ai/vespa/hosted/client/AbstractConfigServerClient.java (renamed from configserver-client/src/main/java/ai/vespa/hosted/client/AbstractConfigServerClient.java)17
-rw-r--r--http-client/src/main/java/ai/vespa/hosted/client/ConfigServerClient.java (renamed from configserver-client/src/main/java/ai/vespa/hosted/client/ConfigServerClient.java)0
-rw-r--r--http-client/src/main/java/ai/vespa/hosted/client/ForwardingInputStream.java (renamed from configserver-client/src/main/java/ai/vespa/hosted/client/ForwardingInputStream.java)0
-rw-r--r--http-client/src/main/java/ai/vespa/hosted/client/MockConfigServerClient.java (renamed from configserver-client/src/main/java/ai/vespa/hosted/client/MockConfigServerClient.java)0
-rw-r--r--http-client/src/test/java/ai/vespa/hosted/client/HttpConfigServerClientTest.java (renamed from configserver-client/src/test/java/ai/vespa/hosted/client/HttpConfigServerClientTest.java)19
-rw-r--r--http-client/src/test/java/ai/vespa/hosted/client/WireMockExtension.java (renamed from configserver-client/src/test/java/ai/vespa/hosted/client/WireMockExtension.java)0
-rw-r--r--pom.xml2
11 files changed, 35 insertions, 93 deletions
diff --git a/configserver-client/src/main/java/ai/vespa/hosted/client/HttpConfigServerClient.java b/configserver-client/src/main/java/ai/vespa/hosted/client/HttpConfigServerClient.java
deleted file mode 100644
index 6365e2b6b7d..00000000000
--- a/configserver-client/src/main/java/ai/vespa/hosted/client/HttpConfigServerClient.java
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package ai.vespa.hosted.client;
-
-import ai.vespa.util.http.hc5.VespaHttpClientBuilder;
-import com.yahoo.vespa.athenz.api.AthenzIdentity;
-import com.yahoo.vespa.athenz.tls.AthenzIdentityVerifier;
-import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
-import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
-import org.apache.hc.client5.http.protocol.HttpClientContext;
-import org.apache.hc.core5.http.ClassicHttpRequest;
-import org.apache.hc.core5.http.ClassicHttpResponse;
-import org.apache.hc.core5.http.io.SocketConfig;
-import org.apache.hc.core5.util.TimeValue;
-import org.apache.hc.core5.util.Timeout;
-
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.SSLSession;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.Set;
-
-/**
- * @author jonmv
- */
-public class HttpConfigServerClient extends AbstractConfigServerClient {
-
- private final CloseableHttpClient client;
-
- public HttpConfigServerClient(Collection<AthenzIdentity> serverIdentities, String userAgent) {
- if (serverIdentities.isEmpty())
- throw new IllegalArgumentException("At least one trusted server identity must be provided");
-
- this.client = createClient(serverIdentities, userAgent);
- }
-
- @Override
- public void close() throws IOException {
- client.close();
- }
-
- @Override
- protected ClassicHttpResponse execute(ClassicHttpRequest request, HttpClientContext context) throws IOException {
- return client.execute(request, context);
- }
-
- private static CloseableHttpClient createClient(Collection<AthenzIdentity> serverIdentities, String userAgent) {
- return VespaHttpClientBuilder.create(socketFactories -> {
- var manager = new PoolingHttpClientConnectionManager(socketFactories);
- manager.setMaxTotal(1024);
- manager.setDefaultMaxPerRoute(128);
- manager.setDefaultSocketConfig(SocketConfig.custom().setSoTimeout(Timeout.ofSeconds(5)).build());
- manager.setValidateAfterInactivity(TimeValue.ofSeconds(10));
- return manager;
- },
- new AthenzIdentityVerifier(Set.copyOf(serverIdentities)) {
- @Override public boolean verify(String hostname, SSLSession session) {
- return super.verify(hostname, session) || "localhost".equals(hostname);
- }
- },
- false)
- .disableAutomaticRetries()
- .setUserAgent(userAgent)
- .build();
- }
-
-}
diff --git a/configserver-client/OWNERS b/http-client/OWNERS
index d0a102ecbf4..d0a102ecbf4 100644
--- a/configserver-client/OWNERS
+++ b/http-client/OWNERS
diff --git a/configserver-client/README.md b/http-client/README.md
index 7f124bbb3ec..a5912ecf2ef 100644
--- a/configserver-client/README.md
+++ b/http-client/README.md
@@ -1,2 +1,2 @@
<!-- Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -->
-# HTTP client for configserver APIs, built on Apache http client 5
+# HTTP client wrapping on Apache http client 5
diff --git a/configserver-client/pom.xml b/http-client/pom.xml
index 91ac43c72f6..a452353cb8a 100644
--- a/configserver-client/pom.xml
+++ b/http-client/pom.xml
@@ -11,8 +11,8 @@
<version>7-SNAPSHOT</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
- <artifactId>configserver-client</artifactId>
- <description>HTTP client for configserver APIs, built on Apache http client 5</description>
+ <artifactId>http-client</artifactId>
+ <description>HTTP client wrapper around an Apache http client 5</description>
<dependencies>
<dependency>
@@ -24,30 +24,12 @@
<dependency>
<groupId>com.yahoo.vespa</groupId>
- <artifactId>vespa-athenz</artifactId>
- <version>${project.version}</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>com.yahoo.vespa</groupId>
<artifactId>container-apache-http-client-bundle</artifactId>
<version>${project.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.yahoo.vespa</groupId>
- <artifactId>security-utils</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>
- </dependency>
- <dependency>
- <groupId>com.yahoo.vespa</groupId>
<artifactId>vespajlib</artifactId>
<version>${project.version}</version>
<scope>provided</scope>
diff --git a/configserver-client/src/main/java/ai/vespa/hosted/client/AbstractConfigServerClient.java b/http-client/src/main/java/ai/vespa/hosted/client/AbstractConfigServerClient.java
index 3422d96e1d3..ec952c5c1ad 100644
--- a/configserver-client/src/main/java/ai/vespa/hosted/client/AbstractConfigServerClient.java
+++ b/http-client/src/main/java/ai/vespa/hosted/client/AbstractConfigServerClient.java
@@ -1,11 +1,11 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package ai.vespa.hosted.client;
-import ai.vespa.hosted.client.ConfigServerClient.RequestBuilder;
import ai.vespa.http.HttpURL;
import ai.vespa.http.HttpURL.Path;
import ai.vespa.http.HttpURL.Query;
import org.apache.hc.client5.http.config.RequestConfig;
+import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.protocol.HttpClientContext;
import org.apache.hc.core5.http.ClassicHttpRequest;
import org.apache.hc.core5.http.ClassicHttpResponse;
@@ -38,8 +38,21 @@ public abstract class AbstractConfigServerClient implements ConfigServerClient {
private static final Logger log = Logger.getLogger(AbstractConfigServerClient.class.getName());
+ public static ConfigServerClient wrapping(CloseableHttpClient client) {
+ return new AbstractConfigServerClient() {
+ @Override
+ protected ClassicHttpResponse execute(ClassicHttpRequest request, HttpClientContext context) throws IOException {
+ return client.execute(request, context);
+ }
+ @Override
+ public void close() throws IOException {
+ client.close();
+ }
+ };
+ }
+
/** Executes the request with the given context. The caller must close the response. */
- abstract ClassicHttpResponse execute(ClassicHttpRequest request, HttpClientContext context) throws IOException;
+ protected abstract ClassicHttpResponse execute(ClassicHttpRequest request, HttpClientContext context) throws IOException;
/** Executes the given request with response/error handling and retries. */
private <T> T execute(RequestBuilder builder,
diff --git a/configserver-client/src/main/java/ai/vespa/hosted/client/ConfigServerClient.java b/http-client/src/main/java/ai/vespa/hosted/client/ConfigServerClient.java
index 47e062766c6..47e062766c6 100644
--- a/configserver-client/src/main/java/ai/vespa/hosted/client/ConfigServerClient.java
+++ b/http-client/src/main/java/ai/vespa/hosted/client/ConfigServerClient.java
diff --git a/configserver-client/src/main/java/ai/vespa/hosted/client/ForwardingInputStream.java b/http-client/src/main/java/ai/vespa/hosted/client/ForwardingInputStream.java
index 402c2689ca7..402c2689ca7 100644
--- a/configserver-client/src/main/java/ai/vespa/hosted/client/ForwardingInputStream.java
+++ b/http-client/src/main/java/ai/vespa/hosted/client/ForwardingInputStream.java
diff --git a/configserver-client/src/main/java/ai/vespa/hosted/client/MockConfigServerClient.java b/http-client/src/main/java/ai/vespa/hosted/client/MockConfigServerClient.java
index 16aad80670b..16aad80670b 100644
--- a/configserver-client/src/main/java/ai/vespa/hosted/client/MockConfigServerClient.java
+++ b/http-client/src/main/java/ai/vespa/hosted/client/MockConfigServerClient.java
diff --git a/configserver-client/src/test/java/ai/vespa/hosted/client/HttpConfigServerClientTest.java b/http-client/src/test/java/ai/vespa/hosted/client/HttpConfigServerClientTest.java
index e969201605e..1bb352568bc 100644
--- a/configserver-client/src/test/java/ai/vespa/hosted/client/HttpConfigServerClientTest.java
+++ b/http-client/src/test/java/ai/vespa/hosted/client/HttpConfigServerClientTest.java
@@ -1,14 +1,17 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package ai.vespa.hosted.client;
-import ai.vespa.hosted.client.ConfigServerClient.ResponseException;
import ai.vespa.hosted.client.ConfigServerClient.HostStrategy;
+import ai.vespa.hosted.client.ConfigServerClient.ResponseException;
import com.github.tomakehurst.wiremock.http.Fault;
-import com.yahoo.vespa.athenz.api.AthenzService;
+import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.core5.http.Method;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
+import java.io.IOException;
import java.io.UncheckedIOException;
import java.net.URI;
import java.util.List;
@@ -35,7 +38,12 @@ class HttpConfigServerClientTest {
@RegisterExtension
final WireMockExtension server = new WireMockExtension();
- final ConfigServerClient client = new HttpConfigServerClient(List.of(new AthenzService("mydomain", "yourservice")), "user");
+ ConfigServerClient client;
+
+ @BeforeEach
+ void setup() {
+ client = AbstractConfigServerClient.wrapping(HttpClients.createMinimal());
+ }
@Test
void testRetries() {
@@ -95,4 +103,9 @@ class HttpConfigServerClientTest {
server.resetRequests();
}
+ @AfterEach
+ void teardown() throws IOException {
+ client.close();
+ }
+
}
diff --git a/configserver-client/src/test/java/ai/vespa/hosted/client/WireMockExtension.java b/http-client/src/test/java/ai/vespa/hosted/client/WireMockExtension.java
index d95650727c0..d95650727c0 100644
--- a/configserver-client/src/test/java/ai/vespa/hosted/client/WireMockExtension.java
+++ b/http-client/src/test/java/ai/vespa/hosted/client/WireMockExtension.java
diff --git a/pom.xml b/pom.xml
index b47e53de6b7..ad20e0a314e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -49,7 +49,6 @@
<module>config-provisioning</module>
<module>config-proxy</module>
<module>configserver</module>
- <module>configserver-client</module>
<module>configserver-flags</module>
<module>config_test</module>
<module>container</module>
@@ -83,6 +82,7 @@
<module>hosted-api</module>
<module>hosted-tenant-base</module>
<module>hosted-zone-api</module>
+ <module>http-client</module>
<module>http-utils</module>
<module>indexinglanguage</module>
<!--<module>integration/intellij</module>-->