diff options
author | Bjørn Christian Seime <bjorncs@yahooinc.com> | 2023-07-07 14:18:43 +0200 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@yahooinc.com> | 2023-07-07 14:19:53 +0200 |
commit | 3fbac464d07b4571ce990a81a31c9712cd9a8438 (patch) | |
tree | 96bc4cfb731d32a719953a61b0f042bf41f21c3f /vespa-feed-client | |
parent | dd0854a032a6d196e5d6329a3e444bf060173c4d (diff) |
Ensure client uses multiple connections per endpoint
Diffstat (limited to 'vespa-feed-client')
-rw-r--r-- | vespa-feed-client/src/main/java/ai/vespa/feed/client/impl/JettyCluster.java | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/vespa-feed-client/src/main/java/ai/vespa/feed/client/impl/JettyCluster.java b/vespa-feed-client/src/main/java/ai/vespa/feed/client/impl/JettyCluster.java index 4e1258caa18..4f919167520 100644 --- a/vespa-feed-client/src/main/java/ai/vespa/feed/client/impl/JettyCluster.java +++ b/vespa-feed-client/src/main/java/ai/vespa/feed/client/impl/JettyCluster.java @@ -5,6 +5,7 @@ package ai.vespa.feed.client.impl; import ai.vespa.feed.client.FeedClientBuilder.Compression; import ai.vespa.feed.client.HttpResponse; import org.eclipse.jetty.client.HttpClient; +import org.eclipse.jetty.client.MultiplexConnectionPool; import org.eclipse.jetty.client.api.Request; import org.eclipse.jetty.client.api.Response; import org.eclipse.jetty.client.api.Result; @@ -19,6 +20,7 @@ import org.eclipse.jetty.http2.client.http.HttpClientTransportOverHTTP2; import org.eclipse.jetty.io.ClientConnector; import org.eclipse.jetty.util.Callback; import org.eclipse.jetty.util.HttpCookieStore; +import org.eclipse.jetty.util.Pool; import org.eclipse.jetty.util.Promise; import org.eclipse.jetty.util.SocketAddressResolver; import org.eclipse.jetty.util.component.AbstractLifeCycle; @@ -117,12 +119,17 @@ class JettyCluster implements Cluster { connector.setSslContextFactory(clientSslCtxFactory); HTTP2Client h2Client = new HTTP2Client(connector); h2Client.setMaxConcurrentPushedStreams(b.maxStreamsPerConnection); - HttpClient httpClient = new HttpClient(new HttpClientTransportOverHTTP2(h2Client)); - httpClient.setMaxConnectionsPerDestination(b.connectionsPerEndpoint); + HttpClientTransportOverHTTP2 transport = new HttpClientTransportOverHTTP2(h2Client); + transport.setConnectionPoolFactory(dest -> { + MultiplexConnectionPool pool = new MultiplexConnectionPool( + dest, Pool.StrategyType.RANDOM, b.connectionsPerEndpoint, false, dest, Integer.MAX_VALUE); + pool.preCreateConnections(8); + return pool; + }); + HttpClient httpClient = new HttpClient(transport); httpClient.setFollowRedirects(false); httpClient.setUserAgentField( new HttpField(HttpHeader.USER_AGENT, String.format("vespa-feed-client/%s (Jetty)", Vespa.VERSION))); - httpClient.setMaxRequestsQueuedPerDestination(Integer.MAX_VALUE); httpClient.setConnectTimeout(Duration.ofSeconds(10).toMillis()); // Stop client from trying different IP address when TLS handshake fails httpClient.setSocketAddressResolver(new Ipv4PreferringResolver(httpClient, Duration.ofSeconds(10))); |