Skip to content

Commit c73eaad

Browse files
authored
Merge pull request #1 from liam-verta/ln/remove-netty-3-0.23.0
fix: Migrate Druid HttpClient from Netty 3 to 4 for 0.23.0
2 parents c085dd1 + e2a9e13 commit c73eaad

File tree

168 files changed

+1476
-1443
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

168 files changed

+1476
-1443
lines changed

benchmarks/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
<parent>
2828
<groupId>org.apache.druid</groupId>
2929
<artifactId>druid</artifactId>
30-
<version>0.23.0</version>
30+
<version>0.23.100</version>
3131
</parent>
3232

3333
<dependencies>

cloud/aws-common/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
<parent>
2929
<groupId>org.apache.druid</groupId>
3030
<artifactId>druid</artifactId>
31-
<version>0.23.0</version>
31+
<version>0.23.100</version>
3232
<relativePath>../../pom.xml</relativePath>
3333
</parent>
3434

cloud/gcp-common/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
<parent>
2929
<groupId>org.apache.druid</groupId>
3030
<artifactId>druid</artifactId>
31-
<version>0.23.0</version>
31+
<version>0.23.100</version>
3232
<relativePath>../../pom.xml</relativePath>
3333
</parent>
3434

core/pom.xml

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
<parent>
3030
<artifactId>druid</artifactId>
3131
<groupId>org.apache.druid</groupId>
32-
<version>0.23.0</version>
32+
<version>0.23.100</version>
3333
</parent>
3434

3535
<properties>
@@ -195,10 +195,22 @@
195195
<groupId>io.netty</groupId>
196196
<artifactId>netty-common</artifactId>
197197
</dependency>
198+
<dependency>
199+
<groupId>io.netty</groupId>
200+
<artifactId>netty-codec</artifactId>
201+
</dependency>
198202
<dependency>
199203
<groupId>io.netty</groupId>
200204
<artifactId>netty-codec-http</artifactId>
201205
</dependency>
206+
<dependency>
207+
<groupId>io.netty</groupId>
208+
<artifactId>netty-handler</artifactId>
209+
</dependency>
210+
<dependency>
211+
<groupId>io.netty</groupId>
212+
<artifactId>netty-transport</artifactId>
213+
</dependency>
202214

203215
<dependency>
204216
<groupId>com.opencsv</groupId>
@@ -281,13 +293,6 @@
281293
<artifactId>jvm-attach-api</artifactId>
282294
</dependency>
283295

284-
<!-- Extra dependency for http-client -->
285-
<dependency>
286-
<groupId>io.netty</groupId>
287-
<artifactId>netty</artifactId>
288-
</dependency>
289-
290-
291296
<!-- Tests -->
292297
<dependency>
293298
<groupId>junit</groupId>

core/src/main/java/org/apache/druid/java/util/http/client/HttpClientConfig.java

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,6 @@ public String getEncodingString()
6767

6868
public static final CompressionCodec DEFAULT_COMPRESSION_CODEC = CompressionCodec.GZIP;
6969

70-
// Default from NioClientSocketChannelFactory.DEFAULT_BOSS_COUNT, which is private:
71-
private static final int DEFAULT_BOSS_COUNT = 1;
72-
7370
// Default from SelectorUtil.DEFAULT_IO_THREADS, which is private:
7471
private static final int DEFAULT_WORKER_COUNT = JvmUtils.getRuntimeInfo().getAvailableProcessors() * 2;
7572

@@ -86,7 +83,6 @@ public static Builder builder()
8683
private final HttpClientProxyConfig proxyConfig;
8784
private final Duration readTimeout;
8885
private final Duration sslHandshakeTimeout;
89-
private final int bossPoolSize;
9086
private final int workerPoolSize;
9187
private final CompressionCodec compressionCodec;
9288
private final Duration unusedConnectionTimeoutDuration;
@@ -98,7 +94,6 @@ private HttpClientConfig(
9894
HttpClientProxyConfig proxyConfig,
9995
Duration readTimeout,
10096
Duration sslHandshakeTimeout,
101-
int bossPoolSize,
10297
int workerPoolSize,
10398
CompressionCodec compressionCodec,
10499
Duration unusedConnectionTimeoutDuration
@@ -110,7 +105,6 @@ private HttpClientConfig(
110105
this.proxyConfig = proxyConfig;
111106
this.readTimeout = readTimeout;
112107
this.sslHandshakeTimeout = sslHandshakeTimeout;
113-
this.bossPoolSize = bossPoolSize;
114108
this.workerPoolSize = workerPoolSize;
115109
this.compressionCodec = compressionCodec;
116110
this.unusedConnectionTimeoutDuration = unusedConnectionTimeoutDuration;
@@ -146,11 +140,6 @@ public Duration getSslHandshakeTimeout()
146140
return sslHandshakeTimeout;
147141
}
148142

149-
public int getBossPoolSize()
150-
{
151-
return bossPoolSize;
152-
}
153-
154143
public int getWorkerPoolSize()
155144
{
156145
return workerPoolSize;
@@ -174,7 +163,6 @@ public static class Builder
174163
private HttpClientProxyConfig proxyConfig = null;
175164
private Duration readTimeout = null;
176165
private Duration sslHandshakeTimeout = null;
177-
private int bossCount = DEFAULT_BOSS_COUNT;
178166
private int workerCount = DEFAULT_WORKER_COUNT;
179167
private CompressionCodec compressionCodec = DEFAULT_COMPRESSION_CODEC;
180168
private Duration unusedConnectionTimeoutDuration = DEFAULT_UNUSED_CONNECTION_TIMEOUT_DURATION;
@@ -246,7 +234,6 @@ public HttpClientConfig build()
246234
proxyConfig,
247235
readTimeout,
248236
sslHandshakeTimeout,
249-
bossCount,
250237
workerCount,
251238
compressionCodec,
252239
unusedConnectionTimeoutDuration

core/src/main/java/org/apache/druid/java/util/http/client/HttpClientInit.java

Lines changed: 19 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -21,27 +21,22 @@
2121

2222
import com.google.common.base.Throwables;
2323
import com.google.common.util.concurrent.ThreadFactoryBuilder;
24+
import io.netty.bootstrap.Bootstrap;
25+
import io.netty.channel.ChannelOption;
26+
import io.netty.channel.EventLoopGroup;
27+
import io.netty.channel.nio.NioEventLoopGroup;
28+
import io.netty.channel.socket.nio.NioSocketChannel;
2429
import org.apache.druid.java.util.common.lifecycle.Lifecycle;
25-
import org.apache.druid.java.util.http.client.netty.HttpClientPipelineFactory;
30+
import org.apache.druid.java.util.http.client.netty.HttpClientInitializer;
2631
import org.apache.druid.java.util.http.client.pool.ChannelResourceFactory;
2732
import org.apache.druid.java.util.http.client.pool.ResourcePool;
2833
import org.apache.druid.java.util.http.client.pool.ResourcePoolConfig;
29-
import org.jboss.netty.bootstrap.ClientBootstrap;
30-
import org.jboss.netty.channel.socket.nio.NioClientBossPool;
31-
import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory;
32-
import org.jboss.netty.channel.socket.nio.NioWorkerPool;
33-
import org.jboss.netty.logging.InternalLoggerFactory;
34-
import org.jboss.netty.logging.Slf4JLoggerFactory;
35-
import org.jboss.netty.util.HashedWheelTimer;
36-
import org.jboss.netty.util.ThreadNameDeterminer;
37-
import org.jboss.netty.util.Timer;
3834

3935
import javax.net.ssl.SSLContext;
4036
import javax.net.ssl.TrustManagerFactory;
4137
import java.io.FileInputStream;
4238
import java.security.KeyStore;
4339
import java.util.concurrent.Executors;
44-
import java.util.concurrent.TimeUnit;
4540

4641
/**
4742
*
@@ -51,41 +46,13 @@ public class HttpClientInit
5146
public static HttpClient createClient(HttpClientConfig config, Lifecycle lifecycle)
5247
{
5348
try {
54-
// We need to use the full constructor in order to set a ThreadNameDeterminer. The other parameters are taken
55-
// from the defaults in HashedWheelTimer's other constructors.
56-
final HashedWheelTimer timer = new HashedWheelTimer(
57-
new ThreadFactoryBuilder().setDaemon(true)
58-
.setNameFormat("HttpClient-Timer-%s")
59-
.build(),
60-
ThreadNameDeterminer.CURRENT,
61-
100,
62-
TimeUnit.MILLISECONDS,
63-
512
64-
);
65-
lifecycle.addMaybeStartHandler(
66-
new Lifecycle.Handler()
67-
{
68-
@Override
69-
public void start()
70-
{
71-
timer.start();
72-
}
73-
74-
@Override
75-
public void stop()
76-
{
77-
timer.stop();
78-
}
79-
}
80-
);
8149
return lifecycle.addMaybeStartManagedInstance(
8250
new NettyHttpClient(
8351
new ResourcePool<>(
8452
new ChannelResourceFactory(
85-
createBootstrap(lifecycle, timer, config.getBossPoolSize(), config.getWorkerPoolSize()),
53+
createBootstrap(lifecycle, config.getWorkerPoolSize()),
8654
config.getSslContext(),
8755
config.getProxyConfig(),
88-
timer,
8956
config.getSslHandshakeTimeout() == null ? -1 : config.getSslHandshakeTimeout().getMillis()
9057
),
9158
new ResourcePoolConfig(
@@ -95,8 +62,7 @@ public void stop()
9562
config.isEagerInitialization()
9663
),
9764
config.getReadTimeout(),
98-
config.getCompressionCodec(),
99-
timer
65+
config.getCompressionCodec()
10066
)
10167
);
10268
}
@@ -125,37 +91,25 @@ public static SSLContext sslContextWithTrustedKeyStore(final String keyStorePath
12591
}
12692
}
12793

128-
private static ClientBootstrap createBootstrap(Lifecycle lifecycle, Timer timer, int bossPoolSize, int workerPoolSize)
94+
private static Bootstrap createBootstrap(Lifecycle lifecycle, int workerPoolSize)
12995
{
130-
final NioClientBossPool bossPool = new NioClientBossPool(
131-
Executors.newCachedThreadPool(
132-
new ThreadFactoryBuilder()
133-
.setDaemon(true)
134-
.setNameFormat("HttpClient-Netty-Boss-%s")
135-
.build()
136-
),
137-
bossPoolSize,
138-
timer,
139-
ThreadNameDeterminer.CURRENT
140-
);
14196

142-
final NioWorkerPool workerPool = new NioWorkerPool(
97+
final EventLoopGroup workerGroup = new NioEventLoopGroup(
98+
workerPoolSize,
14399
Executors.newCachedThreadPool(
144100
new ThreadFactoryBuilder()
145101
.setDaemon(true)
146102
.setNameFormat("HttpClient-Netty-Worker-%s")
147103
.build()
148-
),
149-
workerPoolSize,
150-
ThreadNameDeterminer.CURRENT
104+
)
151105
);
152106

153-
final ClientBootstrap bootstrap = new ClientBootstrap(new NioClientSocketChannelFactory(bossPool, workerPool));
154-
155-
bootstrap.setOption("keepAlive", true);
156-
bootstrap.setPipelineFactory(new HttpClientPipelineFactory());
157-
158-
InternalLoggerFactory.setDefaultFactory(new Slf4JLoggerFactory());
107+
final Bootstrap bootstrap = new Bootstrap()
108+
.group(workerGroup)
109+
.channel(NioSocketChannel.class)
110+
.option(ChannelOption.SO_KEEPALIVE, true)
111+
.option(ChannelOption.AUTO_READ, false)
112+
.handler(new HttpClientInitializer());
159113

160114
try {
161115
lifecycle.addMaybeStartHandler(
@@ -169,7 +123,7 @@ public void start()
169123
@Override
170124
public void stop()
171125
{
172-
bootstrap.releaseExternalResources();
126+
workerGroup.shutdownGracefully();
173127
}
174128
}
175129
);

0 commit comments

Comments
 (0)