Fixed #147 Integrate close asynch change into java6 code.

pull/154/head
Brett Wooldridge 11 years ago
parent f0c3c8d4bf
commit 764995bdd3

@ -77,6 +77,7 @@ public final class HikariPool implements HikariPoolMBean, IBagStateListener
private final HikariConfig configuration; private final HikariConfig configuration;
private final ConcurrentBag<PoolBagEntry> connectionBag; private final ConcurrentBag<PoolBagEntry> connectionBag;
private final ThreadPoolExecutor addConnectionExecutor; private final ThreadPoolExecutor addConnectionExecutor;
private final ThreadPoolExecutor closeConnectionExecutor;
private final IMetricsTracker metricsTracker; private final IMetricsTracker metricsTracker;
private final AtomicReference<Throwable> lastConnectionFailure; private final AtomicReference<Throwable> lastConnectionFailure;
@ -142,6 +143,7 @@ public final class HikariPool implements HikariPoolMBean, IBagStateListener
} }
addConnectionExecutor = createThreadPoolExecutor(configuration.getMaximumPoolSize(), "HikariCP connection filler", configuration.getThreadFactory()); addConnectionExecutor = createThreadPoolExecutor(configuration.getMaximumPoolSize(), "HikariCP connection filler", configuration.getThreadFactory());
closeConnectionExecutor = createThreadPoolExecutor(configuration.getMaximumPoolSize(), "HikariCP connection closer", configuration.getThreadFactory());
fillPool(); fillPool();
@ -242,6 +244,7 @@ public final class HikariPool implements HikariPoolMBean, IBagStateListener
logPoolState("Before shutdown "); logPoolState("Before shutdown ");
houseKeepingExecutorService.shutdownNow(); houseKeepingExecutorService.shutdownNow();
addConnectionExecutor.shutdownNow(); addConnectionExecutor.shutdownNow();
closeConnectionExecutor.shutdownNow();
final long start = System.currentTimeMillis(); final long start = System.currentTimeMillis();
do { do {
@ -376,10 +379,11 @@ public final class HikariPool implements HikariPoolMBean, IBagStateListener
if (tc < 0) { if (tc < 0) {
LOGGER.warn("Internal accounting inconsistency, totalConnections={}", tc, new Exception()); LOGGER.warn("Internal accounting inconsistency, totalConnections={}", tc, new Exception());
} }
bagEntry.connection.close(); closeConnectionExecutor.submit(new Runnable() {
} public void run() {
catch (SQLException e) { quietlyCloseConnection(bagEntry.connection);
return; }
});
} }
finally { finally {
connectionBag.remove(bagEntry); connectionBag.remove(bagEntry);

Loading…
Cancel
Save