From a671b6e24d1b225283c8c3ae07343f7d32276abc Mon Sep 17 00:00:00 2001 From: Thomas Aregger Date: Mon, 23 Sep 2024 19:12:27 +0200 Subject: [PATCH] Close connections marked as evicted instead of returning them to the pool (#2157) --- .../com/zaxxer/hikari/pool/HikariPool.java | 7 ++++-- .../zaxxer/hikari/pool/TestConnections.java | 22 +++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/zaxxer/hikari/pool/HikariPool.java b/src/main/java/com/zaxxer/hikari/pool/HikariPool.java index 0c6f7917..56b1f063 100644 --- a/src/main/java/com/zaxxer/hikari/pool/HikariPool.java +++ b/src/main/java/com/zaxxer/hikari/pool/HikariPool.java @@ -417,8 +417,11 @@ public final class HikariPool extends PoolBase implements HikariPoolMXBean, IBag void recycle(final PoolEntry poolEntry) { metricsTracker.recordConnectionUsage(poolEntry); - - connectionBag.requite(poolEntry); + if (poolEntry.isMarkedEvicted()) { + closeConnection(poolEntry, EVICTED_CONNECTION_MESSAGE); + } else { + connectionBag.requite(poolEntry); + } } /** diff --git a/src/test/java/com/zaxxer/hikari/pool/TestConnections.java b/src/test/java/com/zaxxer/hikari/pool/TestConnections.java index f5441764..7fe0d673 100644 --- a/src/test/java/com/zaxxer/hikari/pool/TestConnections.java +++ b/src/test/java/com/zaxxer/hikari/pool/TestConnections.java @@ -310,6 +310,28 @@ public class TestConnections } } + @Test + public void testCloseMarkEvicted() throws Exception + { + HikariConfig config = newHikariConfig(); + config.setMinimumIdle(0); + config.setMaximumPoolSize(5); + config.setConnectionTimeout(2500); + config.setConnectionTestQuery("VALUES 1"); + config.setDataSourceClassName("com.zaxxer.hikari.mocks.StubDataSource"); + + try (HikariDataSource ds = new HikariDataSource(config)) { + ProxyConnection connection = (ProxyConnection) ds.getConnection(); + + HikariPool pool = getPool(ds); + assertEquals(1, pool.getTotalConnections()); + connection.getPoolEntry().markEvicted(); + connection.close(); + + assertEquals("Connection should have been evicted after close", 0, pool.getTotalConnections()); + } + } + @Test public void testEviction() throws Exception {