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.ChannelPoolForked from Netty's SimpleChannelPool SimpleChannelPoolimplementation which will create newChannels if someone tries to acquire aChannelbut none is in the pool atm. No limit on the maximal concurrentChannels is enforced. This implementation uses FIFO order forChannels 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 booleanacquireConnectSemaphore()protected booleanaddWaiter(io.netty.util.concurrent.Promise<io.netty.channel.Channel> promise)protected io.netty.bootstrap.Bootstrapbootstrap()Returns theBootstrapthis 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)voidclose()protected static io.netty.channel.ChannelFuturecloseChannel(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 intconnectInProgress()protected intgetAvailableChannels()Counts the number of idle channels available within the pool.protected io.netty.channel.pool.ChannelPoolHandlerhandler()Returns theChannelPoolHandlerthat will be notified for the different pool actions.protected io.netty.channel.pool.ChannelHealthCheckerhealthChecker()Returns theChannelHealthCheckerthat will be used to check if aChannelis healthy.protected booleanofferChannel(io.netty.channel.Channel channel)Offer aChannelback to the internal storage.protected voidonConnect(io.netty.channel.Channel channel, io.netty.util.concurrent.Promise<io.netty.channel.Channel> promise)protected io.netty.channel.ChannelpollChannel()Poll aChannelout 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 voidreleaseConnectSemaphore()protected booleanreleaseHealthCheck()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- theBootstrapthat is used for connectionshandler- theChannelPoolHandlerthat 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- theBootstrapthat is used for connectionshandler- theChannelPoolHandlerthat will be notified for the different pool actionshealthCheck- theChannelHealthCheckerthat will be used to check if aChannelis 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- theBootstrapthat is used for connectionshandler- theChannelPoolHandlerthat will be notified for the different pool actionshealthCheck- theChannelHealthCheckerthat will be used to check if aChannelis still healthy when obtain from theChannelPoolreleaseHealthCheck- 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- theBootstrapthat is used for connectionshandler- theChannelPoolHandlerthat will be notified for the different pool actionshealthCheck- theChannelHealthCheckerthat will be used to check if aChannelis still healthy when obtain from theChannelPoolreleaseHealthCheck- 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 theBootstrapthis pool will use to open new connections.- Returns:
- the
Bootstrapthis pool will use to open new connections
-
handler
protected io.netty.channel.pool.ChannelPoolHandler handler()
Returns theChannelPoolHandlerthat will be notified for the different pool actions.- Returns:
- the
ChannelPoolHandlerthat will be notified for the different pool actions
-
healthChecker
protected io.netty.channel.pool.ChannelHealthChecker healthChecker()
Returns theChannelHealthCheckerthat will be used to check if aChannelis healthy.- Returns:
- the
ChannelHealthCheckerthat will be used to check if aChannelis healthy
-
releaseHealthCheck
protected boolean releaseHealthCheck()
Indicates whether this pool will check the health of channels before offering them back into the pool.- Returns:
trueif this pool will check the health of channels before offering them back into the pool, orfalseif channel health is only checked at acquisition time
-
acquire
public final io.netty.util.concurrent.Future<io.netty.channel.Channel> acquire()
- Specified by:
acquirein 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:
acquirein 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
Bootstrapthat 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:
releasein 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:
releasein 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 aChannelout of the internal storage to reuse it. This will returnnullif noChannelis 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 aChannelback to the internal storage. This will returntrueif theChannelcould be added,falseotherwise. Sub-classes may overridepollChannel()andofferChannel(Channel). Be aware that implementations of these methods needs to be thread-safe!
-
close
public void close()
- Specified by:
closein interfacejava.lang.AutoCloseable- Specified by:
closein interfaceio.netty.channel.pool.ChannelPool- Specified by:
closein interfacejava.io.Closeable
-
-