Attempt to bound how long a connection.close() call can take to 30 seconds on JDBC41 drivers.

2.3.0
Brett Wooldridge 10 years ago
parent 67bb3c977f
commit a195e7781a

@ -123,7 +123,7 @@ public abstract class BaseHikariPool implements HikariPoolMBean, IBagStateListen
this.password = password;
this.configuration = configuration;
this.poolUtils = new PoolUtilities();
this.poolUtils = new PoolUtilities(configuration);
this.connectionBag = createConcurrentBag(this);
this.totalConnections = new AtomicInteger();
this.connectionTimeout = configuration.getConnectionTimeout();

@ -1,6 +1,7 @@
package com.zaxxer.hikari.util;
import static com.zaxxer.hikari.util.UtilityElf.createInstance;
import static com.zaxxer.hikari.util.UtilityElf.createThreadPoolExecutor;
import java.sql.Connection;
import java.sql.SQLException;
@ -8,12 +9,15 @@ import java.sql.SQLFeatureNotSupportedException;
import java.sql.Statement;
import java.util.Properties;
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import javax.sql.DataSource;
import org.slf4j.Logger;
import com.zaxxer.hikari.HikariConfig;
public final class PoolUtilities
{
private volatile boolean IS_JDBC40;
@ -21,6 +25,12 @@ public final class PoolUtilities
private volatile boolean jdbc40checked;
private volatile boolean jdbc41checked;
private volatile boolean queryTimeoutSupported = true;
private volatile ThreadPoolExecutor executorService;
public PoolUtilities(HikariConfig configuration)
{
executorService = createThreadPoolExecutor(configuration.getMaximumPoolSize(), "HikariCP utility thread (pool " + configuration.getPoolName() + ")", configuration.getThreadFactory(), new ThreadPoolExecutor.DiscardPolicy());
}
/**
* Close connection and eat any exception.
@ -31,9 +41,10 @@ public final class PoolUtilities
{
if (connection != null) {
try {
setNetworkTimeout(executorService, connection, TimeUnit.SECONDS.toMillis(30), true);
connection.close();
}
catch (SQLException e) {
catch (Exception e) {
return;
}
}

@ -238,7 +238,7 @@ public class ShutdownTest
@Test
public void testThreadedShutdown() throws Exception
{
HikariConfig config = new HikariConfig();
final HikariConfig config = new HikariConfig();
config.setMinimumIdle(5);
config.setMaximumPoolSize(5);
config.setConnectionTimeout(200);
@ -279,7 +279,7 @@ public class ShutdownTest
Assert.fail(e.getMessage());
}
finally {
new PoolUtilities().quietlyCloseConnection(connection);
new PoolUtilities(config).quietlyCloseConnection(connection);
ds.shutdown();
}
};

Loading…
Cancel
Save