Skip to content

Commit e54ffca

Browse files
feat: add http customizer to client builder (#2822)
Signed-off-by: David Goss <[email protected]> Co-authored-by: Willy Lulciuc <[email protected]>
1 parent b6057c3 commit e54ffca

File tree

5 files changed

+44
-26
lines changed

5 files changed

+44
-26
lines changed

clients/java/README.md

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -27,36 +27,32 @@ implementation 'io.github.marquezproject:marquez-java:0.47.0
2727
// Connect to http://localhost:5000
2828
MarquezClient client = MarquezClient.builder()
2929
.baseUrl("http://localhost:5000")
30-
.build()
30+
.build();
3131

3232
// List namespaces
3333
List<Namespace> namespaces = client.listNamespaces();
3434
```
35-
### Writing Metadata
36-
To collect OpenLineage events using Marquez, please use the [openlineage-java](https://search.maven.org/artifact/io.openlineage/openlineage-java) library. OpenLineage is an Open Standard for lineage metadata collection designed to collect metadata for a job in execution.
3735

38-
## HTTPS
36+
### Customization
3937

40-
```java
41-
import javax.net.ssl.KeyManager;
42-
import javax.net.ssl.SSLContext;
43-
import javax.net.ssl.TrustManager;
44-
import marquez.client.MarquezClient;
45-
.
46-
.
47-
KeyManager[] keyManager = setUpKeyManagers();
48-
TrustManager[] trustManager = setUpTrustManagers();
38+
The client uses Apache's `httpclient` under the hood. The defaults can be a bit limiting, but you can optionally provide a function that accepts the `HttpClientBuilder` so you can customize it before it's finalised:
4939

40+
```java
5041
SSLContext sslContext = SSLContext.getInstance("TLS");
51-
sslContext.init(keyManager, trustManager, null);
42+
HttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(...);
5243

53-
// Connect to https://localhost:5000
5444
MarquezClient client = MarquezClient.builder()
55-
.sslContext(sslContext)
56-
.baseUrl("https://localhost:5000")
45+
.baseUrl("http://localhost:5000")
46+
.httpCustomizer(httpClientBuilder -> {
47+
httpClientBuilder.setSSLContext(sslContext);
48+
httpClientBuilder.setConnectionManager(connectionManager);
49+
})
5750
.build();
5851
```
5952

53+
### Writing Metadata
54+
To collect OpenLineage events using Marquez, please use the [openlineage-java](https://search.maven.org/artifact/io.openlineage/openlineage-java) library. OpenLineage is an Open Standard for lineage metadata collection designed to collect metadata for a job in execution.
55+
6056
----
6157
SPDX-License-Identifier: Apache-2.0
6258
Copyright 2018-2023 contributors to the Marquez project.

clients/java/src/main/java/marquez/client/MarquezClient.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import java.util.List;
2525
import java.util.Properties;
2626
import java.util.Set;
27+
import java.util.function.Consumer;
2728
import javax.annotation.Nullable;
2829
import javax.net.ssl.SSLContext;
2930
import lombok.AllArgsConstructor;
@@ -54,6 +55,7 @@
5455
import marquez.client.models.Source;
5556
import marquez.client.models.SourceMeta;
5657
import marquez.client.models.Tag;
58+
import org.apache.http.impl.client.HttpClientBuilder;
5759

5860
@Slf4j
5961
public class MarquezClient {
@@ -506,6 +508,7 @@ public static final class Builder {
506508
@VisibleForTesting URL baseUrl;
507509
@VisibleForTesting @Nullable String apiKey;
508510
@VisibleForTesting @Nullable SSLContext sslContext;
511+
@VisibleForTesting @Nullable Consumer<HttpClientBuilder> httpCustomizer;
509512

510513
private Builder() {
511514
this.baseUrl = DEFAULT_BASE_URL;
@@ -530,10 +533,15 @@ public Builder sslContext(@Nullable SSLContext sslContext) {
530533
return this;
531534
}
532535

536+
public Builder customize(@Nullable Consumer<HttpClientBuilder> httpCustomizer) {
537+
this.httpCustomizer = httpCustomizer;
538+
return this;
539+
}
540+
533541
public MarquezClient build() {
534542
return new MarquezClient(
535543
MarquezUrl.create(baseUrl),
536-
MarquezHttp.create(sslContext, MarquezClient.Version.get(), apiKey));
544+
MarquezHttp.create(sslContext, httpCustomizer, MarquezClient.Version.get(), apiKey));
537545
}
538546
}
539547

clients/java/src/main/java/marquez/client/MarquezHttp.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import java.io.IOException;
1818
import java.net.URISyntaxException;
1919
import java.net.URL;
20+
import java.util.function.Consumer;
2021
import javax.annotation.Nullable;
2122
import javax.net.ssl.SSLContext;
2223
import lombok.Getter;
@@ -59,15 +60,17 @@ static MarquezHttp create(
5960

6061
static MarquezHttp create(
6162
@Nullable SSLContext sslContext,
63+
@Nullable Consumer<HttpClientBuilder> httpCustomizer,
6264
@NonNull final MarquezClient.Version version,
6365
@Nullable final String apiKey) {
6466
final UserAgent userAgent = UserAgent.of(version);
65-
final CloseableHttpClient http =
66-
HttpClientBuilder.create()
67-
.setUserAgent(userAgent.getValue())
68-
.setSSLContext(sslContext)
69-
.build();
70-
return new MarquezHttp(http, apiKey);
67+
final HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
68+
httpClientBuilder.setUserAgent(userAgent.getValue());
69+
httpClientBuilder.setSSLContext(sslContext);
70+
if (httpCustomizer != null) {
71+
httpCustomizer.accept(httpClientBuilder);
72+
}
73+
return new MarquezHttp(httpClientBuilder.build(), apiKey);
7174
}
7275

7376
String post(URL url) {

clients/java/src/test/java/marquez/client/MarquezClientTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -547,6 +547,17 @@ public void testClientBuilder_sslContext()
547547
builder.build();
548548
}
549549

550+
@Test
551+
public void testClientBuilder_httpCustomizer() {
552+
MarquezClient.Builder builder = MarquezClient.builder();
553+
assertThat(builder.httpCustomizer == null);
554+
555+
builder.customize(httpClientBuilder -> httpClientBuilder.setMaxConnTotal(30));
556+
assertThat(builder.httpCustomizer != null);
557+
558+
builder.build();
559+
}
560+
550561
@Test
551562
public void testCreateNamespace() throws Exception {
552563
final URL url = buildUrlFor("/namespaces/%s", NAMESPACE_NAME);

clients/java/src/test/java/marquez/client/MarquezHttpTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,9 @@ public void testNewMarquezHttp_throwsOnNull() {
8585
assertThatNullPointerException().isThrownBy(() -> MarquezHttp.create(null));
8686
assertThatNullPointerException().isThrownBy(() -> MarquezHttp.create(null, API_KEY));
8787
assertThatNullPointerException().isThrownBy(() -> MarquezHttp.create(null, null));
88-
assertThatNullPointerException().isThrownBy(() -> MarquezHttp.create(null, null, null));
88+
assertThatNullPointerException().isThrownBy(() -> MarquezHttp.create(null, null, null, null));
8989
assertThatNullPointerException()
90-
.isThrownBy(() -> MarquezHttp.create(SSLContext.getDefault(), null, API_KEY));
90+
.isThrownBy(() -> MarquezHttp.create(SSLContext.getDefault(), null, null, API_KEY));
9191
}
9292

9393
@Test

0 commit comments

Comments
 (0)