From ade83d14cd741c1299a8e684398b6b52bb34e418 Mon Sep 17 00:00:00 2001 From: Brett Wooldridge <brett.wooldridge@gmail.com> Date: Tue, 12 Jan 2021 19:45:05 +0900 Subject: [PATCH] Code cleanup. --- .../com/zaxxer/hikari/pool/HikariPool.java | 66 ++++++++++++------- 1 file changed, 44 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/zaxxer/hikari/pool/HikariPool.java b/src/main/java/com/zaxxer/hikari/pool/HikariPool.java index c5a83e5a..e505f68b 100644 --- a/src/main/java/com/zaxxer/hikari/pool/HikariPool.java +++ b/src/main/java/com/zaxxer/hikari/pool/HikariPool.java @@ -477,38 +477,19 @@ public final class HikariPool extends PoolBase implements HikariPoolMXBean, IBag final PoolEntry poolEntry = newPoolEntry(); final long maxLifetime = config.getMaxLifetime(); - final long keepaliveTime = config.getKeepaliveTime(); - if (maxLifetime > 0) { // variance up to 2.5% of the maxlifetime final long variance = maxLifetime > 10_000 ? ThreadLocalRandom.current().nextLong( maxLifetime / 40 ) : 0; final long lifetime = maxLifetime - variance; - poolEntry.setFutureEol(houseKeepingExecutorService.schedule( - () -> { - if (softEvictConnection(poolEntry, "(connection has passed maxLifetime)", false /* not owner */)) { - addBagItem(connectionBag.getWaitingThreadCount()); - } - }, - lifetime, MILLISECONDS)); + poolEntry.setFutureEol(houseKeepingExecutorService.schedule(new MaxLifetimeTask(poolEntry), lifetime, MILLISECONDS)); } + final long keepaliveTime = config.getKeepaliveTime(); if (keepaliveTime > 0) { // variance up to 10% of the heartbeat time final long variance = ThreadLocalRandom.current().nextLong(keepaliveTime / 10); final long heartbeatTime = keepaliveTime - variance; - poolEntry.setKeepalive(houseKeepingExecutorService.scheduleWithFixedDelay( - () -> { - if (connectionBag.reserve(poolEntry)) { - if (!isConnectionAlive(poolEntry.connection)) { - softEvictConnection(poolEntry, DEAD_CONNECTION_MESSAGE, true); - addBagItem(connectionBag.getWaitingThreadCount()); - } - else { - connectionBag.unreserve(poolEntry); - logger.debug("{} - keepalive: connection {} is alive", poolName, poolEntry.connection); - } - } - }, heartbeatTime, heartbeatTime, MILLISECONDS)); + poolEntry.setKeepalive(houseKeepingExecutorService.scheduleWithFixedDelay(new KeepaliveTask(poolEntry), heartbeatTime, heartbeatTime, MILLISECONDS)); } return poolEntry; @@ -835,6 +816,47 @@ public final class HikariPool extends PoolBase implements HikariPoolMXBean, IBag } } + private final class MaxLifetimeTask implements Runnable + { + private final PoolEntry poolEntry; + + MaxLifetimeTask(final PoolEntry poolEntry) + { + this.poolEntry = poolEntry; + } + + public void run() + { + if (softEvictConnection(poolEntry, "(connection has passed maxLifetime)", false /* not owner */)) { + addBagItem(connectionBag.getWaitingThreadCount()); + } + } + } + + private final class KeepaliveTask implements Runnable + { + private final PoolEntry poolEntry; + + KeepaliveTask(final PoolEntry poolEntry) + { + this.poolEntry = poolEntry; + } + + public void run() + { + if (connectionBag.reserve(poolEntry)) { + if (!isConnectionAlive(poolEntry.connection)) { + softEvictConnection(poolEntry, DEAD_CONNECTION_MESSAGE, true); + addBagItem(connectionBag.getWaitingThreadCount()); + } + else { + connectionBag.unreserve(poolEntry); + logger.debug("{} - keepalive: connection {} is alive", poolName, poolEntry.connection); + } + } + } + } + public static class PoolInitializationException extends RuntimeException { private static final long serialVersionUID = 929872118275916520L;