aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMorten Tokle <mortent@verizonmedia.com>2021-12-14 08:35:52 +0100
committerMorten Tokle <mortent@verizonmedia.com>2021-12-14 08:36:53 +0100
commit59ae4058e6107f276bdb22bcd018f36927d9da4a (patch)
treeff3d1553c97541ddfcd23e9d485aed091bfca5e1
parentf16f20804691546bba8c234c47fb713ab9db1a18 (diff)
Provide feed client builder implementation
-rw-r--r--cloud-tenant-cd/src/main/java/ai/vespa/hosted/cd/cloud/impl/VespaTestRuntime.java6
-rw-r--r--tenant-cd-commons/pom.xml6
-rw-r--r--tenant-cd-commons/src/main/java/ai/vespa/hosted/cd/commons/EndpointAuthenticator.java7
-rw-r--r--tenant-cd-commons/src/main/java/ai/vespa/hosted/cd/commons/FeedClientBuilder.java25
-rw-r--r--tenant-cd-commons/src/main/resources/META-INF.services/ai.vespa.feed.client.FeedClientBuilder2
5 files changed, 43 insertions, 3 deletions
diff --git a/cloud-tenant-cd/src/main/java/ai/vespa/hosted/cd/cloud/impl/VespaTestRuntime.java b/cloud-tenant-cd/src/main/java/ai/vespa/hosted/cd/cloud/impl/VespaTestRuntime.java
index db9072e6198..201ddcb3908 100644
--- a/cloud-tenant-cd/src/main/java/ai/vespa/hosted/cd/cloud/impl/VespaTestRuntime.java
+++ b/cloud-tenant-cd/src/main/java/ai/vespa/hosted/cd/cloud/impl/VespaTestRuntime.java
@@ -10,6 +10,7 @@ import ai.vespa.hosted.api.TestConfig;
import ai.vespa.hosted.cd.Deployment;
import ai.vespa.hosted.cd.TestRuntime;
import ai.vespa.hosted.cd.commons.HttpDeployment;
+import ai.vespa.hosted.cd.commons.FeedClientBuilder;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.Environment;
import com.yahoo.config.provision.zone.ZoneId;
@@ -39,7 +40,10 @@ public class VespaTestRuntime implements TestRuntime {
}
private VespaTestRuntime(TestConfig config) {
this.config = config;
- this.deploymentToTest = new HttpDeployment(config.deployments().get(config.zone()), new DefaultEndpointAuthenticator(config.system()));
+ DefaultEndpointAuthenticator authenticator = new DefaultEndpointAuthenticator(config.system());
+ this.deploymentToTest = new HttpDeployment(config.deployments().get(config.zone()), authenticator);
+ FeedClientBuilder.setEndpointAuthenticator(authenticator);
+ System.setProperty(ai.vespa.feed.client.FeedClientBuilder.PREFERRED_IMPLEMENTATION_PROPERTY, FeedClientBuilder.class.getName());
}
@Override
diff --git a/tenant-cd-commons/pom.xml b/tenant-cd-commons/pom.xml
index 1d76654fbf7..4c81142aa2d 100644
--- a/tenant-cd-commons/pom.xml
+++ b/tenant-cd-commons/pom.xml
@@ -42,6 +42,12 @@
<artifactId>config-provisioning</artifactId>
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>vespa-feed-client</artifactId>
+ <version>${project.version}</version>
+ <scope>compile</scope>
+ </dependency>
</dependencies>
<build>
diff --git a/tenant-cd-commons/src/main/java/ai/vespa/hosted/cd/commons/EndpointAuthenticator.java b/tenant-cd-commons/src/main/java/ai/vespa/hosted/cd/commons/EndpointAuthenticator.java
index 90775ab76af..5317cf01e21 100644
--- a/tenant-cd-commons/src/main/java/ai/vespa/hosted/cd/commons/EndpointAuthenticator.java
+++ b/tenant-cd-commons/src/main/java/ai/vespa/hosted/cd/commons/EndpointAuthenticator.java
@@ -4,6 +4,7 @@ package ai.vespa.hosted.cd.commons;
import javax.net.ssl.SSLContext;
import java.net.http.HttpRequest;
import java.security.NoSuchAlgorithmException;
+import java.util.Map;
/**
* Adds environment dependent authentication to HTTP request against Vespa deployments.
@@ -20,8 +21,7 @@ public interface EndpointAuthenticator {
default SSLContext sslContext() {
try {
return SSLContext.getDefault();
- }
- catch (NoSuchAlgorithmException e) {
+ } catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}
@@ -31,4 +31,7 @@ public interface EndpointAuthenticator {
return request;
}
+ default Map<String, String> authorizationHeaders() {
+ return Map.of();
+ }
}
diff --git a/tenant-cd-commons/src/main/java/ai/vespa/hosted/cd/commons/FeedClientBuilder.java b/tenant-cd-commons/src/main/java/ai/vespa/hosted/cd/commons/FeedClientBuilder.java
new file mode 100644
index 00000000000..892c8b63645
--- /dev/null
+++ b/tenant-cd-commons/src/main/java/ai/vespa/hosted/cd/commons/FeedClientBuilder.java
@@ -0,0 +1,25 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+package ai.vespa.hosted.cd.commons;
+
+import ai.vespa.feed.client.impl.FeedClientBuilderImpl;
+
+import java.util.Objects;
+import java.util.concurrent.atomic.AtomicReference;
+
+/**
+ * @author mortent
+ */
+public class FeedClientBuilder extends FeedClientBuilderImpl {
+
+ static AtomicReference<EndpointAuthenticator> endpointAuthenticator = new AtomicReference<>();
+
+ public static void setEndpointAuthenticator(EndpointAuthenticator authenticator) {
+ endpointAuthenticator.set(authenticator);
+ }
+
+ public FeedClientBuilder() {
+ super.setSslContext(Objects.requireNonNull(endpointAuthenticator.get(), FeedClientBuilder.class.getName() + " is not initialized").sslContext());
+ endpointAuthenticator.get().authorizationHeaders().forEach(super::addRequestHeader);
+ }
+}
diff --git a/tenant-cd-commons/src/main/resources/META-INF.services/ai.vespa.feed.client.FeedClientBuilder b/tenant-cd-commons/src/main/resources/META-INF.services/ai.vespa.feed.client.FeedClientBuilder
new file mode 100644
index 00000000000..69073a3951c
--- /dev/null
+++ b/tenant-cd-commons/src/main/resources/META-INF.services/ai.vespa.feed.client.FeedClientBuilder
@@ -0,0 +1,2 @@
+# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+ai.vespa.hosted.cd.commons.FeedClientBuilder \ No newline at end of file