Class Pool
- java.lang.Object
-
- org.mariadb.jdbc.internal.util.pool.Pool
-
-
Field Summary
Fields Modifier and Type Field Description private java.util.concurrent.ThreadPoolExecutor
connectionAppender
private java.util.concurrent.BlockingQueue<java.lang.Runnable>
connectionAppenderQueue
private long
connectionTime
private GlobalStateInfo
globalInfo
private java.util.concurrent.LinkedBlockingDeque<MariaDbPooledConnection>
idleConnections
private static Logger
logger
private int
maxIdleTime
private Options
options
private java.util.concurrent.atomic.AtomicInteger
pendingRequestNumber
private static int
POOL_STATE_CLOSING
private static int
POOL_STATE_OK
private java.util.concurrent.ScheduledThreadPoolExecutor
poolExecutor
private java.util.concurrent.atomic.AtomicInteger
poolState
private java.lang.String
poolTag
private java.util.concurrent.ScheduledFuture
scheduledFuture
private long
timeToConnectNanos
private java.util.concurrent.atomic.AtomicInteger
totalConnection
private UrlParser
urlParser
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private void
addConnection()
Create new connection.private void
addConnectionRequest()
Add new connection if needed.void
close()
Close pool and underlying connections.private void
closeAll(java.util.concurrent.ExecutorService connectionRemover, java.util.Collection<MariaDbPooledConnection> collection)
private MariaDbPooledConnection
createPoolConnection(MariaDbConnection connection)
boolean
equals(java.lang.Object obj)
private java.lang.String
generatePoolTag(int poolIndex)
long
getActiveConnections()
MariaDbConnection
getConnection()
Retrieve new connection.MariaDbConnection
getConnection(java.lang.String username, java.lang.String password)
Get new connection from pool if user and password correspond to pool.long
getConnectionRequests()
GlobalStateInfo
getGlobalInfo()
private MariaDbPooledConnection
getIdleConnection()
private MariaDbPooledConnection
getIdleConnection(long timeout, java.util.concurrent.TimeUnit timeUnit)
Get an existing idle connection in pool.long
getIdleConnections()
java.lang.String
getPoolTag()
long
getTotalConnections()
UrlParser
getUrlParser()
int
hashCode()
private void
initializePoolGlobalState(MariaDbConnection connection)
private void
registerJmx()
private void
removeIdleTimeoutConnection()
Removing idle connection.void
resetStaticGlobal()
JMX method to remove state (will be reinitialized on next connection creation).private void
silentAbortConnection(MariaDbPooledConnection item)
private void
silentCloseConnection(MariaDbPooledConnection item)
java.util.List<java.lang.Long>
testGetConnectionIdleThreadIds()
For testing purpose only.private void
unRegisterJmx()
-
-
-
Field Detail
-
logger
private static final Logger logger
-
POOL_STATE_OK
private static final int POOL_STATE_OK
- See Also:
- Constant Field Values
-
POOL_STATE_CLOSING
private static final int POOL_STATE_CLOSING
- See Also:
- Constant Field Values
-
poolState
private final java.util.concurrent.atomic.AtomicInteger poolState
-
urlParser
private final UrlParser urlParser
-
options
private final Options options
-
pendingRequestNumber
private final java.util.concurrent.atomic.AtomicInteger pendingRequestNumber
-
totalConnection
private final java.util.concurrent.atomic.AtomicInteger totalConnection
-
idleConnections
private final java.util.concurrent.LinkedBlockingDeque<MariaDbPooledConnection> idleConnections
-
connectionAppender
private final java.util.concurrent.ThreadPoolExecutor connectionAppender
-
connectionAppenderQueue
private final java.util.concurrent.BlockingQueue<java.lang.Runnable> connectionAppenderQueue
-
poolTag
private final java.lang.String poolTag
-
poolExecutor
private final java.util.concurrent.ScheduledThreadPoolExecutor poolExecutor
-
scheduledFuture
private final java.util.concurrent.ScheduledFuture scheduledFuture
-
globalInfo
private GlobalStateInfo globalInfo
-
maxIdleTime
private int maxIdleTime
-
timeToConnectNanos
private long timeToConnectNanos
-
connectionTime
private long connectionTime
-
-
Constructor Detail
-
Pool
public Pool(UrlParser urlParser, int poolIndex, java.util.concurrent.ScheduledThreadPoolExecutor poolExecutor)
Create pool from configuration.- Parameters:
urlParser
- configuration parserpoolIndex
- pool index to permit distinction of thread namepoolExecutor
- pools common executor
-
-
Method Detail
-
addConnectionRequest
private void addConnectionRequest()
Add new connection if needed. Only one thread create new connection, so new connection request will wait to newly created connection or for a released connection.
-
removeIdleTimeoutConnection
private void removeIdleTimeoutConnection()
Removing idle connection. Close them and recreate connection to reach minimal number of connection.
-
addConnection
private void addConnection() throws java.sql.SQLException
Create new connection.- Throws:
java.sql.SQLException
- if connection creation failed
-
getIdleConnection
private MariaDbPooledConnection getIdleConnection() throws java.lang.InterruptedException
- Throws:
java.lang.InterruptedException
-
getIdleConnection
private MariaDbPooledConnection getIdleConnection(long timeout, java.util.concurrent.TimeUnit timeUnit) throws java.lang.InterruptedException
Get an existing idle connection in pool.- Returns:
- an IDLE connection.
- Throws:
java.lang.InterruptedException
-
silentCloseConnection
private void silentCloseConnection(MariaDbPooledConnection item)
-
silentAbortConnection
private void silentAbortConnection(MariaDbPooledConnection item)
-
createPoolConnection
private MariaDbPooledConnection createPoolConnection(MariaDbConnection connection)
-
getConnection
public MariaDbConnection getConnection() throws java.sql.SQLException
Retrieve new connection. If possible return idle connection, if not, stack connection query, ask for a connection creation, and loop until a connection become idle / a new connection is created.- Returns:
- a connection object
- Throws:
java.sql.SQLException
- if no connection is created when reaching timeout (connectTimeout option)
-
getConnection
public MariaDbConnection getConnection(java.lang.String username, java.lang.String password) throws java.sql.SQLException
Get new connection from pool if user and password correspond to pool. If username and password are different from pool, will return a dedicated connection.- Parameters:
username
- usernamepassword
- password- Returns:
- connection
- Throws:
java.sql.SQLException
- if any error occur during connection
-
generatePoolTag
private java.lang.String generatePoolTag(int poolIndex)
-
getUrlParser
public UrlParser getUrlParser()
-
close
public void close() throws java.lang.InterruptedException
Close pool and underlying connections.- Specified by:
close
in interfacejava.lang.AutoCloseable
- Throws:
java.lang.InterruptedException
- if interrupted
-
closeAll
private void closeAll(java.util.concurrent.ExecutorService connectionRemover, java.util.Collection<MariaDbPooledConnection> collection)
-
initializePoolGlobalState
private void initializePoolGlobalState(MariaDbConnection connection) throws java.sql.SQLException
- Throws:
java.sql.SQLException
-
getPoolTag
public java.lang.String getPoolTag()
-
equals
public boolean equals(java.lang.Object obj)
- Overrides:
equals
in classjava.lang.Object
-
hashCode
public int hashCode()
- Overrides:
hashCode
in classjava.lang.Object
-
getGlobalInfo
public GlobalStateInfo getGlobalInfo()
-
getActiveConnections
public long getActiveConnections()
- Specified by:
getActiveConnections
in interfacePoolMBean
-
getTotalConnections
public long getTotalConnections()
- Specified by:
getTotalConnections
in interfacePoolMBean
-
getIdleConnections
public long getIdleConnections()
- Specified by:
getIdleConnections
in interfacePoolMBean
-
getConnectionRequests
public long getConnectionRequests()
- Specified by:
getConnectionRequests
in interfacePoolMBean
-
registerJmx
private void registerJmx() throws java.lang.Exception
- Throws:
java.lang.Exception
-
unRegisterJmx
private void unRegisterJmx() throws java.lang.Exception
- Throws:
java.lang.Exception
-
testGetConnectionIdleThreadIds
public java.util.List<java.lang.Long> testGetConnectionIdleThreadIds()
For testing purpose only.- Returns:
- current thread id's
-
resetStaticGlobal
public void resetStaticGlobal()
JMX method to remove state (will be reinitialized on next connection creation).- Specified by:
resetStaticGlobal
in interfacePoolMBean
-
-