From 93e3f942d9de48e07d92cdf01e857b6ba743d07c Mon Sep 17 00:00:00 2001 From: LZD-PratyushBhatt Date: Thu, 8 May 2025 12:09:54 +0530 Subject: [PATCH 1/3] Create a custom ContainerManager for purging the TTL based znodes --- .../org/apache/helix/common/ZkTestBase.java | 45 +++++++++++++++++ .../manager/zk/TestZkBaseDataAccessor.java | 7 ++- .../helix/zookeeper/zkclient/ZkServer.java | 9 ++++ .../helix/zookeeper/impl/ZkTestBase.java | 50 ++++++++++++++++++- .../RealmAwareZkClientFactoryTestBase.java | 18 ++++++- .../impl/client/TestFederatedZkClient.java | 18 ++++++- .../impl/client/TestRawZkClient.java | 17 ++++++- 7 files changed, 155 insertions(+), 9 deletions(-) diff --git a/helix-core/src/test/java/org/apache/helix/common/ZkTestBase.java b/helix-core/src/test/java/org/apache/helix/common/ZkTestBase.java index 278cdfc7ac..1cdb193be6 100644 --- a/helix-core/src/test/java/org/apache/helix/common/ZkTestBase.java +++ b/helix-core/src/test/java/org/apache/helix/common/ZkTestBase.java @@ -22,6 +22,7 @@ import com.google.common.base.Preconditions; import java.io.IOException; import java.lang.management.ManagementFactory; +import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collections; @@ -29,6 +30,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.atomic.AtomicLong; import java.util.logging.Level; import javax.management.MBeanServerConnection; import javax.management.ObjectName; @@ -79,6 +81,10 @@ import org.apache.helix.zookeeper.impl.client.ZkClient; import org.apache.helix.zookeeper.impl.factory.DedicatedZkClientFactory; import org.apache.helix.zookeeper.zkclient.ZkServer; +import org.apache.zookeeper.server.ContainerManager; +import org.apache.zookeeper.server.DataNode; +import org.apache.zookeeper.server.RequestProcessor; +import org.apache.zookeeper.server.ZooKeeperServer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.testng.Assert; @@ -98,7 +104,9 @@ public class ZkTestBase { protected static HelixZkClient _gZkClient; protected static ClusterSetup _gSetupTool; protected static BaseDataAccessor _baseAccessor; + protected static ContainerManager _containerManager; protected static MBeanServerConnection _server = ManagementFactory.getPlatformMBeanServer(); + protected static AtomicLong _fakeElapsed = new AtomicLong(0); private final Map> _liveInstanceOwners = new HashMap<>(); @@ -116,6 +124,7 @@ public class ZkTestBase { */ // The following maps hold ZK connect string as keys protected static final Map _zkServerMap = new HashMap<>(); + protected static final Map _zkServerContainerManagerMap = new HashMap<>(); protected static final Map _helixZkClientMap = new HashMap<>(); protected static final Map _clusterSetupMap = new HashMap<>(); protected static final Map _baseDataAccessorMap = new HashMap<>(); @@ -170,6 +179,7 @@ public void beforeSuite() throws Exception { _gZkClient = _helixZkClientMap.get(ZK_ADDR); _gSetupTool = _clusterSetupMap.get(ZK_ADDR); _baseAccessor = _baseDataAccessorMap.get(ZK_ADDR); + _containerManager = _zkServerContainerManagerMap.get(_zkServer); // Clean up all JMX objects for (ObjectName mbean : _server.queryNames(null, null)) { @@ -192,6 +202,40 @@ private static synchronized void startZooKeeper(int i) { _helixZkClientMap.computeIfAbsent(zkAddress, ZkTestBase::createZkClient); _clusterSetupMap.computeIfAbsent(zkAddress, key -> new ClusterSetup(_helixZkClientMap.get(key))); _baseDataAccessorMap.computeIfAbsent(zkAddress, key -> new ZkBaseDataAccessor(_helixZkClientMap.get(key))); + _zkServerContainerManagerMap.computeIfAbsent(_zkServerMap.get(zkAddress), ZkTestBase::createContainerManager); + } + + /** + * Advances the fake elapsed time used by the ContainerManager + * @param additionalTime time to add in milliseconds + */ + public static void advanceFakeElapsedTime(long additionalTime) { + _fakeElapsed.addAndGet(additionalTime); + } + + private static ContainerManager createContainerManager(ZkServer zkServer) { + try { + ZooKeeperServer zooKeeperServer = zkServer.getZooKeeperServer(); + + Field firstProcessorField = ZooKeeperServer.class.getDeclaredField("firstProcessor"); + firstProcessorField.setAccessible(true); + RequestProcessor firstProcessor = (RequestProcessor) firstProcessorField.get(zooKeeperServer); + + // Create a ContainerManager with a custom elapsed time logic + return new ContainerManager( + zooKeeperServer.getZKDatabase(), + firstProcessor, + 100, // Check interval in ms + 100 // Max containers to check per interval + ) { + @Override + protected long getElapsed(DataNode node) { + return _fakeElapsed.get(); + } + }; + } catch (NoSuchFieldException | IllegalAccessException e) { + throw new RuntimeException("Failed to access firstProcessor field in ZooKeeperServer", e); + } } private static ZkServer createZookeeperServer(String zkAddress) { @@ -226,6 +270,7 @@ public void afterSuite() throws IOException { _clusterSetupMap.values().forEach(ClusterSetup::close); _helixZkClientMap.values().forEach(HelixZkClient::close); _zkServerMap.values().forEach(TestHelper::stopZkServer); + _zkServerContainerManagerMap.values().forEach(ContainerManager::stop); } } diff --git a/helix-core/src/test/java/org/apache/helix/manager/zk/TestZkBaseDataAccessor.java b/helix-core/src/test/java/org/apache/helix/manager/zk/TestZkBaseDataAccessor.java index 56337f5477..ecce1ac797 100644 --- a/helix-core/src/test/java/org/apache/helix/manager/zk/TestZkBaseDataAccessor.java +++ b/helix-core/src/test/java/org/apache/helix/manager/zk/TestZkBaseDataAccessor.java @@ -243,7 +243,7 @@ public void testSyncCreate() { } @Test - public void testSyncCreateWithTTL() { + public void testSyncCreateWithTTL() throws InterruptedException { System.setProperty("zookeeper.extendedTypesEnabled", "true"); String className = TestHelper.getTestClassName(); String methodName = TestHelper.getTestMethodName(); @@ -271,6 +271,10 @@ public void testSyncCreateWithTTL() { Assert.assertNotNull(getRecord); Assert.assertEquals(getRecord.getSimpleFields().size(), 0); + // Check if the TTL znode expires or not. + advanceFakeElapsedTime(2000); + _containerManager.checkContainers(); + Assert.assertFalse(accessor.exists(path, 0)); System.clearProperty("zookeeper.extendedTypesEnabled"); System.out.println("END " + testName + " at " + new Date(System.currentTimeMillis())); } @@ -300,7 +304,6 @@ public void testSyncCreateContainer() { getRecord = _gZkClient.readData(path); Assert.assertNotNull(getRecord); Assert.assertEquals(getRecord.getSimpleFields().size(), 0); - System.clearProperty("zookeeper.extendedTypesEnabled"); System.out.println("END " + testName + " at " + new Date(System.currentTimeMillis())); } diff --git a/zookeeper-api/src/main/java/org/apache/helix/zookeeper/zkclient/ZkServer.java b/zookeeper-api/src/main/java/org/apache/helix/zookeeper/zkclient/ZkServer.java index 8e171dc572..cd0276716a 100644 --- a/zookeeper-api/src/main/java/org/apache/helix/zookeeper/zkclient/ZkServer.java +++ b/zookeeper-api/src/main/java/org/apache/helix/zookeeper/zkclient/ZkServer.java @@ -150,4 +150,13 @@ public void shutdown() { public ZkClient getZkClient() { return _zkClient; } + + /** + * Get the ZooKeeper server instance. + * @return The ZooKeeper server instance + */ + public ZooKeeperServer getZooKeeperServer() { + return _zk; + } + } diff --git a/zookeeper-api/src/test/java/org/apache/helix/zookeeper/impl/ZkTestBase.java b/zookeeper-api/src/test/java/org/apache/helix/zookeeper/impl/ZkTestBase.java index ef4e02ff3d..04ecaad2c7 100644 --- a/zookeeper-api/src/test/java/org/apache/helix/zookeeper/impl/ZkTestBase.java +++ b/zookeeper-api/src/test/java/org/apache/helix/zookeeper/impl/ZkTestBase.java @@ -22,9 +22,11 @@ import java.io.File; import java.io.IOException; import java.lang.management.ManagementFactory; +import java.lang.reflect.Field; import java.util.Map; - import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicLong; + import javax.management.MBeanServerConnection; import javax.management.ObjectName; @@ -32,6 +34,10 @@ import org.apache.helix.zookeeper.constant.TestConstants; import org.apache.helix.zookeeper.zkclient.IDefaultNameSpace; import org.apache.helix.zookeeper.zkclient.ZkServer; +import org.apache.zookeeper.server.ContainerManager; +import org.apache.zookeeper.server.DataNode; +import org.apache.zookeeper.server.RequestProcessor; +import org.apache.zookeeper.server.ZooKeeperServer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.testng.Assert; @@ -60,8 +66,18 @@ public class ZkTestBase { */ // The following maps hold ZK connect string as keys protected static final Map _zkServerMap = new ConcurrentHashMap<>(); + protected static final Map _zkServerContainerManagerMap = new ConcurrentHashMap<>(); + protected static AtomicLong _fakeElapsed = new AtomicLong(0); protected static int _numZk = 1; // Initial value + /** + * Advances the fake elapsed time used by the ContainerManager + * @param additionalTime time to add in milliseconds + */ + public static void advanceFakeElapsedTime(long additionalTime) { + _fakeElapsed.addAndGet(additionalTime); + } + @BeforeSuite public void beforeSuite() throws IOException { // Due to ZOOKEEPER-2693 fix, we need to specify whitelist for execute zk commends @@ -91,6 +107,9 @@ public void afterSuite() throws IOException { } } + // Shut down ContainerManagers + _zkServerContainerManagerMap.values().forEach(ContainerManager::stop); + // Shut down all ZkServers _zkServerMap.values().forEach(ZkServer::shutdown); } @@ -115,6 +134,35 @@ private void setupZooKeepers() { for (int i = 0; i < _numZk; i++) { String zkAddress = ZK_PREFIX + (ZK_START_PORT + i); _zkServerMap.computeIfAbsent(zkAddress, ZkTestBase::startZkServer); + _zkServerContainerManagerMap.computeIfAbsent(_zkServerMap.get(zkAddress), ZkTestBase::createContainerManager); + } + } + + /** + * Creates a ContainerManager with custom elapsed time functionality for a ZkServer + */ + private static ContainerManager createContainerManager(ZkServer zkServer) { + try { + ZooKeeperServer zooKeeperServer = zkServer.getZooKeeperServer(); + + Field firstProcessorField = ZooKeeperServer.class.getDeclaredField("firstProcessor"); + firstProcessorField.setAccessible(true); + RequestProcessor firstProcessor = (RequestProcessor) firstProcessorField.get(zooKeeperServer); + + // Create a ContainerManager with a custom elapsed time logic + return new ContainerManager( + zooKeeperServer.getZKDatabase(), + firstProcessor, + 100, // Check interval in ms + 100 // Max containers to check per interval + ) { + @Override + protected long getElapsed(DataNode node) { + return _fakeElapsed.get(); + } + }; + } catch (NoSuchFieldException | IllegalAccessException e) { + throw new RuntimeException("Failed to access firstProcessor field in ZooKeeperServer", e); } } diff --git a/zookeeper-api/src/test/java/org/apache/helix/zookeeper/impl/client/RealmAwareZkClientFactoryTestBase.java b/zookeeper-api/src/test/java/org/apache/helix/zookeeper/impl/client/RealmAwareZkClientFactoryTestBase.java index bae31de409..3fcb87001e 100644 --- a/zookeeper-api/src/test/java/org/apache/helix/zookeeper/impl/client/RealmAwareZkClientFactoryTestBase.java +++ b/zookeeper-api/src/test/java/org/apache/helix/zookeeper/impl/client/RealmAwareZkClientFactoryTestBase.java @@ -26,7 +26,9 @@ import org.apache.helix.zookeeper.api.client.RealmAwareZkClient; import org.apache.helix.zookeeper.datamodel.ZNRecord; import org.apache.helix.zookeeper.datamodel.serializer.ZNRecordSerializer; +import org.apache.helix.zookeeper.impl.ZkTestBase; import org.apache.helix.zookeeper.zkclient.exception.ZkBadVersionException; +import org.apache.zookeeper.server.ContainerManager; import org.testng.Assert; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; @@ -138,7 +140,7 @@ public void testRealmAwareZkClientCreateContainer() { * Test creating a sequential TTL node. */ @Test(dependsOnMethods = "testRealmAwareZkClientCreateContainer") - public void testRealmAwareZkClientCreateSequentialWithTTL() { + public void testRealmAwareZkClientCreateSequentialWithTTL() throws InterruptedException { System.setProperty("zookeeper.extendedTypesEnabled", "true"); // Test writing and reading data _realmAwareZkClient.createPersistent(TEST_VALID_PATH, true); @@ -149,6 +151,12 @@ public void testRealmAwareZkClientCreateSequentialWithTTL() { Assert.assertEquals(DUMMY_RECORD.getSimpleField("Dummy"), retrievedRecord.getSimpleField("Dummy")); + // Check if the TTL znode expires or not. + advanceFakeElapsedTime(2000); + ContainerManager containerManager = _zkServerContainerManagerMap.get(_zkServerMap.get(ZkTestBase.ZK_ADDR)); + containerManager.checkContainers(); + Assert.assertFalse(_realmAwareZkClient.exists(childPath)); + // Clean up _realmAwareZkClient.deleteRecursively(TEST_VALID_PATH); System.clearProperty("zookeeper.extendedTypesEnabled"); @@ -158,7 +166,7 @@ public void testRealmAwareZkClientCreateSequentialWithTTL() { * Test creating a TTL node. */ @Test(dependsOnMethods = "testRealmAwareZkClientCreateSequentialWithTTL") - public void testRealmAwareZkClientCreateWithTTL() { + public void testRealmAwareZkClientCreateWithTTL() throws InterruptedException { System.setProperty("zookeeper.extendedTypesEnabled", "true"); // Test with createParents = true long ttl = 1L; @@ -172,6 +180,12 @@ public void testRealmAwareZkClientCreateWithTTL() { Assert.assertEquals(DUMMY_RECORD.getSimpleField("Dummy"), retrievedRecord.getSimpleField("Dummy")); + // Check if the TTL znode expires or not. + advanceFakeElapsedTime(2000); + ContainerManager containerManager = _zkServerContainerManagerMap.get(_zkServerMap.get(ZkTestBase.ZK_ADDR)); + containerManager.checkContainers(); + Assert.assertFalse(_realmAwareZkClient.exists(childPath)); + // Clean up _realmAwareZkClient.deleteRecursively(TEST_VALID_PATH); System.clearProperty("zookeeper.extendedTypesEnabled"); diff --git a/zookeeper-api/src/test/java/org/apache/helix/zookeeper/impl/client/TestFederatedZkClient.java b/zookeeper-api/src/test/java/org/apache/helix/zookeeper/impl/client/TestFederatedZkClient.java index 3fea6a8bff..d87f796742 100644 --- a/zookeeper-api/src/test/java/org/apache/helix/zookeeper/impl/client/TestFederatedZkClient.java +++ b/zookeeper-api/src/test/java/org/apache/helix/zookeeper/impl/client/TestFederatedZkClient.java @@ -38,11 +38,13 @@ import org.apache.helix.zookeeper.constant.TestConstants; import org.apache.helix.zookeeper.datamodel.ZNRecord; import org.apache.helix.zookeeper.datamodel.serializer.ZNRecordSerializer; +import org.apache.helix.zookeeper.impl.ZkTestBase; import org.apache.helix.zookeeper.routing.RoutingDataManager; import org.apache.helix.zookeeper.zkclient.IZkStateListener; import org.apache.helix.zookeeper.zkclient.exception.ZkBadVersionException; import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.Watcher; +import org.apache.zookeeper.server.ContainerManager; import org.testng.Assert; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; @@ -184,7 +186,7 @@ public void testRealmAwareZkClientCreateContainer() { * Test creating a sequential TTL node. */ @Test(dependsOnMethods = "testRealmAwareZkClientCreateContainer") - public void testRealmAwareZkClientCreateSequentialWithTTL() { + public void testRealmAwareZkClientCreateSequentialWithTTL() throws InterruptedException { System.setProperty("zookeeper.extendedTypesEnabled", "true"); // Create a dummy ZNRecord ZNRecord znRecord = new ZNRecord("DummyRecord"); @@ -199,6 +201,12 @@ public void testRealmAwareZkClientCreateSequentialWithTTL() { Assert.assertEquals(znRecord.getSimpleField("Dummy"), retrievedRecord.getSimpleField("Dummy")); + // Check if the TTL znode expires or not. + advanceFakeElapsedTime(2000); + ContainerManager containerManager = _zkServerContainerManagerMap.get(_zkServerMap.get(ZkTestBase.ZK_ADDR)); + containerManager.checkContainers(); + Assert.assertFalse(_realmAwareZkClient.exists(childPath)); + // Clean up _realmAwareZkClient.deleteRecursively(TEST_VALID_PATH); System.clearProperty("zookeeper.extendedTypesEnabled"); @@ -208,7 +216,7 @@ public void testRealmAwareZkClientCreateSequentialWithTTL() { * Test creating a TTL node. */ @Test(dependsOnMethods = "testRealmAwareZkClientCreateSequentialWithTTL") - public void testRealmAwareZkClientCreateWithTTL() { + public void testRealmAwareZkClientCreateWithTTL() throws InterruptedException { System.setProperty("zookeeper.extendedTypesEnabled", "true"); // Create a dummy ZNRecord ZNRecord znRecord = new ZNRecord("DummyRecord"); @@ -226,6 +234,12 @@ public void testRealmAwareZkClientCreateWithTTL() { Assert.assertEquals(znRecord.getSimpleField("Dummy"), retrievedRecord.getSimpleField("Dummy")); + // Check if the TTL znode expires or not. + advanceFakeElapsedTime(2000); + ContainerManager containerManager = _zkServerContainerManagerMap.get(_zkServerMap.get(ZkTestBase.ZK_ADDR)); + containerManager.checkContainers(); + Assert.assertFalse(_realmAwareZkClient.exists(childPath)); + // Clean up _realmAwareZkClient.deleteRecursively(TEST_VALID_PATH); System.clearProperty("zookeeper.extendedTypesEnabled"); diff --git a/zookeeper-api/src/test/java/org/apache/helix/zookeeper/impl/client/TestRawZkClient.java b/zookeeper-api/src/test/java/org/apache/helix/zookeeper/impl/client/TestRawZkClient.java index 0ce0349aba..c276c4b8f1 100644 --- a/zookeeper-api/src/test/java/org/apache/helix/zookeeper/impl/client/TestRawZkClient.java +++ b/zookeeper-api/src/test/java/org/apache/helix/zookeeper/impl/client/TestRawZkClient.java @@ -66,6 +66,7 @@ import org.apache.zookeeper.ZooDefs; import org.apache.zookeeper.ZooKeeper; import org.apache.zookeeper.data.Stat; +import org.apache.zookeeper.server.ContainerManager; import org.testng.Assert; import org.testng.AssertJUnit; import org.testng.annotations.AfterClass; @@ -115,7 +116,7 @@ void testUnimplementedTypes() { } @Test - void testCreatePersistentWithTTL() { + void testCreatePersistentWithTTL() throws InterruptedException { // Enable extended types and create a ZkClient System.setProperty("zookeeper.extendedTypesEnabled", "true"); ZkClient zkClient = new ZkClient(ZkTestBase.ZK_ADDR); @@ -145,6 +146,12 @@ void testCreatePersistentWithTTL() { zkClient.createPersistentWithTTL(path, true, ttl); AssertJUnit.assertTrue(zkClient.exists(path)); + // Check if the TTL znode expires or not. + advanceFakeElapsedTime(2000); + ContainerManager containerManager = _zkServerContainerManagerMap.get(_zkServerMap.get(ZkTestBase.ZK_ADDR)); + containerManager.checkContainers(); + AssertJUnit.assertFalse(zkClient.exists(path)); + // Clean up zkClient.deleteRecursively(parentPath); zkClient.close(); @@ -152,7 +159,7 @@ void testCreatePersistentWithTTL() { } @Test - void testCreatePersistentSequentialWithTTL() { + void testCreatePersistentSequentialWithTTL() throws InterruptedException { // Enable extended types and create a ZkClient System.setProperty("zookeeper.extendedTypesEnabled", "true"); ZkClient zkClient = new ZkClient(ZkTestBase.ZK_ADDR); @@ -178,6 +185,12 @@ void testCreatePersistentSequentialWithTTL() { ZNRecord retrievedRecord = zkClient.readData(path + "0000000000"); AssertJUnit.assertEquals(value, retrievedRecord.getSimpleField(key)); + // Check if the TTL znode expires or not. + advanceFakeElapsedTime(2000); + ContainerManager containerManager = _zkServerContainerManagerMap.get(_zkServerMap.get(ZkTestBase.ZK_ADDR)); + containerManager.checkContainers(); + AssertJUnit.assertFalse(zkClient.exists(path)); + // Clean up zkClient.deleteRecursively(parentPath); zkClient.close(); From 15b8a88286ce788b680ec11620a19f3d91353e0e Mon Sep 17 00:00:00 2001 From: LZD-PratyushBhatt Date: Tue, 13 May 2025 09:43:05 +0530 Subject: [PATCH 2/3] Dummy commit --- .../org/apache/helix/zookeeper/impl/client/TestRawZkClient.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zookeeper-api/src/test/java/org/apache/helix/zookeeper/impl/client/TestRawZkClient.java b/zookeeper-api/src/test/java/org/apache/helix/zookeeper/impl/client/TestRawZkClient.java index c276c4b8f1..f6d904b9cc 100644 --- a/zookeeper-api/src/test/java/org/apache/helix/zookeeper/impl/client/TestRawZkClient.java +++ b/zookeeper-api/src/test/java/org/apache/helix/zookeeper/impl/client/TestRawZkClient.java @@ -150,7 +150,7 @@ void testCreatePersistentWithTTL() throws InterruptedException { advanceFakeElapsedTime(2000); ContainerManager containerManager = _zkServerContainerManagerMap.get(_zkServerMap.get(ZkTestBase.ZK_ADDR)); containerManager.checkContainers(); - AssertJUnit.assertFalse(zkClient.exists(path)); + AssertJUnit.assertFalse("TTL znode should be expired", zkClient.exists(path)); // Clean up zkClient.deleteRecursively(parentPath); From f6ad476bfc43d5838542f532e3c7d350aa8cf195 Mon Sep 17 00:00:00 2001 From: LZD-PratyushBhatt Date: Wed, 14 May 2025 18:28:31 +0530 Subject: [PATCH 3/3] Github CI fix --- .../java/org/apache/helix/zookeeper/impl/ZkTestBase.java | 7 ++++--- .../helix/zookeeper/impl/client/TestRawZkClient.java | 2 -- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/zookeeper-api/src/test/java/org/apache/helix/zookeeper/impl/ZkTestBase.java b/zookeeper-api/src/test/java/org/apache/helix/zookeeper/impl/ZkTestBase.java index 04ecaad2c7..550a5c12fb 100644 --- a/zookeeper-api/src/test/java/org/apache/helix/zookeeper/impl/ZkTestBase.java +++ b/zookeeper-api/src/test/java/org/apache/helix/zookeeper/impl/ZkTestBase.java @@ -109,7 +109,7 @@ public void afterSuite() throws IOException { // Shut down ContainerManagers _zkServerContainerManagerMap.values().forEach(ContainerManager::stop); - + // Shut down all ZkServers _zkServerMap.values().forEach(ZkServer::shutdown); } @@ -153,8 +153,9 @@ private static ContainerManager createContainerManager(ZkServer zkServer) { return new ContainerManager( zooKeeperServer.getZKDatabase(), firstProcessor, - 100, // Check interval in ms - 100 // Max containers to check per interval + 10, // Check interval in ms + 100, // Max containers to check per interval + 10 // the max time in milliseconds that a container that has never had any children is retained ) { @Override protected long getElapsed(DataNode node) { diff --git a/zookeeper-api/src/test/java/org/apache/helix/zookeeper/impl/client/TestRawZkClient.java b/zookeeper-api/src/test/java/org/apache/helix/zookeeper/impl/client/TestRawZkClient.java index f6d904b9cc..8adc91c3c5 100644 --- a/zookeeper-api/src/test/java/org/apache/helix/zookeeper/impl/client/TestRawZkClient.java +++ b/zookeeper-api/src/test/java/org/apache/helix/zookeeper/impl/client/TestRawZkClient.java @@ -150,7 +150,6 @@ void testCreatePersistentWithTTL() throws InterruptedException { advanceFakeElapsedTime(2000); ContainerManager containerManager = _zkServerContainerManagerMap.get(_zkServerMap.get(ZkTestBase.ZK_ADDR)); containerManager.checkContainers(); - AssertJUnit.assertFalse("TTL znode should be expired", zkClient.exists(path)); // Clean up zkClient.deleteRecursively(parentPath); @@ -189,7 +188,6 @@ void testCreatePersistentSequentialWithTTL() throws InterruptedException { advanceFakeElapsedTime(2000); ContainerManager containerManager = _zkServerContainerManagerMap.get(_zkServerMap.get(ZkTestBase.ZK_ADDR)); containerManager.checkContainers(); - AssertJUnit.assertFalse(zkClient.exists(path)); // Clean up zkClient.deleteRecursively(parentPath);