Package com.linkedin.alpini.netty4.pool
Class FastSimpleChannelPool
- java.lang.Object
-
- com.linkedin.alpini.netty4.pool.FastSimpleChannelPool
-
- All Implemented Interfaces:
io.netty.channel.pool.ChannelPool
,java.io.Closeable
,java.lang.AutoCloseable
- Direct Known Subclasses:
FastFixedChannelPool
public class FastSimpleChannelPool extends java.lang.Object implements io.netty.channel.pool.ChannelPool
Forked from Netty's SimpleChannelPool SimpleChannelPool
implementation which will create newChannel
s if someone tries to acquire aChannel
but none is in the pool atm. No limit on the maximal concurrentChannel
s is enforced. This implementation uses FIFO order forChannel
s in theChannelPool
.
-
-
Field Summary
Fields Modifier and Type Field Description protected io.netty.util.concurrent.ImmediateEventExecutor
_immediateEventExecutor
-
Constructor Summary
Constructors Constructor Description FastSimpleChannelPool(io.netty.bootstrap.Bootstrap bootstrap, io.netty.channel.pool.ChannelPoolHandler handler)
Creates a new instance using theChannelHealthChecker.ACTIVE
.FastSimpleChannelPool(io.netty.bootstrap.Bootstrap bootstrap, io.netty.channel.pool.ChannelPoolHandler handler, io.netty.channel.pool.ChannelHealthChecker healthCheck)
Creates a new instance.FastSimpleChannelPool(io.netty.bootstrap.Bootstrap bootstrap, io.netty.channel.pool.ChannelPoolHandler handler, io.netty.channel.pool.ChannelHealthChecker healthCheck, boolean releaseHealthCheck)
Creates a new instance.FastSimpleChannelPool(io.netty.bootstrap.Bootstrap bootstrap, io.netty.channel.pool.ChannelPoolHandler handler, io.netty.channel.pool.ChannelHealthChecker healthCheck, boolean releaseHealthCheck, int connectConcurrency)
Creates a new instance.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description io.netty.util.concurrent.Future<io.netty.channel.Channel>
acquire()
io.netty.util.concurrent.Future<io.netty.channel.Channel>
acquire(io.netty.util.concurrent.Promise<io.netty.channel.Channel> promise)
protected boolean
acquireConnectSemaphore()
protected boolean
addWaiter(io.netty.util.concurrent.Promise<io.netty.channel.Channel> promise)
protected io.netty.bootstrap.Bootstrap
bootstrap()
Returns theBootstrap
this pool will use to open new connections.protected io.netty.util.concurrent.Future<io.netty.channel.Channel>
bootstrapChannel(io.netty.util.concurrent.Promise<io.netty.channel.Channel> promise)
void
close()
protected static io.netty.channel.ChannelFuture
closeChannel(io.netty.channel.Channel channel)
protected io.netty.util.concurrent.Future<io.netty.channel.Channel>
connectChannel(io.netty.bootstrap.Bootstrap bs, io.netty.util.concurrent.Promise<io.netty.channel.Channel> promise)
Bootstrap a newChannel
.protected int
connectInProgress()
protected int
getAvailableChannels()
Counts the number of idle channels available within the pool.protected io.netty.channel.pool.ChannelPoolHandler
handler()
Returns theChannelPoolHandler
that will be notified for the different pool actions.protected io.netty.channel.pool.ChannelHealthChecker
healthChecker()
Returns theChannelHealthChecker
that will be used to check if aChannel
is healthy.protected boolean
offerChannel(io.netty.channel.Channel channel)
Offer aChannel
back to the internal storage.protected void
onConnect(io.netty.channel.Channel channel, io.netty.util.concurrent.Promise<io.netty.channel.Channel> promise)
protected io.netty.channel.Channel
pollChannel()
Poll aChannel
out of the internal storage to reuse it.io.netty.util.concurrent.Future<java.lang.Void>
release(io.netty.channel.Channel channel)
io.netty.util.concurrent.Future<java.lang.Void>
release(io.netty.channel.Channel channel, io.netty.util.concurrent.Promise<java.lang.Void> promise)
protected void
releaseConnectSemaphore()
protected boolean
releaseHealthCheck()
Indicates whether this pool will check the health of channels before offering them back into the pool.
-
-
-
Constructor Detail
-
FastSimpleChannelPool
public FastSimpleChannelPool(io.netty.bootstrap.Bootstrap bootstrap, io.netty.channel.pool.ChannelPoolHandler handler)
Creates a new instance using theChannelHealthChecker.ACTIVE
.- Parameters:
bootstrap
- theBootstrap
that is used for connectionshandler
- theChannelPoolHandler
that will be notified for the different pool actions
-
FastSimpleChannelPool
public FastSimpleChannelPool(io.netty.bootstrap.Bootstrap bootstrap, io.netty.channel.pool.ChannelPoolHandler handler, io.netty.channel.pool.ChannelHealthChecker healthCheck)
Creates a new instance.- Parameters:
bootstrap
- theBootstrap
that is used for connectionshandler
- theChannelPoolHandler
that will be notified for the different pool actionshealthCheck
- theChannelHealthChecker
that will be used to check if aChannel
is still healthy when obtain from theChannelPool
-
FastSimpleChannelPool
public FastSimpleChannelPool(io.netty.bootstrap.Bootstrap bootstrap, io.netty.channel.pool.ChannelPoolHandler handler, io.netty.channel.pool.ChannelHealthChecker healthCheck, boolean releaseHealthCheck)
Creates a new instance.- Parameters:
bootstrap
- theBootstrap
that is used for connectionshandler
- theChannelPoolHandler
that will be notified for the different pool actionshealthCheck
- theChannelHealthChecker
that will be used to check if aChannel
is still healthy when obtain from theChannelPool
releaseHealthCheck
- will check channel health before offering back if this parameter set totrue
; otherwise, channel health is only checked at acquisition time
-
FastSimpleChannelPool
public FastSimpleChannelPool(io.netty.bootstrap.Bootstrap bootstrap, io.netty.channel.pool.ChannelPoolHandler handler, io.netty.channel.pool.ChannelHealthChecker healthCheck, boolean releaseHealthCheck, int connectConcurrency)
Creates a new instance.- Parameters:
bootstrap
- theBootstrap
that is used for connectionshandler
- theChannelPoolHandler
that will be notified for the different pool actionshealthCheck
- theChannelHealthChecker
that will be used to check if aChannel
is still healthy when obtain from theChannelPool
releaseHealthCheck
- will check channel health before offering back if this parameter set totrue
; otherwise, channel health is only checked at acquisition timeconnectConcurrency
- the number of concurrent bootstrap.connect() calls permitted
-
-
Method Detail
-
getAvailableChannels
protected int getAvailableChannels()
Counts the number of idle channels available within the pool.- Returns:
- available channels
-
bootstrap
protected io.netty.bootstrap.Bootstrap bootstrap()
Returns theBootstrap
this pool will use to open new connections.- Returns:
- the
Bootstrap
this pool will use to open new connections
-
handler
protected io.netty.channel.pool.ChannelPoolHandler handler()
Returns theChannelPoolHandler
that will be notified for the different pool actions.- Returns:
- the
ChannelPoolHandler
that will be notified for the different pool actions
-
healthChecker
protected io.netty.channel.pool.ChannelHealthChecker healthChecker()
Returns theChannelHealthChecker
that will be used to check if aChannel
is healthy.- Returns:
- the
ChannelHealthChecker
that will be used to check if aChannel
is healthy
-
releaseHealthCheck
protected boolean releaseHealthCheck()
Indicates whether this pool will check the health of channels before offering them back into the pool.- Returns:
true
if this pool will check the health of channels before offering them back into the pool, orfalse
if channel health is only checked at acquisition time
-
acquire
public final io.netty.util.concurrent.Future<io.netty.channel.Channel> acquire()
- Specified by:
acquire
in interfaceio.netty.channel.pool.ChannelPool
-
acquire
public io.netty.util.concurrent.Future<io.netty.channel.Channel> acquire(io.netty.util.concurrent.Promise<io.netty.channel.Channel> promise)
- Specified by:
acquire
in interfaceio.netty.channel.pool.ChannelPool
-
connectInProgress
protected final int connectInProgress()
-
acquireConnectSemaphore
protected boolean acquireConnectSemaphore()
-
bootstrapChannel
protected io.netty.util.concurrent.Future<io.netty.channel.Channel> bootstrapChannel(io.netty.util.concurrent.Promise<io.netty.channel.Channel> promise) throws java.lang.Exception
- Throws:
java.lang.Exception
-
onConnect
protected void onConnect(io.netty.channel.Channel channel, io.netty.util.concurrent.Promise<io.netty.channel.Channel> promise)
-
releaseConnectSemaphore
protected final void releaseConnectSemaphore()
-
connectChannel
protected io.netty.util.concurrent.Future<io.netty.channel.Channel> connectChannel(io.netty.bootstrap.Bootstrap bs, io.netty.util.concurrent.Promise<io.netty.channel.Channel> promise)
Bootstrap a newChannel
. The default implementation usesBootstrap.connect()
, sub-classes may override this.The
Bootstrap
that is passed in here is cloned viaBootstrap.clone()
, so it is safe to modify.- Returns:
-
release
public final io.netty.util.concurrent.Future<java.lang.Void> release(io.netty.channel.Channel channel)
- Specified by:
release
in interfaceio.netty.channel.pool.ChannelPool
-
release
public io.netty.util.concurrent.Future<java.lang.Void> release(io.netty.channel.Channel channel, io.netty.util.concurrent.Promise<java.lang.Void> promise)
- Specified by:
release
in interfaceio.netty.channel.pool.ChannelPool
-
closeChannel
protected static io.netty.channel.ChannelFuture closeChannel(io.netty.channel.Channel channel)
-
pollChannel
protected io.netty.channel.Channel pollChannel()
Poll aChannel
out of the internal storage to reuse it. This will returnnull
if noChannel
is ready to be reused. Sub-classes may overridepollChannel()
andofferChannel(Channel)
. Be aware that implementations of these methods needs to be thread-safe!
-
addWaiter
protected boolean addWaiter(io.netty.util.concurrent.Promise<io.netty.channel.Channel> promise)
-
offerChannel
protected boolean offerChannel(io.netty.channel.Channel channel)
Offer aChannel
back to the internal storage. This will returntrue
if theChannel
could be added,false
otherwise. Sub-classes may overridepollChannel()
andofferChannel(Channel)
. Be aware that implementations of these methods needs to be thread-safe!
-
close
public void close()
- Specified by:
close
in interfacejava.lang.AutoCloseable
- Specified by:
close
in interfaceio.netty.channel.pool.ChannelPool
- Specified by:
close
in interfacejava.io.Closeable
-
-