class DefaultConnectionPool extends java.lang.Object implements ConnectionPool
Modifier and Type | Class and Description |
---|---|
private class |
DefaultConnectionPool.PooledConnection |
private class |
DefaultConnectionPool.UsageTrackingInternalConnectionItemFactory |
Modifier and Type | Field and Description |
---|---|
private java.util.concurrent.ExecutorService |
asyncGetter |
private boolean |
closed |
private ConnectionPoolListener |
connectionPoolListener |
private java.util.concurrent.atomic.AtomicInteger |
generation |
private static Logger |
LOGGER |
private java.lang.Runnable |
maintenanceTask |
private ConcurrentPool<UsageTrackingInternalConnection> |
pool |
private ServerId |
serverId |
private ConnectionPoolSettings |
settings |
private java.util.concurrent.ExecutorService |
sizeMaintenanceTimer |
private java.util.concurrent.atomic.AtomicInteger |
waitQueueSize |
Constructor and Description |
---|
DefaultConnectionPool(ServerId serverId,
InternalConnectionFactory internalConnectionFactory,
ConnectionPoolSettings settings) |
Modifier and Type | Method and Description |
---|---|
void |
close() |
private java.lang.Runnable |
createMaintenanceTask() |
private java.util.concurrent.ExecutorService |
createMaintenanceTimer() |
private MongoTimeoutException |
createTimeoutException() |
private MongoWaitQueueFullException |
createWaitQueueFullException() |
void |
doMaintenance()
Synchronously prune idle connections and ensure the minimum pool size.
|
private boolean |
expired(long startTime,
long curTime,
long maxTime) |
private boolean |
fromPreviousGeneration(UsageTrackingInternalConnection connection) |
InternalConnection |
get() |
InternalConnection |
get(long timeout,
java.util.concurrent.TimeUnit timeUnit) |
void |
getAsync(SingleResultCallback<InternalConnection> callback) |
private java.util.concurrent.ExecutorService |
getAsyncGetter() |
private ConnectionId |
getId(InternalConnection internalConnection) |
(package private) ConcurrentPool<UsageTrackingInternalConnection> |
getPool() |
private DefaultConnectionPool.PooledConnection |
getPooledConnection(long timeout,
java.util.concurrent.TimeUnit timeUnit) |
private void |
incrementGenerationOnSocketException(InternalConnection connection,
java.lang.Throwable t)
If there was a socket exception that wasn't some form of interrupted read, increment the generation count so that any connections
created prior will be discarded.
|
void |
invalidate() |
private void |
openAsync(DefaultConnectionPool.PooledConnection pooledConnection,
SingleResultCallback<InternalConnection> callback) |
private boolean |
pastMaxIdleTime(UsageTrackingInternalConnection connection) |
private boolean |
pastMaxLifeTime(UsageTrackingInternalConnection connection) |
private boolean |
shouldEnsureMinSize() |
private boolean |
shouldPrune() |
private boolean |
shouldPrune(UsageTrackingInternalConnection connection) |
private void |
shutdownAsyncGetter() |
private static final Logger LOGGER
private final ConcurrentPool<UsageTrackingInternalConnection> pool
private final ConnectionPoolSettings settings
private final java.util.concurrent.atomic.AtomicInteger waitQueueSize
private final java.util.concurrent.atomic.AtomicInteger generation
private final java.util.concurrent.ExecutorService sizeMaintenanceTimer
private java.util.concurrent.ExecutorService asyncGetter
private final java.lang.Runnable maintenanceTask
private final ConnectionPoolListener connectionPoolListener
private final ServerId serverId
private volatile boolean closed
DefaultConnectionPool(ServerId serverId, InternalConnectionFactory internalConnectionFactory, ConnectionPoolSettings settings)
public InternalConnection get()
get
in interface ConnectionPool
public InternalConnection get(long timeout, java.util.concurrent.TimeUnit timeUnit)
get
in interface ConnectionPool
public void getAsync(SingleResultCallback<InternalConnection> callback)
getAsync
in interface ConnectionPool
private void openAsync(DefaultConnectionPool.PooledConnection pooledConnection, SingleResultCallback<InternalConnection> callback)
private java.util.concurrent.ExecutorService getAsyncGetter()
private void shutdownAsyncGetter()
public void invalidate()
invalidate
in interface ConnectionPool
public void close()
close
in interface ConnectionPool
close
in interface java.io.Closeable
close
in interface java.lang.AutoCloseable
public void doMaintenance()
private DefaultConnectionPool.PooledConnection getPooledConnection(long timeout, java.util.concurrent.TimeUnit timeUnit)
private MongoTimeoutException createTimeoutException()
private MongoWaitQueueFullException createWaitQueueFullException()
ConcurrentPool<UsageTrackingInternalConnection> getPool()
private java.lang.Runnable createMaintenanceTask()
private java.util.concurrent.ExecutorService createMaintenanceTimer()
private boolean shouldEnsureMinSize()
private boolean shouldPrune()
private boolean shouldPrune(UsageTrackingInternalConnection connection)
private boolean pastMaxIdleTime(UsageTrackingInternalConnection connection)
private boolean pastMaxLifeTime(UsageTrackingInternalConnection connection)
private boolean fromPreviousGeneration(UsageTrackingInternalConnection connection)
private boolean expired(long startTime, long curTime, long maxTime)
private void incrementGenerationOnSocketException(InternalConnection connection, java.lang.Throwable t)
connection
- the connection that generated the exceptiont
- the exceptionprivate ConnectionId getId(InternalConnection internalConnection)