Skip to content

Commit

Permalink
Merge #2483 into 1.1.0-RC1
Browse files Browse the repository at this point in the history
  • Loading branch information
violetagg committed Sep 15, 2022
2 parents 2662ecc + b4648c8 commit 83c594f
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 15 deletions.
Expand Up @@ -61,7 +61,7 @@ public int channelHash() {
*
* @return the {@link ConnectionProvider}
*/
public final ConnectionProvider connectionProvider() {
public ConnectionProvider connectionProvider() {
return connectionProvider;
}

Expand Down
Expand Up @@ -115,6 +115,11 @@ public ChannelOperations.OnSetup channelOperationsProvider() {
return (ch, c, msg) -> new HttpClientOperations(ch, c, cookieEncoder, cookieDecoder);
}

@Override
public ConnectionProvider connectionProvider() {
return httpConnectionProvider().http1ConnectionProvider();
}

/**
* Return the configured {@link ClientCookieDecoder} or the default {@link ClientCookieDecoder#STRICT}.
*
Expand Down Expand Up @@ -321,7 +326,7 @@ public WebsocketClientSpec websocketClientSpec() {
Function<String, String> uriTagValue;
WebsocketClientSpec websocketClientSpec;

HttpClientConfig(ConnectionProvider connectionProvider, Map<ChannelOption<?>, ?> options,
HttpClientConfig(HttpConnectionProvider connectionProvider, Map<ChannelOption<?>, ?> options,
Supplier<? extends SocketAddress> remoteAddress) {
super(connectionProvider, options, remoteAddress);
this.acceptGzip = false;
Expand Down Expand Up @@ -444,6 +449,10 @@ void deferredConf(Function<HttpClientConfig, Mono<HttpClientConfig>> deferrer) {
}
}

HttpConnectionProvider httpConnectionProvider() {
return (HttpConnectionProvider) super.connectionProvider();
}

void protocols(HttpProtocol... protocols) {
this.protocols = protocols;
int _protocols = 0;
Expand Down
Expand Up @@ -57,7 +57,6 @@
import reactor.netty.channel.AbortedException;
import reactor.netty.http.HttpOperations;
import reactor.netty.http.HttpProtocol;
import reactor.netty.resources.ConnectionProvider;
import reactor.netty.tcp.TcpClientConfig;
import reactor.netty.transport.AddressUtils;
import reactor.netty.transport.ProxyProvider;
Expand All @@ -81,7 +80,7 @@ class HttpClientConnect extends HttpClient {

final HttpClientConfig config;

HttpClientConnect(ConnectionProvider provider) {
HttpClientConnect(HttpConnectionProvider provider) {
this.config = new HttpClientConfig(
provider,
Collections.singletonMap(ChannelOption.AUTO_READ, false),
Expand Down Expand Up @@ -265,7 +264,7 @@ public void subscribe(CoreSubscriber<? super Connection> actual) {

AddressResolverGroup<?> resolver = _config.resolverInternal();

_config.connectionProvider()
_config.httpConnectionProvider()
.acquire(_config, observer, handler, resolver)
.subscribe(new ClientTransportSubscriber(sink));

Expand Down
Expand Up @@ -3166,7 +3166,7 @@ private void doTestIssue1943(HttpProtocol protocol) {
HttpClientConfig config = client.configuration();

LoopResources loopResources1 = config.loopResources();
ConnectionProvider provider1 = ((HttpConnectionProvider) config.connectionProvider()).http1ConnectionProvider();
ConnectionProvider provider1 = config.connectionProvider();
AddressResolverGroup<?> resolverGroup1 = config.defaultAddressResolverGroup();

try {
Expand All @@ -3183,7 +3183,7 @@ private void doTestIssue1943(HttpProtocol protocol) {
HttpResources.reset();

LoopResources loopResources2 = config.loopResources();
ConnectionProvider provider2 = ((HttpConnectionProvider) config.connectionProvider()).http1ConnectionProvider();
ConnectionProvider provider2 = config.connectionProvider();
AddressResolverGroup<?> resolverGroup2 = config.defaultAddressResolverGroup();

assertThat(loopResources1).isNotSameAs(loopResources2);
Expand Down
Expand Up @@ -18,6 +18,7 @@
import org.junit.jupiter.api.Test;
import reactor.netty.http.HttpResources;
import reactor.netty.resources.ConnectionProvider;
import reactor.util.annotation.Nullable;

import java.time.Duration;

Expand All @@ -34,8 +35,7 @@ void maxConnectionsCustomConnectionProvider() {
ConnectionProvider provider = ConnectionProvider.create("maxConnectionsCustomConnectionProvider", 1);
try {
HttpClient client = HttpClient.create(provider);
HttpConnectionProvider configuredConnectionProvider =
(HttpConnectionProvider) client.configuration().connectionProvider();
HttpConnectionProvider configuredConnectionProvider = client.configuration().httpConnectionProvider();
assertThat(configuredConnectionProvider.maxConnections())
.isEqualTo(provider.maxConnections());
// Http2ConnectionProvider inherits the configuration from the configured provider
Expand All @@ -51,8 +51,7 @@ void maxConnectionsCustomConnectionProvider() {
@Test
void maxConnectionsDefaultConnectionProvider() {
HttpClient client = HttpClient.create();
HttpConnectionProvider configuredConnectionProvider =
(HttpConnectionProvider) client.configuration().connectionProvider();
HttpConnectionProvider configuredConnectionProvider = client.configuration().httpConnectionProvider();
assertThat(configuredConnectionProvider.maxConnections())
.isEqualTo(((ConnectionProvider) HttpResources.get()).maxConnections());
// Http2ConnectionProvider inherits the configuration from HttpResources
Expand All @@ -66,8 +65,7 @@ void maxConnectionsPerHostCustomConnectionProvider() {
ConnectionProvider provider = ConnectionProvider.create("maxConnectionsPerHostCustomConnectionProvider", 1);
try {
HttpClient client = HttpClient.create(provider);
HttpConnectionProvider configuredConnectionProvider =
(HttpConnectionProvider) client.configuration().connectionProvider();
HttpConnectionProvider configuredConnectionProvider = client.configuration().httpConnectionProvider();
assertThat(configuredConnectionProvider.maxConnectionsPerHost())
.isEqualTo(provider.maxConnectionsPerHost());
// Http2ConnectionProvider inherits the configuration from the configured provider
Expand All @@ -83,13 +81,51 @@ void maxConnectionsPerHostCustomConnectionProvider() {
@Test
void maxConnectionsPerHostDefaultConnectionProvider() {
HttpClient client = HttpClient.create();
HttpConnectionProvider configuredConnectionProvider =
(HttpConnectionProvider) client.configuration().connectionProvider();
HttpConnectionProvider configuredConnectionProvider = client.configuration().httpConnectionProvider();
assertThat(configuredConnectionProvider.maxConnectionsPerHost())
.isEqualTo(((ConnectionProvider) HttpResources.get()).maxConnectionsPerHost());
// Http2ConnectionProvider inherits the configuration from HttpResources
assertThat(configuredConnectionProvider.maxConnectionsPerHost())
.isEqualTo(HttpResources.get().getOrCreateHttp2ConnectionProvider(HTTP2_CONNECTION_PROVIDER_FACTORY)
.maxConnectionsPerHost());
}

@Test
void returnOriginalConnectionProvider() {
testReturnOriginalConnectionProvider(HttpClient.create(), null);
}

@Test
void returnOriginalConnectionProviderNewConnection() {
ConnectionProvider provider = ConnectionProvider.newConnection();
testReturnOriginalConnectionProvider(HttpClient.create(provider), provider);
}

@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();

testReturnOriginalConnectionProvider(HttpClient.create(provider), provider);
}

private void testReturnOriginalConnectionProvider(HttpClient httpClient, @Nullable ConnectionProvider originalProvider) {
ConnectionProvider provider = httpClient.configuration().connectionProvider();
try {
assertThat(provider).isSameAs(originalProvider != null ? originalProvider : HttpResources.get());
}
finally {
if (originalProvider != null) {
provider.disposeLater()
.block(Duration.ofSeconds(5));
}
}
}
}

0 comments on commit 83c594f

Please sign in to comment.