Skip to content

Commit f9fa0cc

Browse files
authored
ZOOKEEPER-4915: Default znode.container.maxNeverUsedIntervalMs to 5 minutes
Author: kezhuw Closes #2248 from kezhuw/ZOOKEEPER-4915-znode.container.maxNeverUsedIntervalMs-default-value
1 parent 3f4c8a2 commit f9fa0cc

5 files changed

Lines changed: 52 additions & 18 deletions

File tree

zookeeper-docs/src/main/resources/markdown/zookeeperAdmin.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2160,8 +2160,9 @@ Both subsystems need to have sufficient amount of threads to achieve peak read t
21602160
maximum interval in milliseconds that a container that has never had
21612161
any children is retained. Should be long enough for your client to
21622162
create the container, do any needed work and then create children.
2163-
Default is "0" which is used to indicate that containers
2164-
that have never had any children are never deleted.
2163+
Default is "300000"(a.k.a. 5 minutes) since 3.10.0, for earlier versions,
2164+
it is "0" which is used to indicate that containers that have never had
2165+
any children are never deleted.
21652166

21662167
<a name="sc_debug_observability_config"></a>
21672168

zookeeper-server/src/main/java/org/apache/zookeeper/server/ContainerManager.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,20 @@ public class ContainerManager {
5050
private final Timer timer;
5151
private final AtomicReference<TimerTask> task = new AtomicReference<>(null);
5252

53+
/**
54+
* @param zkDb the ZK database
55+
* @param requestProcessor request processor - used to inject delete
56+
* container requests
57+
*/
58+
public ContainerManager(ZKDatabase zkDb, RequestProcessor requestProcessor) {
59+
this(
60+
zkDb, requestProcessor,
61+
Integer.getInteger("znode.container.checkIntervalMs", (int) TimeUnit.MINUTES.toMillis(1)),
62+
Integer.getInteger("znode.container.maxPerMinute", 10000),
63+
Long.getLong("znode.container.maxNeverUsedIntervalMs", TimeUnit.MINUTES.toMillis(5))
64+
);
65+
}
66+
5367
/**
5468
* @param zkDb the ZK database
5569
* @param requestProcessor request processor - used to inject delete
@@ -155,6 +169,18 @@ protected long getMinIntervalMs() {
155169
return TimeUnit.MINUTES.toMillis(1) / maxPerMinute;
156170
}
157171

172+
int getMaxPerMinute() {
173+
return maxPerMinute;
174+
}
175+
176+
int getCheckIntervalMs() {
177+
return checkIntervalMs;
178+
}
179+
180+
long getMaxNeverUsedIntervalMs() {
181+
return maxNeverUsedIntervalMs;
182+
}
183+
158184
// VisibleForTesting
159185
protected Collection<String> getCandidates() {
160186
Set<String> candidates = new HashSet<>();

zookeeper-server/src/main/java/org/apache/zookeeper/server/ZooKeeperServerMain.java

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020

2121
import java.io.IOException;
2222
import java.util.concurrent.CountDownLatch;
23-
import java.util.concurrent.TimeUnit;
2423
import javax.management.JMException;
2524
import org.apache.yetus.audience.InterfaceAudience;
2625
import org.apache.zookeeper.audit.ZKAuditProvider;
@@ -168,13 +167,7 @@ public void runFromConfig(ServerConfig config) throws IOException, AdminServerEx
168167
secureCnxnFactory.startup(zkServer, needStartZKServer);
169168
}
170169

171-
containerManager = new ContainerManager(
172-
zkServer.getZKDatabase(),
173-
zkServer.firstProcessor,
174-
Integer.getInteger("znode.container.checkIntervalMs", (int) TimeUnit.MINUTES.toMillis(1)),
175-
Integer.getInteger("znode.container.maxPerMinute", 10000),
176-
Long.getLong("znode.container.maxNeverUsedIntervalMs", 0)
177-
);
170+
containerManager = new ContainerManager(zkServer.getZKDatabase(), zkServer.firstProcessor);
178171
containerManager.start();
179172
ZKAuditProvider.addZKStartStopAuditLog();
180173

zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/LeaderZooKeeperServer.java

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
package org.apache.zookeeper.server.quorum;
2020

2121
import java.io.IOException;
22-
import java.util.concurrent.TimeUnit;
2322
import java.util.function.Function;
2423
import javax.management.JMException;
2524
import org.apache.zookeeper.KeeperException.SessionExpiredException;
@@ -78,13 +77,7 @@ protected void setupRequestProcessors() {
7877
}
7978

8079
private synchronized void setupContainerManager() {
81-
containerManager = new ContainerManager(
82-
getZKDatabase(),
83-
prepRequestProcessor,
84-
Integer.getInteger("znode.container.checkIntervalMs", (int) TimeUnit.MINUTES.toMillis(1)),
85-
Integer.getInteger("znode.container.maxPerMinute", 10000),
86-
Long.getLong("znode.container.maxNeverUsedIntervalMs", 0)
87-
);
80+
containerManager = new ContainerManager(getZKDatabase(), prepRequestProcessor);
8881
}
8982

9083
@Override

zookeeper-server/src/test/java/org/apache/zookeeper/server/CreateContainerTest.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import static org.junit.jupiter.api.Assertions.assertTrue;
2626
import static org.junit.jupiter.api.Assertions.fail;
2727
import java.io.IOException;
28+
import java.time.Duration;
2829
import java.util.Arrays;
2930
import java.util.Collection;
3031
import java.util.Collections;
@@ -77,10 +78,30 @@ public void addCommittedProposal(Request request) {
7778
@AfterEach
7879
@Override
7980
public void tearDown() throws Exception {
81+
System.clearProperty("znode.container.checkIntervalMs");
82+
System.clearProperty("znode.container.maxPerMinute");
83+
System.clearProperty("znode.container.maxNeverUsedInterval");
84+
8085
super.tearDown();
8186
zk.close();
8287
}
8388

89+
@Test
90+
public void testContainerManagerDefaults() {
91+
ContainerManager containerManager = new ContainerManager(serverFactory.getZooKeeperServer().getZKDatabase(), serverFactory.getZooKeeperServer().firstProcessor);
92+
assertEquals((int) Duration.ofMinutes(1).toMillis(), containerManager.getCheckIntervalMs());
93+
assertEquals(10000, containerManager.getMaxPerMinute());
94+
assertEquals((int) Duration.ofMinutes(5).toMillis(), containerManager.getMaxNeverUsedIntervalMs());
95+
96+
System.setProperty("znode.container.checkIntervalMs", "1000");
97+
System.setProperty("znode.container.maxPerMinute", "1000");
98+
System.setProperty("znode.container.maxNeverUsedIntervalMs", "10000");
99+
containerManager = new ContainerManager(serverFactory.getZooKeeperServer().getZKDatabase(), serverFactory.getZooKeeperServer().firstProcessor);
100+
assertEquals(1000, containerManager.getCheckIntervalMs());
101+
assertEquals(1000, containerManager.getMaxPerMinute());
102+
assertEquals(10000, containerManager.getMaxNeverUsedIntervalMs());
103+
}
104+
84105
@Test
85106
@Timeout(value = 30)
86107
public void testCreate() throws KeeperException, InterruptedException {

0 commit comments

Comments
 (0)