diff --git a/src/main/java/com/zaxxer/hikari/pool/HikariPool.java b/src/main/java/com/zaxxer/hikari/pool/HikariPool.java index ab195fba..c3451b1b 100644 --- a/src/main/java/com/zaxxer/hikari/pool/HikariPool.java +++ b/src/main/java/com/zaxxer/hikari/pool/HikariPool.java @@ -192,7 +192,7 @@ public class HikariPool implements HikariPoolMBean, IBagStateListener } final long now = clockSource.currentTime(); - if (bagEntry.evicted || (clockSource.elapsedMillis(bagEntry.lastAccess, now) > ALIVE_BYPASS_WINDOW_MS && !isConnectionAlive(bagEntry))) { + if (bagEntry.evicted || (clockSource.elapsedMillis(bagEntry.lastAccess, now) > ALIVE_BYPASS_WINDOW_MS && !isConnectionAlive(bagEntry.connection))) { closeConnection(bagEntry, "connection evicted or dead"); // Throw away the dead connection and try again timeout = hardTimeout - clockSource.elapsedMillis(startTime, now); } @@ -508,7 +508,7 @@ public class HikariPool implements HikariPoolMBean, IBagStateListener transactionIsolation = (transactionIsolation < 0 ? connection.getTransactionIsolation() : transactionIsolation); poolUtils.setupConnection(connection, config.getConnectionInitSql(), isAutoCommit, isReadOnly, transactionIsolation, catalog); - poolUtils.setNetworkTimeout(connection, originalTimeout, null); + poolUtils.setNetworkTimeout(connection, originalTimeout); connectionBag.add(new PoolBagEntry(connection, this)); lastConnectionFailure.set(null); @@ -549,14 +549,14 @@ public class HikariPool implements HikariPoolMBean, IBagStateListener /** * Check whether the connection is alive or not. * - * @param bagEntry a PoolBagEntry containing a connection to test + * @param connection the connection to test * @return true if the connection is alive, false if it is not alive or we timed out */ - private boolean isConnectionAlive(final PoolBagEntry bagEntry) + private boolean isConnectionAlive(final Connection connection) { - final Connection connection = bagEntry.connection; - final int timeoutSec = (int) TimeUnit.MILLISECONDS.toSeconds(validationTimeout); try { + int timeoutSec = (int) TimeUnit.MILLISECONDS.toSeconds(validationTimeout); + if (isUseJdbc4Validation) { return connection.isValid(timeoutSec); } @@ -574,7 +574,7 @@ public class HikariPool implements HikariPoolMBean, IBagStateListener connection.rollback(); } - poolUtils.setNetworkTimeout(connection, originalTimeout, bagEntry.clientExecutor); + poolUtils.setNetworkTimeout(connection, originalTimeout); return true; } diff --git a/src/main/java/com/zaxxer/hikari/pool/PoolBagEntry.java b/src/main/java/com/zaxxer/hikari/pool/PoolBagEntry.java index 26800942..56766631 100644 --- a/src/main/java/com/zaxxer/hikari/pool/PoolBagEntry.java +++ b/src/main/java/com/zaxxer/hikari/pool/PoolBagEntry.java @@ -17,7 +17,6 @@ package com.zaxxer.hikari.pool; import java.sql.Connection; import java.sql.Statement; -import java.util.concurrent.Executor; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.TimeUnit; @@ -43,7 +42,6 @@ public final class PoolBagEntry implements IConcurrentBagEntry public volatile long lastOpenTime; public volatile boolean evicted; public volatile boolean aborted; - public volatile Executor clientExecutor; private volatile ScheduledFuture endOfLife; diff --git a/src/main/java/com/zaxxer/hikari/pool/PoolUtilities.java b/src/main/java/com/zaxxer/hikari/pool/PoolUtilities.java index 7da00fd1..737e38f8 100644 --- a/src/main/java/com/zaxxer/hikari/pool/PoolUtilities.java +++ b/src/main/java/com/zaxxer/hikari/pool/PoolUtilities.java @@ -30,12 +30,13 @@ public final class PoolUtilities private static final Logger LOGGER = LoggerFactory.getLogger(PoolUtilities.class); private Executor netTimeoutExecutor; + private final HikariConfig config; private final String poolName; - private boolean isNetworkTimeoutSupported; - private boolean isQueryTimeoutSupported; private volatile boolean isValidChecked; private volatile boolean isValidSupported; + private boolean isNetworkTimeoutSupported; + private boolean isQueryTimeoutSupported; public PoolUtilities(final HikariConfig configuration) { @@ -62,7 +63,7 @@ public final class PoolUtilities LOGGER.debug("Closing connection {} in pool {}{}", connection, poolName, addendum); try { - setNetworkTimeout(connection, TimeUnit.SECONDS.toMillis(15), netTimeoutExecutor); + setNetworkTimeout(connection, TimeUnit.SECONDS.toMillis(15)); } finally { // continue with the close even if setNetworkTimeout() throws (due to driver poorly behaving drivers) @@ -205,13 +206,12 @@ public final class PoolUtilities * * @param connection the connection to set the network timeout on * @param timeoutMs the number of milliseconds before timeout - * @param executor a specified Executor to use, or null for the pool-defined Executor * @throws SQLException throw if the connection.setNetworkTimeout() call throws */ - public void setNetworkTimeout(final Connection connection, final long timeoutMs, final Executor executor) throws SQLException + public void setNetworkTimeout(final Connection connection, final long timeoutMs) throws SQLException { if (isNetworkTimeoutSupported) { - connection.setNetworkTimeout((executor == null) ? netTimeoutExecutor : executor, (int) timeoutMs); + connection.setNetworkTimeout(netTimeoutExecutor, (int) timeoutMs); } } diff --git a/src/main/java/com/zaxxer/hikari/proxy/ConnectionProxy.java b/src/main/java/com/zaxxer/hikari/proxy/ConnectionProxy.java index 06b6272d..6824cbd0 100644 --- a/src/main/java/com/zaxxer/hikari/proxy/ConnectionProxy.java +++ b/src/main/java/com/zaxxer/hikari/proxy/ConnectionProxy.java @@ -25,7 +25,6 @@ import java.sql.Statement; import java.sql.Wrapper; import java.util.HashSet; import java.util.Set; -import java.util.concurrent.Executor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -377,14 +376,6 @@ public abstract class ConnectionProxy implements IHikariConnectionProxy isCatalogDirty = (catalog != null && !catalog.equals(bagEntry.parentPool.catalog)) || (catalog == null && bagEntry.parentPool.catalog != null); } - /** {@inheritDoc} */ - @Override - public void setNetworkTimeout(Executor executor, int milliseconds) throws SQLException - { - delegate.setNetworkTimeout(executor, milliseconds); - bagEntry.clientExecutor = executor; - } - /** {@inheritDoc} */ @Override public final boolean isWrapperFor(Class iface) throws SQLException