@Override
protected ChannelPool newPool(HttpChannelKey key) {
Bootstrap bootstrap = new Bootstrap()
.remoteAddress(key.host, key.port)
.group(key.execution.getEventLoop())
.channel(TransportDetector.getSocketChannelImpl())
.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, (int) key.connectTimeout.toMillis())
.option(ChannelOption.ALLOCATOR, spec.byteBufAllocator)
.option(ChannelOption.AUTO_READ, false)
.option(ChannelOption.SO_KEEPALIVE, isPooling());
if (isPooling()) {
InstrumentedChannelPoolHandler channelPoolHandler = getPoolingHandler(key);
hostStats.put(key.host, channelPoolHandler);
CleanClosingFixedChannelPool channelPool = new CleanClosingFixedChannelPool(bootstrap, channelPoolHandler, getPoolSize(), getPoolQueueSize());
((ExecControllerInternal) key.execution.getController()).onClose(() -> {
remove(key);
channelPool.closeCleanly();
});
return channelPool;
} else {
InstrumentedChannelPoolHandler channelPoolHandler = getSimpleHandler(key);
hostStats.put(key.host, channelPoolHandler);
return new SimpleChannelPool(bootstrap, channelPoolHandler, ALWAYS_UNHEALTHY);
}
}
};