From b140c9ed687d62ccf5d6d01ce91c8ae4c0618e54 Mon Sep 17 00:00:00 2001 From: Brett Wooldridge Date: Tue, 14 Oct 2014 09:05:16 +0900 Subject: [PATCH] Change rejected handler policy for closeConnectionExecutor to CallRunsPolicy. --- .../src/main/java/com/zaxxer/hikari/pool/HikariPool.java | 8 +++----- .../main/java/com/zaxxer/hikari/util/PoolUtilities.java | 6 +++--- .../src/main/java/com/zaxxer/hikari/pool/HikariPool.java | 6 +++--- .../main/java/com/zaxxer/hikari/util/PoolUtilities.java | 6 +++--- 4 files changed, 12 insertions(+), 14 deletions(-) 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 43c2abe5..c48b5fd5 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 @@ -53,10 +53,8 @@ import com.zaxxer.hikari.proxy.ProxyFactory; import com.zaxxer.hikari.util.ConcurrentBag; import com.zaxxer.hikari.util.ConcurrentBag.IBagStateListener; import com.zaxxer.hikari.util.DefaultThreadFactory; -import com.zaxxer.hikari.util.DriverDataSource; import com.zaxxer.hikari.util.LeakTask; import com.zaxxer.hikari.util.PoolUtilities; -import com.zaxxer.hikari.util.PropertyBeanSetter; /** * This is the primary connection pool class that provides the basic @@ -153,8 +151,8 @@ public final class HikariPool implements HikariPoolMBean, IBagStateListener HikariMBeanElf.registerMBeans(configuration, this); } - addConnectionExecutor = createThreadPoolExecutor(configuration.getMaximumPoolSize(), "HikariCP connection filler (pool " + configuration.getPoolName() + ")", configuration.getThreadFactory()); - closeConnectionExecutor = createThreadPoolExecutor(configuration.getMaximumPoolSize(), "HikariCP connection closer (pool " + configuration.getPoolName() + ")", configuration.getThreadFactory()); + addConnectionExecutor = createThreadPoolExecutor(configuration.getMaximumPoolSize(), "HikariCP connection filler (pool " + configuration.getPoolName() + ")", configuration.getThreadFactory(), new ThreadPoolExecutor.DiscardPolicy()); + closeConnectionExecutor = createThreadPoolExecutor(4, "HikariCP connection closer (pool " + configuration.getPoolName() + ")", configuration.getThreadFactory(), new ThreadPoolExecutor.CallerRunsPolicy()); fillPool(); @@ -525,7 +523,7 @@ public final class HikariPool implements HikariPoolMBean, IBagStateListener */ private void abortActiveConnections() throws InterruptedException { - ExecutorService assassinExecutor = createThreadPoolExecutor(configuration.getMaximumPoolSize(), "HikariCP connection assassin", configuration.getThreadFactory()); + ExecutorService assassinExecutor = createThreadPoolExecutor(configuration.getMaximumPoolSize(), "HikariCP connection assassin", configuration.getThreadFactory(), new ThreadPoolExecutor.CallerRunsPolicy()); for (PoolBagEntry bagEntry : connectionBag.values(STATE_IN_USE)) { try { bagEntry.connection.abort(assassinExecutor); diff --git a/hikaricp-java6/src/main/java/com/zaxxer/hikari/util/PoolUtilities.java b/hikaricp-java6/src/main/java/com/zaxxer/hikari/util/PoolUtilities.java index 5a5feb1e..49a138b1 100644 --- a/hikaricp-java6/src/main/java/com/zaxxer/hikari/util/PoolUtilities.java +++ b/hikaricp-java6/src/main/java/com/zaxxer/hikari/util/PoolUtilities.java @@ -7,6 +7,7 @@ import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.RejectedExecutionHandler; import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; @@ -157,7 +158,7 @@ public final class PoolUtilities * @param threadFactory an optional ThreadFactory * @return a ThreadPoolExecutor */ - public static ThreadPoolExecutor createThreadPoolExecutor(final int queueSize, final String threadName, ThreadFactory threadFactory) + public static ThreadPoolExecutor createThreadPoolExecutor(final int queueSize, final String threadName, ThreadFactory threadFactory, RejectedExecutionHandler policy) { if (threadFactory == null) { threadFactory = new DefaultThreadFactory(threadName, true); @@ -165,8 +166,7 @@ public final class PoolUtilities int processors = Math.max(1, Runtime.getRuntime().availableProcessors() / 4); LinkedBlockingQueue queue = new LinkedBlockingQueue(queueSize); - ThreadPoolExecutor executor = new ThreadPoolExecutor(processors, processors, 5, TimeUnit.SECONDS, queue, threadFactory, - new ThreadPoolExecutor.DiscardPolicy()); + ThreadPoolExecutor executor = new ThreadPoolExecutor(processors, processors, 5, TimeUnit.SECONDS, queue, threadFactory, policy); executor.allowCoreThreadTimeOut(true); return executor; } 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 7bd84ad1..8dea0173 100644 --- a/hikaricp/src/main/java/com/zaxxer/hikari/pool/HikariPool.java +++ b/hikaricp/src/main/java/com/zaxxer/hikari/pool/HikariPool.java @@ -150,8 +150,8 @@ public final class HikariPool implements HikariPoolMBean, IBagStateListener HikariMBeanElf.registerMBeans(configuration, this); } - addConnectionExecutor = createThreadPoolExecutor(configuration.getMaximumPoolSize(), "HikariCP connection filler (pool " + configuration.getPoolName() + ")", configuration.getThreadFactory()); - closeConnectionExecutor = createThreadPoolExecutor(configuration.getMaximumPoolSize(), "HikariCP connection closer (pool " + configuration.getPoolName() + ")", configuration.getThreadFactory()); + addConnectionExecutor = createThreadPoolExecutor(configuration.getMaximumPoolSize(), "HikariCP connection filler (pool " + configuration.getPoolName() + ")", configuration.getThreadFactory(), new ThreadPoolExecutor.DiscardPolicy()); + closeConnectionExecutor = createThreadPoolExecutor(4, "HikariCP connection closer (pool " + configuration.getPoolName() + ")", configuration.getThreadFactory(), new ThreadPoolExecutor.CallerRunsPolicy()); fillPool(); @@ -508,7 +508,7 @@ public final class HikariPool implements HikariPoolMBean, IBagStateListener */ private void abortActiveConnections() throws InterruptedException { - ExecutorService assassinExecutor = createThreadPoolExecutor(configuration.getMaximumPoolSize(), "HikariCP connection assassin", configuration.getThreadFactory()); + ExecutorService assassinExecutor = createThreadPoolExecutor(configuration.getMaximumPoolSize(), "HikariCP connection assassin", configuration.getThreadFactory(), new ThreadPoolExecutor.CallerRunsPolicy()); connectionBag.values(STATE_IN_USE).parallelStream().forEach(bagEntry -> { try { bagEntry.connection.abort(assassinExecutor); diff --git a/hikaricp/src/main/java/com/zaxxer/hikari/util/PoolUtilities.java b/hikaricp/src/main/java/com/zaxxer/hikari/util/PoolUtilities.java index b5bad628..38e4468b 100644 --- a/hikaricp/src/main/java/com/zaxxer/hikari/util/PoolUtilities.java +++ b/hikaricp/src/main/java/com/zaxxer/hikari/util/PoolUtilities.java @@ -7,6 +7,7 @@ import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.RejectedExecutionHandler; import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; @@ -144,7 +145,7 @@ public final class PoolUtilities * @param threadFactory an optional ThreadFactory * @return a ThreadPoolExecutor */ - public static ThreadPoolExecutor createThreadPoolExecutor(final int queueSize, final String threadName, ThreadFactory threadFactory) + public static ThreadPoolExecutor createThreadPoolExecutor(final int queueSize, final String threadName, ThreadFactory threadFactory, RejectedExecutionHandler policy) { if (threadFactory == null) { threadFactory = new DefaultThreadFactory(threadName, true); @@ -152,8 +153,7 @@ public final class PoolUtilities int processors = Math.max(1, Runtime.getRuntime().availableProcessors() / 4); LinkedBlockingQueue queue = new LinkedBlockingQueue(queueSize); - ThreadPoolExecutor executor = new ThreadPoolExecutor(processors, processors, 5, TimeUnit.SECONDS, queue, threadFactory, - new ThreadPoolExecutor.DiscardPolicy()); + ThreadPoolExecutor executor = new ThreadPoolExecutor(processors, processors, 5, TimeUnit.SECONDS, queue, threadFactory, policy); executor.allowCoreThreadTimeOut(true); return executor; }