Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@
import org.apache.hc.core5.http.protocol.HttpContext;
import org.apache.hc.core5.io.CloseMode;
import org.apache.hc.core5.pool.ConnPoolControl;
import org.apache.hc.core5.pool.ConnPoolListener;
import org.apache.hc.core5.pool.DefaultDisposalCallback;
import org.apache.hc.core5.pool.DisposalCallback;
import org.apache.hc.core5.pool.LaxConnPool;
Expand Down Expand Up @@ -136,6 +137,7 @@ public PoolingHttpClientConnectionManager() {
PoolConcurrencyPolicy.STRICT,
PoolReusePolicy.LIFO,
TimeValue.NEG_ONE_MILLISECOND,
null,
null);
}

Expand Down Expand Up @@ -211,6 +213,7 @@ public PoolingHttpClientConnectionManager(
poolConcurrencyPolicy,
poolReusePolicy,
timeToLive,
null,
connFactory);
}

Expand All @@ -220,8 +223,9 @@ public PoolingHttpClientConnectionManager(
final PoolConcurrencyPolicy poolConcurrencyPolicy,
final PoolReusePolicy poolReusePolicy,
final TimeValue timeToLive,
final ConnPoolListener<HttpRoute> connPoolListener,
final HttpConnectionFactory<ManagedHttpClientConnection> connFactory) {
this(httpClientConnectionOperator,poolConcurrencyPolicy,poolReusePolicy,timeToLive,connFactory,false);
this(httpClientConnectionOperator,poolConcurrencyPolicy,poolReusePolicy,timeToLive,connPoolListener,connFactory,false);

}

Expand All @@ -231,6 +235,7 @@ public PoolingHttpClientConnectionManager(
final PoolConcurrencyPolicy poolConcurrencyPolicy,
final PoolReusePolicy poolReusePolicy,
final TimeValue timeToLive,
final ConnPoolListener<HttpRoute> connPoolListener,
final HttpConnectionFactory<ManagedHttpClientConnection> connFactory,
final boolean offLockDisposalEnabled) {
super();
Expand All @@ -249,7 +254,7 @@ public PoolingHttpClientConnectionManager(
timeToLive,
poolReusePolicy,
callbackForPool,
null) {
connPoolListener) {

@Override
public void closeExpired() {
Expand All @@ -264,7 +269,7 @@ public void closeExpired() {
timeToLive,
poolReusePolicy,
callbackForPool,
null) {
connPoolListener) {

@Override
public void closeExpired() {
Expand All @@ -280,6 +285,7 @@ public void closeExpired() {
timeToLive,
poolReusePolicy,
new DefaultDisposalCallback<>());
// TODO : wire connPoolListener here once `RouteSegmentedConnPool` supports it.
break;
default:
throw new IllegalArgumentException("Unexpected PoolConcurrencyPolicy value: " + poolConcurrencyPolicy);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
import org.apache.hc.core5.http.io.HttpConnectionFactory;
import org.apache.hc.core5.http.io.SocketConfig;
import org.apache.hc.core5.io.CloseMode;
import org.apache.hc.core5.pool.ConnPoolListener;
import org.apache.hc.core5.pool.PoolConcurrencyPolicy;
import org.apache.hc.core5.pool.PoolReusePolicy;
import org.apache.hc.core5.util.TimeValue;
Expand Down Expand Up @@ -94,6 +95,8 @@ public class PoolingHttpClientConnectionManagerBuilder {
private int maxConnTotal;
private int maxConnPerRoute;

private ConnPoolListener<HttpRoute> connPoolListener;

private boolean offLockDisposalEnabled;

public static PoolingHttpClientConnectionManagerBuilder create() {
Expand Down Expand Up @@ -200,6 +203,18 @@ public final PoolingHttpClientConnectionManagerBuilder setMaxConnPerRoute(final
return this;
}

/**
* Sets a {@link ConnPoolListener}.
* This can be used to subscribe to underlying connection pool events (if it supports it).
*
* @return this instance.
* @since 5.7
*/
public final PoolingHttpClientConnectionManagerBuilder setConnPoolListener(final ConnPoolListener<HttpRoute> connPoolListener) {
this.connPoolListener = connPoolListener;
return this;
}

/**
* Sets the same {@link SocketConfig} for all routes.
*
Expand Down Expand Up @@ -357,6 +372,7 @@ public PoolingHttpClientConnectionManager build() {
poolConcurrencyPolicy,
poolReusePolicy,
null,
connPoolListener,
connectionFactory,
offLockDisposalEnabled);
poolingmgr.setSocketConfigResolver(socketConfigResolver);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@
import org.apache.hc.core5.http2.ssl.ApplicationProtocol;
import org.apache.hc.core5.io.CloseMode;
import org.apache.hc.core5.pool.ConnPoolControl;
import org.apache.hc.core5.pool.ConnPoolListener;
import org.apache.hc.core5.pool.DefaultDisposalCallback;
import org.apache.hc.core5.pool.LaxConnPool;
import org.apache.hc.core5.pool.ManagedConnPool;
Expand Down Expand Up @@ -166,7 +167,7 @@ public PoolingAsyncClientConnectionManager(
final SchemePortResolver schemePortResolver,
final DnsResolver dnsResolver) {
this(new DefaultAsyncClientConnectionOperator(tlsStrategyLookup, schemePortResolver, dnsResolver),
poolConcurrencyPolicy, poolReusePolicy, timeToLive, false);
poolConcurrencyPolicy, poolReusePolicy, timeToLive, null, false);
}

@Internal
Expand All @@ -175,6 +176,7 @@ public PoolingAsyncClientConnectionManager(
final PoolConcurrencyPolicy poolConcurrencyPolicy,
final PoolReusePolicy poolReusePolicy,
final TimeValue timeToLive,
final ConnPoolListener<HttpRoute> connPoolListener,
final boolean messageMultiplexing) {
this.connectionOperator = Args.notNull(connectionOperator, "Connection operator");
final ManagedConnPool<HttpRoute, ManagedAsyncClientConnection> managedConnPool;
Expand All @@ -186,7 +188,7 @@ public PoolingAsyncClientConnectionManager(
timeToLive,
poolReusePolicy,
new DefaultDisposalCallback<>(),
null) {
connPoolListener) {

@Override
public void closeExpired() {
Expand All @@ -200,7 +202,7 @@ public void closeExpired() {
DEFAULT_MAX_CONNECTIONS_PER_ROUTE,
timeToLive,
poolReusePolicy,
null) {
connPoolListener) {

@Override
public void closeExpired() {
Expand All @@ -216,6 +218,7 @@ public void closeExpired() {
timeToLive,
poolReusePolicy,
new DefaultDisposalCallback<>());
// TODO : wire connPoolListener here once `RouteSegmentedConnPool` supports it.
break;
default:
throw new IllegalArgumentException("Unexpected PoolConcurrencyPolicy value: " + poolConcurrencyPolicy);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
import org.apache.hc.core5.http.URIScheme;
import org.apache.hc.core5.http.config.RegistryBuilder;
import org.apache.hc.core5.http.nio.ssl.TlsStrategy;
import org.apache.hc.core5.pool.ConnPoolListener;
import org.apache.hc.core5.pool.PoolConcurrencyPolicy;
import org.apache.hc.core5.pool.PoolReusePolicy;
import org.apache.hc.core5.util.ReflectionUtils;
Expand Down Expand Up @@ -86,6 +87,8 @@ public class PoolingAsyncClientConnectionManagerBuilder {
private int maxConnTotal;
private int maxConnPerRoute;

private ConnPoolListener<HttpRoute> connPoolListener;

private Resolver<HttpRoute, ConnectionConfig> connectionConfigResolver;
private Resolver<HttpHost, TlsConfig> tlsConfigResolver;
private boolean messageMultiplexing;
Expand Down Expand Up @@ -170,6 +173,18 @@ public final PoolingAsyncClientConnectionManagerBuilder setMaxConnPerRoute(final
return this;
}

/**
* Sets a {@link ConnPoolListener}.
* This can be used to subscribe to underlying connection pool events (if it supports it).
*
* @return this instance.
* @since 5.7
*/
public final PoolingAsyncClientConnectionManagerBuilder setConnPoolListener(final ConnPoolListener<HttpRoute> connPoolListener) {
this.connPoolListener = connPoolListener;
return this;
}

/**
* Sets the same {@link ConnectionConfig} for all routes.
*
Expand Down Expand Up @@ -311,6 +326,7 @@ public PoolingAsyncClientConnectionManager build() {
poolConcurrencyPolicy,
poolReusePolicy,
null,
connPoolListener,
messageMultiplexing);
poolingmgr.setConnectionConfigResolver(connectionConfigResolver);
poolingmgr.setTlsConfigResolver(tlsConfigResolver);
Expand Down