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