diff --git a/hikaricp-common/src/main/java/com/zaxxer/hikari/pool/BaseHikariPool.java b/hikaricp-common/src/main/java/com/zaxxer/hikari/pool/BaseHikariPool.java index f7ce3269..8708c9c2 100644 --- a/hikaricp-common/src/main/java/com/zaxxer/hikari/pool/BaseHikariPool.java +++ b/hikaricp-common/src/main/java/com/zaxxer/hikari/pool/BaseHikariPool.java @@ -66,7 +66,7 @@ import com.zaxxer.hikari.util.PoolUtilities; public abstract class BaseHikariPool implements HikariPoolMBean, IBagStateListener { protected static final Logger LOGGER = LoggerFactory.getLogger("HikariPool"); - private static final long ALIVE_BYPASS_WINDOW = TimeUnit.MILLISECONDS.toNanos(Long.getLong("com.zaxxer.hikari.aliveBypassWindow", 1000L)); + private static final long ALIVE_BYPASS_WINDOW = Long.getLong("com.zaxxer.hikari.aliveBypassWindow", 1000L); protected static final int POOL_RUNNING = 0; protected static final int POOL_SUSPENDED = 1; @@ -154,7 +154,7 @@ public abstract class BaseHikariPool implements HikariPoolMBean, IBagStateListen long delayPeriod = Long.getLong("com.zaxxer.hikari.housekeeping.periodMs", TimeUnit.SECONDS.toMillis(30L)); ThreadFactory threadFactory = configuration.getThreadFactory() != null ? configuration.getThreadFactory() : new DefaultThreadFactory("Hikari Housekeeping Timer (pool " + configuration.getPoolName() + ")", true); this.houseKeepingExecutorService = new ScheduledThreadPoolExecutor(1, threadFactory, new ThreadPoolExecutor.DiscardPolicy()); - this.houseKeepingExecutorService.scheduleAtFixedRate(getHouseKeeper(), delayPeriod, delayPeriod, TimeUnit.MILLISECONDS); + this.houseKeepingExecutorService.scheduleAtFixedRate(getHouseKeeper(), TimeUnit.SECONDS.toMillis(10L), delayPeriod, TimeUnit.MILLISECONDS); this.leakTask = (configuration.getLeakDetectionThreshold() == 0) ? LeakTask.NO_LEAK : new LeakTask(configuration.getLeakDetectionThreshold(), houseKeepingExecutorService); setRemoveOnCancelPolicy(houseKeepingExecutorService); @@ -173,7 +173,7 @@ public abstract class BaseHikariPool implements HikariPoolMBean, IBagStateListen { suspendResumeLock.acquire(); long timeout = connectionTimeout; - final long start = System.nanoTime(); + final long start = System.currentTimeMillis(); final MetricsContext metricsContext = (isRecordMetrics ? metricsTracker.recordConnectionRequest(start) : MetricsTracker.NO_CONTEXT); try { @@ -183,7 +183,7 @@ public abstract class BaseHikariPool implements HikariPoolMBean, IBagStateListen break; // We timed out... break and throw exception } - final long now = System.nanoTime(); + final long now = System.currentTimeMillis(); if (now - bagEntry.lastAccess > ALIVE_BYPASS_WINDOW && !isConnectionAlive(bagEntry.connection, timeout)) { closeConnection(bagEntry); // Throw away the dead connection and try again timeout = connectionTimeout - elapsedTimeMs(start); @@ -221,7 +221,7 @@ public abstract class BaseHikariPool implements HikariPoolMBean, IBagStateListen closeConnection(bagEntry); } else { - bagEntry.lastAccess = System.nanoTime(); + bagEntry.lastAccess = System.currentTimeMillis(); connectionBag.requite(bagEntry); } } @@ -245,7 +245,7 @@ public abstract class BaseHikariPool implements HikariPoolMBean, IBagStateListen addConnectionExecutor.shutdown(); addConnectionExecutor.awaitTermination(5L, TimeUnit.SECONDS); - final long start = System.nanoTime(); + final long start = System.currentTimeMillis(); do { softEvictConnections(); abortActiveConnections(); diff --git a/hikaricp-common/src/main/java/com/zaxxer/hikari/pool/PoolBagEntry.java b/hikaricp-common/src/main/java/com/zaxxer/hikari/pool/PoolBagEntry.java index 975c2c91..8c846a96 100644 --- a/hikaricp-common/src/main/java/com/zaxxer/hikari/pool/PoolBagEntry.java +++ b/hikaricp-common/src/main/java/com/zaxxer/hikari/pool/PoolBagEntry.java @@ -42,7 +42,7 @@ public final class PoolBagEntry implements IConcurrentBagEntry public PoolBagEntry(final Connection connection, final BaseHikariPool pool) { this.connection = connection; - this.lastAccess = System.nanoTime(); + this.lastAccess = System.currentTimeMillis(); final long maxLifetime = pool.configuration.getMaxLifetime(); if (maxLifetime > 0) { @@ -81,7 +81,7 @@ public final class PoolBagEntry implements IConcurrentBagEntry public String toString() { return "Connection......" + connection + "\n" - + " Last access.." + TimeUnit.NANOSECONDS.toMillis(lastAccess) + "\n" + + " Last access.." + lastAccess + "\n" + " Last open....." + lastOpenTime + "\n" + " State........." + stateToString(); } diff --git a/hikaricp-common/src/main/java/com/zaxxer/hikari/util/UtilityElf.java b/hikaricp-common/src/main/java/com/zaxxer/hikari/util/UtilityElf.java index b09a852d..d7b1a308 100644 --- a/hikaricp-common/src/main/java/com/zaxxer/hikari/util/UtilityElf.java +++ b/hikaricp-common/src/main/java/com/zaxxer/hikari/util/UtilityElf.java @@ -49,12 +49,12 @@ public final class UtilityElf /** * Get the elapsed time in millisecond between the specified start time and now. * - * @param startNanos the start time in nano-seconds + * @param start the start time * @return the elapsed milliseconds */ - public static long elapsedTimeMs(final long startNanos) + public static long elapsedTimeMs(final long start) { - return TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startNanos); + return System.currentTimeMillis() - start; } /** diff --git a/hikaricp-common/src/test/java/com/zaxxer/hikari/ShutdownTest.java b/hikaricp-common/src/test/java/com/zaxxer/hikari/ShutdownTest.java index 3daa9635..4011526f 100644 --- a/hikaricp-common/src/test/java/com/zaxxer/hikari/ShutdownTest.java +++ b/hikaricp-common/src/test/java/com/zaxxer/hikari/ShutdownTest.java @@ -166,7 +166,7 @@ public class ShutdownTest ds.close(); - long start = System.nanoTime(); + long start = System.currentTimeMillis(); while (UtilityElf.elapsedTimeMs(start) < TimeUnit.SECONDS.toMillis(5) && threadCount() > 0) { UtilityElf.quietlySleep(250); } diff --git a/hikaricp-common/src/test/java/com/zaxxer/hikari/TestConnectionCloseBlocking.java b/hikaricp-common/src/test/java/com/zaxxer/hikari/TestConnectionCloseBlocking.java index 5aca051d..d2899437 100644 --- a/hikaricp-common/src/test/java/com/zaxxer/hikari/TestConnectionCloseBlocking.java +++ b/hikaricp-common/src/test/java/com/zaxxer/hikari/TestConnectionCloseBlocking.java @@ -38,14 +38,14 @@ public class TestConnectionCloseBlocking { HikariDataSource ds = new HikariDataSource(config); - long start = System.nanoTime(); + long start = System.currentTimeMillis(); try { Connection connection = ds.getConnection(); connection.close(); // Hikari only checks for validity for connections with lastAccess > 1000 ms so we sleep for 1001 ms to force // Hikari to do a connection validation which will fail and will trigger the connection to be closed UtilityElf.quietlySleep(1001); - start = System.nanoTime(); + start = System.currentTimeMillis(); connection = ds.getConnection(); // on physical connection close we sleep 2 seconds Assert.assertTrue("Waited longer than timeout", (UtilityElf.elapsedTimeMs(start) < config.getConnectionTimeout())); diff --git a/hikaricp-java6/src/main/java/com/zaxxer/hikari/pool/HikariPool.java b/hikaricp-java6/src/main/java/com/zaxxer/hikari/pool/HikariPool.java index 0557cc1c..fccec3ee 100644 --- a/hikaricp-java6/src/main/java/com/zaxxer/hikari/pool/HikariPool.java +++ b/hikaricp-java6/src/main/java/com/zaxxer/hikari/pool/HikariPool.java @@ -241,8 +241,8 @@ public final class HikariPool extends BaseHikariPool connectionTimeout = configuration.getConnectionTimeout(); // refresh member in case it changed - final long now = System.nanoTime(); - final long idleTimeout = TimeUnit.MILLISECONDS.toNanos(configuration.getIdleTimeout()); + final long now = System.currentTimeMillis(); + final long idleTimeout = configuration.getIdleTimeout(); for (PoolBagEntry bagEntry : connectionBag.values(STATE_NOT_IN_USE)) { if (connectionBag.reserve(bagEntry)) { diff --git a/hikaricp/src/main/java/com/zaxxer/hikari/pool/HikariPool.java b/hikaricp/src/main/java/com/zaxxer/hikari/pool/HikariPool.java index e3569506..7826faa3 100644 --- a/hikaricp/src/main/java/com/zaxxer/hikari/pool/HikariPool.java +++ b/hikaricp/src/main/java/com/zaxxer/hikari/pool/HikariPool.java @@ -218,8 +218,8 @@ public final class HikariPool extends BaseHikariPool connectionTimeout = configuration.getConnectionTimeout(); // refresh member in case it changed - final long now = System.nanoTime(); - final long idleTimeout = TimeUnit.MILLISECONDS.toNanos(configuration.getIdleTimeout()); + final long now = System.currentTimeMillis(); + final long idleTimeout = configuration.getIdleTimeout(); connectionBag.values(STATE_NOT_IN_USE).stream().filter(p -> connectionBag.reserve(p)).forEach(bagEntry -> { if (bagEntry.evicted || (idleTimeout > 0L && now > bagEntry.lastAccess + idleTimeout)) {