This is an automated email from the ASF dual-hosted git repository. jiajunwang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/helix.git
commit 2bc809f0324e4c3621921070fadeea8af5e3e6a7 Author: Jiajun Wang <[email protected]> AuthorDate: Tue Aug 31 10:24:05 2021 -0700 Improve TestControllerLeadershipChange test logic to tolerate longer delay when test runs. (#1853) Change the assert condition to consider real test script execute delay to avoid test failure due to slow test runs. --- .../controller/TestControllerLeadershipChange.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/helix-core/src/test/java/org/apache/helix/integration/controller/TestControllerLeadershipChange.java b/helix-core/src/test/java/org/apache/helix/integration/controller/TestControllerLeadershipChange.java index 1de1296..379feb9 100644 --- a/helix-core/src/test/java/org/apache/helix/integration/controller/TestControllerLeadershipChange.java +++ b/helix-core/src/test/java/org/apache/helix/integration/controller/TestControllerLeadershipChange.java @@ -189,6 +189,7 @@ public class TestControllerLeadershipChange extends ZkTestBase { String resourceName = "testResource"; int numPartition = 1; int numReplica = 1; + int simulatedTransitionDelayMs = 100; String stateModel = "LeaderStandby"; ObjectName resourceMBeanObjectName = getResourceMonitorObjectName(clusterName, resourceName); MBeanServer beanServer = ManagementFactory.getPlatformMBeanServer(); @@ -205,7 +206,7 @@ public class TestControllerLeadershipChange extends ZkTestBase { // Create participant _gSetupTool.addInstanceToCluster(clusterName, instanceName); MockParticipantManager participant = - new MockParticipantManager(ZK_ADDR, clusterName, instanceName); + new MockParticipantManager(ZK_ADDR, clusterName, instanceName, simulatedTransitionDelayMs); participant.syncStart(); // Create controller, since this is the only controller, it will be the leader @@ -246,6 +247,9 @@ public class TestControllerLeadershipChange extends ZkTestBase { Assert.assertTrue(clusterVerifier.verify()); Thread.sleep(1000); + + // The moment before manager1 regain leadership. The topstateless duration will start counting. + long start = System.currentTimeMillis(); setLeader(manager1); Assert.assertTrue(manager1.isLeader()); @@ -258,12 +262,19 @@ public class TestControllerLeadershipChange extends ZkTestBase { _gSetupTool.rebalanceResource(clusterName, resourceName, numReplica); Assert.assertTrue(clusterVerifier.verifyByPolling()); + // The moment that partition top state has been recovered. The topstateless duration stopped counting. + long end = System.currentTimeMillis(); // Resource lost top state, and manager1 lost leadership for 2000ms, because manager1 will // clean monitoring cache after re-gaining leadership, so max value of hand off duration should // not have such a large value - Assert.assertTrue((long) beanServer - .getAttribute(resourceMBeanObjectName, "PartitionTopStateHandoffDurationGauge.Max") < 500); + long duration = (long) beanServer + .getAttribute(resourceMBeanObjectName, "PartitionTopStateHandoffDurationGauge.Max"); + long controllerOpDuration = end - start; + Assert.assertTrue(duration >= simulatedTransitionDelayMs && duration <= controllerOpDuration, + String.format( + "The recorded TopState-less duration is %d. But the controller operation duration is %d.", + duration, controllerOpDuration)); participant.syncStop(); manager1.disconnect();
