From baf7520c395a6a21d7accf2041bd62d4928038b8 Mon Sep 17 00:00:00 2001 From: nitin_000 Date: Mon, 25 Sep 2017 15:40:16 +0530 Subject: [PATCH] Removed some maturity wrinkles :) 1. isConnectionAlive() if connection is invalid/broken, avoid delay caused by calls (and probably more exception) on connection to be closed. 2. getConection() removed dead code. poolEntry is always null if connectionBag.borrow() throws InterruptedException. probably metricsTracker.recordBorrowTimeoutStats(startTime); and metricsTracker.recordConnectionTimeout() are same/ should be one call? --- .../com/zaxxer/hikari/pool/HikariPool.java | 5 +-- .../java/com/zaxxer/hikari/pool/PoolBase.java | 38 +++++++++---------- 2 files changed, 20 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/zaxxer/hikari/pool/HikariPool.java b/src/main/java/com/zaxxer/hikari/pool/HikariPool.java index a7c65b25..d7255c2b 100755 --- a/src/main/java/com/zaxxer/hikari/pool/HikariPool.java +++ b/src/main/java/com/zaxxer/hikari/pool/HikariPool.java @@ -181,11 +181,9 @@ public final class HikariPool extends PoolBase implements HikariPoolMXBean, IBag } while (timeout > 0L); metricsTracker.recordBorrowTimeoutStats(startTime); + metricsTracker.recordConnectionTimeout(); } catch (InterruptedException e) { - if (poolEntry != null) { - poolEntry.recycle(startTime); - } Thread.currentThread().interrupt(); throw new SQLException(poolName + " - Interrupted during connection acquisition", e); } @@ -596,7 +594,6 @@ public final class HikariPool extends PoolBase implements HikariPoolMXBean, IBag private SQLException createTimeoutException(long startTime) { logPoolState("Timeout failure "); - metricsTracker.recordConnectionTimeout(); String sqlState = null; final Throwable originalException = getLastConnectionFailure(); diff --git a/src/main/java/com/zaxxer/hikari/pool/PoolBase.java b/src/main/java/com/zaxxer/hikari/pool/PoolBase.java index 9063d817..a83720dd 100755 --- a/src/main/java/com/zaxxer/hikari/pool/PoolBase.java +++ b/src/main/java/com/zaxxer/hikari/pool/PoolBase.java @@ -152,38 +152,38 @@ abstract class PoolBase boolean isConnectionAlive(final Connection connection) { try { - try { - setNetworkTimeout(connection, validationTimeout); - - final long validationSeconds = (int) Math.max(1000L, validationTimeout) / 1000; + setNetworkTimeout(connection, validationTimeout); - if (isUseJdbc4Validation) { - return connection.isValid((int) validationSeconds); - } + final int validationSeconds = (int) Math.max(1000L, validationTimeout) / 1000; + boolean valid = true; + if (isUseJdbc4Validation) { + valid = connection.isValid(validationSeconds); + } + else { try (Statement statement = connection.createStatement()) { - if (isNetworkTimeoutSupported != TRUE) { - setQueryTimeout(statement, (int) validationSeconds); + if (isNetworkTimeoutSupported == FALSE) { + setQueryTimeout(statement, validationSeconds); } statement.execute(config.getConnectionTestQuery()); - } - } - finally { - setNetworkTimeout(connection, networkTimeout); + } + } - if (isIsolateInternalQueries && !isAutoCommit) { - connection.rollback(); - } - } + if (valid) { + if (isIsolateInternalQueries && !isAutoCommit) { + connection.rollback(); + } - return true; + setNetworkTimeout(connection, networkTimeout); + return true; + } } catch (Exception e) { lastConnectionFailure.set(e); LOGGER.warn("{} - Failed to validate connection {} ({})", poolName, connection, e.getMessage()); - return false; } + return false; } Throwable getLastConnectionFailure()