[ https://issues.apache.org/jira/browse/POOL-404?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Phil Steitz closed POOL-404. ---------------------------- Resolution: Not A Problem We can open an enhancement request to add global pool management, but I do not see a pool bug here. > No way to close evictor thread > ------------------------------ > > Key: POOL-404 > URL: https://issues.apache.org/jira/browse/POOL-404 > Project: Commons Pool > Issue Type: Bug > Affects Versions: 2.11.1 > Reporter: Patrick Barry > Priority: Major > > Using GenericObjectPool<StatefulRedisConnection<String, String>> to help with > lettuce client/redis connection management. I have everything shutting down > cleanly except the commons-pool-evictor. I see this problem has been > reported many times in the past, but all the changes are still not allowing > this thread to shut down cleanly on close. I am using version 2.11.1. I > have tried to code around this issue, but because EvictionTimer.java is so > locked down, there is very little that can done to change the behavior of how > this class interacts with GenericObjectPool. > For this thread to shutdown, the taskMap has to be empty, which it never is > in my case. So even though we call close() on the pool, this class fails to > shutdown the embedded executor because it thinks it has more tasks. > Looking at this code, it did remove 1 entry from taskMap, but we had many > more in that map. Is there a way to clear this map, so it will allow this > thread/executor to shutdown? > {code:java} > static synchronized void cancel(final BaseGenericObjectPool<?>.Evictor > evictor, final Duration timeout, > final boolean restarting) { > if (evictor != null) { > evictor.cancel(); //why does this not interrupt!? > remove(evictor); > } > if (!restarting && executor != null && taskMap.isEmpty()) { //<-- How do > you force taskMap to be empty!? > executor.shutdown(); > try { > executor.awaitTermination(timeout.toMillis(), > TimeUnit.MILLISECONDS); > } catch (final InterruptedException e) { > // Swallow > // Significant API changes would be required to propagate this > } > executor.setCorePoolSize(0); > executor = null; > } > }{code} > } > I had all these entries in the taskMap when trying to shut down: > org.apache.commons.pool2.impl.BaseGenericObjectPool$Evictor@73d4066e > org.apache.commons.pool2.impl.BaseGenericObjectPool$Evictor@3c69362a > org.apache.commons.pool2.impl.BaseGenericObjectPool$Evictor@2412a42b > org.apache.commons.pool2.impl.BaseGenericObjectPool$Evictor@45404d5 > org.apache.commons.pool2.impl.BaseGenericObjectPool$Evictor@29138d3a > org.apache.commons.pool2.impl.BaseGenericObjectPool$Evictor@5cbe2654 > org.apache.commons.pool2.impl.BaseGenericObjectPool$Evictor@6dbcf214 > org.apache.commons.pool2.impl.BaseGenericObjectPool$Evictor@496a31da > org.apache.commons.pool2.impl.BaseGenericObjectPool$Evictor@7c251f90 > org.apache.commons.pool2.impl.BaseGenericObjectPool$Evictor@51841ac6 > org.apache.commons.pool2.impl.BaseGenericObjectPool$Evictor@5ba26eb0 > org.apache.commons.pool2.impl.BaseGenericObjectPool$Evictor@435e60ff > org.apache.commons.pool2.impl.BaseGenericObjectPool$Evictor@17d32e9b > org.apache.commons.pool2.impl.BaseGenericObjectPool$Evictor@66f0548d > org.apache.commons.pool2.impl.BaseGenericObjectPool$Evictor@2e6f610d > org.apache.commons.pool2.impl.BaseGenericObjectPool$Evictor@1e86a5a7 > org.apache.commons.pool2.impl.BaseGenericObjectPool$Evictor@10afe71a > org.apache.commons.pool2.impl.BaseGenericObjectPool$Evictor@741f8dbe > org.apache.commons.pool2.impl.BaseGenericObjectPool$Evictor@212dfd39 > org.apache.commons.pool2.impl.BaseGenericObjectPool$Evictor@a2ddf26 > org.apache.commons.pool2.impl.BaseGenericObjectPool$Evictor@49ede9c7 > org.apache.commons.pool2.impl.BaseGenericObjectPool$Evictor@65d57e4e > org.apache.commons.pool2.impl.BaseGenericObjectPool$Evictor@6daf7d37 > *Method calls:* > pool.close() -> > stopEvictor(); -> > startEvictor(Duration.ofMillis(-1L)); -> > EvictionTimer.cancel(evictor, evictorShutdownTimeoutDuration, false); -> > -- This message was sent by Atlassian Jira (v8.20.1#820001)