Skip to content

Commit

Permalink
Find HttpConnectionProvider in HttpClientConfig (reactor#2468)
Browse files Browse the repository at this point in the history
  • Loading branch information
yangbongsoo committed Sep 8, 2022
1 parent 8691df2 commit dce53b7
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ class HttpClientConnect extends HttpClient {

HttpClientConnect(ConnectionProvider provider) {
this.config = new HttpClientConfig(
provider,
findHttpConnectionProvider(provider),
Collections.singletonMap(ChannelOption.AUTO_READ, false),
() -> AddressUtils.createUnresolved(NetUtil.LOCALHOST.getHostAddress(), DEFAULT_PORT));
}
Expand Down Expand Up @@ -195,6 +195,26 @@ static HttpClient applyTcpClientConfig(TcpClientConfig config) {
return httpClient;
}

private ConnectionProvider findHttpConnectionProvider(ConnectionProvider provider) {
if (!(provider instanceof HttpConnectionProvider)) {
return provider;
}

HttpConnectionProvider httpConnectionProvider = (HttpConnectionProvider) provider;

if (httpConnectionProvider.http1ConnectionProvider != null &&
httpConnectionProvider.h2ConnectionProvider.get() == null) {
return httpConnectionProvider.http1ConnectionProvider;
}

if (httpConnectionProvider.http1ConnectionProvider == null &&
httpConnectionProvider.h2ConnectionProvider.get() != null) {
return httpConnectionProvider.h2ConnectionProvider.get();
}

return provider;
}

static final class MonoHttpConnect extends Mono<Connection> {

final HttpClientConfig config;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ public Map<SocketAddress, Integer> maxConnectionsPerHost() {
final AtomicReference<ConnectionProvider> h2ConnectionProvider = new AtomicReference<>();

HttpConnectionProvider() {
this(null);
this(ConnectionProvider.create("default", 1));
}

HttpConnectionProvider(@Nullable ConnectionProvider http1ConnectionProvider) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,4 +92,38 @@ void maxConnectionsPerHostDefaultConnectionProvider() {
.isEqualTo(HttpResources.get().getOrCreateHttp2ConnectionProvider(HTTP2_CONNECTION_PROVIDER_FACTORY)
.maxConnectionsPerHost());
}

@Test
void returnOriginalConnectionProvider() {
ConnectionProvider provider = HttpClient.create().configuration().connectionProvider();
try {
assertThat(provider.mutate()).isNotNull();
}
finally {
provider.disposeLater()
.block(Duration.ofSeconds(5));
}
}

@Test
void returnOriginalConnectionProviderUsingBuilder() {
ConnectionProvider provider = ConnectionProvider
.builder("provider")
.maxConnections(1)
.disposeTimeout(Duration.ofSeconds(1L))
.pendingAcquireTimeout(Duration.ofSeconds(1L))
.maxIdleTime(Duration.ofSeconds(1L))
.maxLifeTime(Duration.ofSeconds(10L))
.lifo()
.build();

try {
HttpClient httpClient = HttpClient.create(provider);
assertThat(httpClient.configuration().connectionProvider().mutate()).isNotNull();
}
finally {
provider.disposeLater()
.block(Duration.ofSeconds(5));
}
}
}

0 comments on commit dce53b7

Please sign in to comment.