diff --git a/zookeeper-docs/src/main/resources/markdown/zookeeperAdmin.md b/zookeeper-docs/src/main/resources/markdown/zookeeperAdmin.md index a4fccf1f94e..066366486f2 100644 --- a/zookeeper-docs/src/main/resources/markdown/zookeeperAdmin.md +++ b/zookeeper-docs/src/main/resources/markdown/zookeeperAdmin.md @@ -2146,8 +2146,9 @@ Both subsystems need to have sufficient amount of threads to achieve peak read t maximum interval in milliseconds that a container that has never had any children is retained. Should be long enough for your client to create the container, do any needed work and then create children. - Default is "0" which is used to indicate that containers - that have never had any children are never deleted. + Default is "300000"(a.k.a. 5 minutes) since 3.10.0, for earlier versions, + it is "0" which is used to indicate that containers that have never had + any children are never deleted. diff --git a/zookeeper-server/src/main/java/org/apache/zookeeper/server/ContainerManager.java b/zookeeper-server/src/main/java/org/apache/zookeeper/server/ContainerManager.java index 2b8371fcc78..aa73ec45fe1 100644 --- a/zookeeper-server/src/main/java/org/apache/zookeeper/server/ContainerManager.java +++ b/zookeeper-server/src/main/java/org/apache/zookeeper/server/ContainerManager.java @@ -50,6 +50,20 @@ public class ContainerManager { private final Timer timer; private final AtomicReference task = new AtomicReference<>(null); + /** + * @param zkDb the ZK database + * @param requestProcessor request processor - used to inject delete + * container requests + */ + public ContainerManager(ZKDatabase zkDb, RequestProcessor requestProcessor) { + this( + zkDb, requestProcessor, + Integer.getInteger("znode.container.checkIntervalMs", (int) TimeUnit.MINUTES.toMillis(1)), + Integer.getInteger("znode.container.maxPerMinute", 10000), + Long.getLong("znode.container.maxNeverUsedIntervalMs", TimeUnit.MINUTES.toMillis(5)) + ); + } + /** * @param zkDb the ZK database * @param requestProcessor request processor - used to inject delete diff --git a/zookeeper-server/src/main/java/org/apache/zookeeper/server/ZooKeeperServerMain.java b/zookeeper-server/src/main/java/org/apache/zookeeper/server/ZooKeeperServerMain.java index 24e7f5b180e..ad9930bd505 100644 --- a/zookeeper-server/src/main/java/org/apache/zookeeper/server/ZooKeeperServerMain.java +++ b/zookeeper-server/src/main/java/org/apache/zookeeper/server/ZooKeeperServerMain.java @@ -20,7 +20,6 @@ import java.io.IOException; import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; import javax.management.JMException; import org.apache.yetus.audience.InterfaceAudience; import org.apache.zookeeper.audit.ZKAuditProvider; @@ -168,13 +167,7 @@ public void runFromConfig(ServerConfig config) throws IOException, AdminServerEx secureCnxnFactory.startup(zkServer, needStartZKServer); } - containerManager = new ContainerManager( - zkServer.getZKDatabase(), - zkServer.firstProcessor, - Integer.getInteger("znode.container.checkIntervalMs", (int) TimeUnit.MINUTES.toMillis(1)), - Integer.getInteger("znode.container.maxPerMinute", 10000), - Long.getLong("znode.container.maxNeverUsedIntervalMs", 0) - ); + containerManager = new ContainerManager(zkServer.getZKDatabase(), zkServer.firstProcessor); containerManager.start(); ZKAuditProvider.addZKStartStopAuditLog(); diff --git a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/LeaderZooKeeperServer.java b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/LeaderZooKeeperServer.java index 799b8f96148..1a3c15aeafe 100644 --- a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/LeaderZooKeeperServer.java +++ b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/LeaderZooKeeperServer.java @@ -19,7 +19,6 @@ package org.apache.zookeeper.server.quorum; import java.io.IOException; -import java.util.concurrent.TimeUnit; import java.util.function.Function; import javax.management.JMException; import org.apache.zookeeper.KeeperException.SessionExpiredException; @@ -78,13 +77,7 @@ protected void setupRequestProcessors() { } private synchronized void setupContainerManager() { - containerManager = new ContainerManager( - getZKDatabase(), - prepRequestProcessor, - Integer.getInteger("znode.container.checkIntervalMs", (int) TimeUnit.MINUTES.toMillis(1)), - Integer.getInteger("znode.container.maxPerMinute", 10000), - Long.getLong("znode.container.maxNeverUsedIntervalMs", 0) - ); + containerManager = new ContainerManager(getZKDatabase(), prepRequestProcessor); } @Override