You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by mc...@apache.org on 2019/07/03 22:41:55 UTC

[incubator-pinot] branch increase-wait-time updated: Gracefully shutdown helix manager instances created for fake participants

This is an automated email from the ASF dual-hosted git repository.

mcvsubbu pushed a commit to branch increase-wait-time
in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git


The following commit(s) were added to refs/heads/increase-wait-time by this push:
     new 328875f  Gracefully shutdown helix manager instances created for fake participants
328875f is described below

commit 328875f731a698f15a524012ca58a0f5d44d43c9
Author: Subbu Subramaniam <ss...@linkedin.com>
AuthorDate: Wed Jul 3 15:27:49 2019 -0700

    Gracefully shutdown helix manager instances created for fake participants
---
 .../broker/broker/HelixBrokerStarterTest.java      |   8 +-
 .../helix/ControllerRequestBuilderUtil.java        | 105 ---------------------
 ...questBuilderUtil.java => FakeHelixClients.java} |  68 ++++++-------
 .../api/resources/PinotFileUploadTest.java         |   9 +-
 .../resources/PinotSegmentRestletResourceTest.java |   9 +-
 .../resources/PinotTableRestletResourceTest.java   |   9 +-
 .../resources/PinotTenantRestletResourceTest.java  |   9 +-
 .../controller/api/resources/TableViewsTest.java   |   9 +-
 .../helix/ControllerInstanceToggleTest.java        |   7 +-
 .../controller/helix/ControllerSentinelTestV2.java |   7 +-
 .../controller/helix/ControllerTenantTest.java     |   7 +-
 .../controller/helix/PinotResourceManagerTest.java |   7 +-
 .../helix/core/PinotHelixResourceManagerTest.java  |   9 +-
 .../ReplicaGroupRebalanceStrategyTest.java         |  12 ++-
 .../sharding/SegmentAssignmentStrategyTest.java    |  11 ++-
 .../validation/ValidationManagerTest.java          |   9 +-
 16 files changed, 116 insertions(+), 179 deletions(-)

diff --git a/pinot-broker/src/test/java/org/apache/pinot/broker/broker/HelixBrokerStarterTest.java b/pinot-broker/src/test/java/org/apache/pinot/broker/broker/HelixBrokerStarterTest.java
index 49f5557..958be70 100644
--- a/pinot-broker/src/test/java/org/apache/pinot/broker/broker/HelixBrokerStarterTest.java
+++ b/pinot-broker/src/test/java/org/apache/pinot/broker/broker/HelixBrokerStarterTest.java
@@ -44,8 +44,8 @@ import org.apache.pinot.common.data.Schema;
 import org.apache.pinot.common.metadata.segment.OfflineSegmentZKMetadata;
 import org.apache.pinot.common.utils.CommonConstants;
 import org.apache.pinot.common.utils.ZkStarter;
-import org.apache.pinot.controller.helix.ControllerRequestBuilderUtil;
 import org.apache.pinot.controller.helix.ControllerTest;
+import org.apache.pinot.controller.helix.FakeHelixClients;
 import org.apache.pinot.controller.utils.SegmentMetadataMockUtils;
 import org.testng.Assert;
 import org.testng.annotations.AfterTest;
@@ -64,6 +64,7 @@ public class HelixBrokerStarterTest extends ControllerTest {
   private ZkClient _zkClient;
   private HelixBrokerStarter _helixBrokerStarter;
   private ZkStarter.ZookeeperInstance _zookeeperInstance;
+  private FakeHelixClients _fakeHelixClients;
 
   @BeforeTest
   public void setUp()
@@ -78,9 +79,9 @@ public class HelixBrokerStarterTest extends ControllerTest {
     _helixBrokerStarter = new HelixBrokerStarter(_brokerConf, getHelixClusterName(), ZkStarter.DEFAULT_ZK_STR);
     _helixBrokerStarter.start();
 
-    ControllerRequestBuilderUtil
+    _fakeHelixClients
         .addFakeBrokerInstancesToAutoJoinHelixCluster(getHelixClusterName(), ZkStarter.DEFAULT_ZK_STR, 5, true);
-    ControllerRequestBuilderUtil
+    _fakeHelixClients
         .addFakeDataInstancesToAutoJoinHelixCluster(getHelixClusterName(), ZkStarter.DEFAULT_ZK_STR, 1, true);
 
     while (_helixAdmin.getInstancesInClusterWithTag(getHelixClusterName(), "DefaultTenant_OFFLINE").size() == 0
@@ -131,6 +132,7 @@ public class HelixBrokerStarterTest extends ControllerTest {
 
   @AfterTest
   public void tearDown() {
+    _fakeHelixClients.shutDown();
     _helixResourceManager.stop();
     _zkClient.close();
     ZkStarter.stopLocalZkServer(_zookeeperInstance);
diff --git a/pinot-controller/src/main/java/org/apache/pinot/controller/helix/ControllerRequestBuilderUtil.java b/pinot-controller/src/main/java/org/apache/pinot/controller/helix/ControllerRequestBuilderUtil.java
index bedc11a..f00f104 100644
--- a/pinot-controller/src/main/java/org/apache/pinot/controller/helix/ControllerRequestBuilderUtil.java
+++ b/pinot-controller/src/main/java/org/apache/pinot/controller/helix/ControllerRequestBuilderUtil.java
@@ -19,20 +19,8 @@
 package org.apache.pinot.controller.helix;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
-import java.util.HashMap;
-import java.util.Map;
-import org.apache.helix.HelixManager;
-import org.apache.helix.HelixManagerFactory;
-import org.apache.helix.InstanceType;
-import org.apache.helix.model.HelixConfigScope;
-import org.apache.helix.model.builder.HelixConfigScopeBuilder;
-import org.apache.helix.participant.StateMachineEngine;
-import org.apache.helix.participant.statemachine.StateModelFactory;
-import org.apache.pinot.common.config.TableNameBuilder;
-import org.apache.pinot.common.config.TagNameUtils;
 import org.apache.pinot.common.config.Tenant;
 import org.apache.pinot.common.config.Tenant.TenantBuilder;
-import org.apache.pinot.common.utils.CommonConstants;
 import org.apache.pinot.common.utils.JsonUtils;
 import org.apache.pinot.common.utils.TenantRole;
 
@@ -41,99 +29,6 @@ import static org.apache.pinot.common.utils.CommonConstants.Helix.UNTAGGED_SERVE
 
 
 public class ControllerRequestBuilderUtil {
-  private ControllerRequestBuilderUtil() {
-  }
-
-  public static void addFakeBrokerInstancesToAutoJoinHelixCluster(String helixClusterName, String zkServer,
-      int numInstances)
-      throws Exception {
-    addFakeBrokerInstancesToAutoJoinHelixCluster(helixClusterName, zkServer, numInstances, false);
-  }
-
-  public static void addFakeBrokerInstancesToAutoJoinHelixCluster(String helixClusterName, String zkServer,
-      int numInstances, boolean isSingleTenant)
-      throws Exception {
-    for (int i = 0; i < numInstances; ++i) {
-      final String brokerId = "Broker_localhost_" + i;
-      final HelixManager helixZkManager =
-          HelixManagerFactory.getZKHelixManager(helixClusterName, brokerId, InstanceType.PARTICIPANT, zkServer);
-      final StateMachineEngine stateMachineEngine = helixZkManager.getStateMachineEngine();
-      final StateModelFactory<?> stateModelFactory = new EmptyBrokerOnlineOfflineStateModelFactory();
-      stateMachineEngine
-          .registerStateModelFactory(EmptyBrokerOnlineOfflineStateModelFactory.getStateModelDef(), stateModelFactory);
-      helixZkManager.connect();
-      if (isSingleTenant) {
-        helixZkManager.getClusterManagmentTool().addInstanceTag(helixClusterName, brokerId,
-            TagNameUtils.getBrokerTagForTenant(TagNameUtils.DEFAULT_TENANT_NAME));
-      } else {
-        helixZkManager.getClusterManagmentTool().addInstanceTag(helixClusterName, brokerId, UNTAGGED_BROKER_INSTANCE);
-      }
-    }
-  }
-
-  public static void addFakeDataInstancesToAutoJoinHelixCluster(String helixClusterName, String zkServer,
-      int numInstances)
-      throws Exception {
-    addFakeDataInstancesToAutoJoinHelixCluster(helixClusterName, zkServer, numInstances, false,
-        CommonConstants.Server.DEFAULT_ADMIN_API_PORT);
-  }
-
-  public static void addFakeDataInstancesToAutoJoinHelixCluster(String helixClusterName, String zkServer,
-      int numInstances, boolean isSingleTenant)
-      throws Exception {
-    addFakeDataInstancesToAutoJoinHelixCluster(helixClusterName, zkServer, numInstances, isSingleTenant,
-        CommonConstants.Server.DEFAULT_ADMIN_API_PORT);
-  }
-
-  public static void addFakeDataInstancesToAutoJoinHelixCluster(String helixClusterName, String zkServer,
-      int numInstances, boolean isSingleTenant, int adminPort)
-      throws Exception {
-
-    for (int i = 0; i < numInstances; ++i) {
-      final String instanceId = "Server_localhost_" + i;
-      addFakeDataInstanceToAutoJoinHelixCluster(helixClusterName, zkServer, instanceId, isSingleTenant, adminPort + i);
-    }
-  }
-
-  public static void addFakeDataInstanceToAutoJoinHelixCluster(String helixClusterName, String zkServer,
-      String instanceId)
-      throws Exception {
-    addFakeDataInstanceToAutoJoinHelixCluster(helixClusterName, zkServer, instanceId, false,
-        CommonConstants.Server.DEFAULT_ADMIN_API_PORT);
-  }
-
-  public static void addFakeDataInstanceToAutoJoinHelixCluster(String helixClusterName, String zkServer,
-      String instanceId, boolean isSingleTenant)
-      throws Exception {
-    addFakeDataInstanceToAutoJoinHelixCluster(helixClusterName, zkServer, instanceId, isSingleTenant,
-        CommonConstants.Server.DEFAULT_ADMIN_API_PORT);
-  }
-
-  public static void addFakeDataInstanceToAutoJoinHelixCluster(String helixClusterName, String zkServer,
-      String instanceId, boolean isSingleTenant, int adminPort)
-      throws Exception {
-    final HelixManager helixZkManager =
-        HelixManagerFactory.getZKHelixManager(helixClusterName, instanceId, InstanceType.PARTICIPANT, zkServer);
-    final StateMachineEngine stateMachineEngine = helixZkManager.getStateMachineEngine();
-    final StateModelFactory<?> stateModelFactory = new EmptySegmentOnlineOfflineStateModelFactory();
-    stateMachineEngine
-        .registerStateModelFactory(EmptySegmentOnlineOfflineStateModelFactory.getStateModelDef(), stateModelFactory);
-    helixZkManager.connect();
-    if (isSingleTenant) {
-      helixZkManager.getClusterManagmentTool().addInstanceTag(helixClusterName, instanceId,
-          TableNameBuilder.OFFLINE.tableNameWithType(TagNameUtils.DEFAULT_TENANT_NAME));
-      helixZkManager.getClusterManagmentTool().addInstanceTag(helixClusterName, instanceId,
-          TableNameBuilder.REALTIME.tableNameWithType(TagNameUtils.DEFAULT_TENANT_NAME));
-    } else {
-      helixZkManager.getClusterManagmentTool().addInstanceTag(helixClusterName, instanceId, UNTAGGED_SERVER_INSTANCE);
-    }
-    HelixConfigScope scope =
-        new HelixConfigScopeBuilder(HelixConfigScope.ConfigScopeProperty.PARTICIPANT, helixClusterName)
-            .forParticipant(instanceId).build();
-    Map<String, String> props = new HashMap<>();
-    props.put(CommonConstants.Helix.Instance.ADMIN_PORT_KEY, String.valueOf(adminPort));
-    helixZkManager.getClusterManagmentTool().setConfig(scope, props);
-  }
 
   public static String buildBrokerTenantCreateRequestJSON(String tenantName, int numberOfInstances)
       throws JsonProcessingException {
diff --git a/pinot-controller/src/main/java/org/apache/pinot/controller/helix/ControllerRequestBuilderUtil.java b/pinot-controller/src/main/java/org/apache/pinot/controller/helix/FakeHelixClients.java
similarity index 69%
copy from pinot-controller/src/main/java/org/apache/pinot/controller/helix/ControllerRequestBuilderUtil.java
copy to pinot-controller/src/main/java/org/apache/pinot/controller/helix/FakeHelixClients.java
index bedc11a..bed9f2f 100644
--- a/pinot-controller/src/main/java/org/apache/pinot/controller/helix/ControllerRequestBuilderUtil.java
+++ b/pinot-controller/src/main/java/org/apache/pinot/controller/helix/FakeHelixClients.java
@@ -18,8 +18,9 @@
  */
 package org.apache.pinot.controller.helix;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import org.apache.helix.HelixManager;
 import org.apache.helix.HelixManagerFactory;
@@ -30,33 +31,47 @@ import org.apache.helix.participant.StateMachineEngine;
 import org.apache.helix.participant.statemachine.StateModelFactory;
 import org.apache.pinot.common.config.TableNameBuilder;
 import org.apache.pinot.common.config.TagNameUtils;
-import org.apache.pinot.common.config.Tenant;
-import org.apache.pinot.common.config.Tenant.TenantBuilder;
 import org.apache.pinot.common.utils.CommonConstants;
-import org.apache.pinot.common.utils.JsonUtils;
-import org.apache.pinot.common.utils.TenantRole;
 
-import static org.apache.pinot.common.utils.CommonConstants.Helix.UNTAGGED_BROKER_INSTANCE;
-import static org.apache.pinot.common.utils.CommonConstants.Helix.UNTAGGED_SERVER_INSTANCE;
 
+public class FakeHelixClients {
+  private static final int BASE_SERVER_ADMIN_PORT = 10000;
+  private static final int NUM_INSTANCES = 5;
+  private static final String BROKER_TENANT_NAME = "brokerTenant";
+  private static final String SERVER_TENANT_NAME = "serverTenant";
+  private static final String TABLE_NAME = "testTable";
+  private static final String OFFLINE_TABLE_NAME = TableNameBuilder.OFFLINE.tableNameWithType(TABLE_NAME);
+  private static final String REALTIME_TABLE_NAME = TableNameBuilder.REALTIME.tableNameWithType(TABLE_NAME);
+  private static final int CONNECTION_TIMEOUT_IN_MILLISECOND = 10_000;
+  private static final int MAX_TIMEOUT_IN_MILLISECOND = 5_000;
+  private static final int MAXIMUM_NUMBER_OF_CONTROLLER_INSTANCES = 10;
+  private static final long TIMEOUT_IN_MS = 10_000L;
 
-public class ControllerRequestBuilderUtil {
-  private ControllerRequestBuilderUtil() {
+  private List<HelixManager> _helixManagers = new ArrayList<>();
+
+  public FakeHelixClients() {
+  }
+
+  public void shutDown() {
+    for (HelixManager helixManager : _helixManagers) {
+      helixManager.disconnect();
+    }
   }
 
-  public static void addFakeBrokerInstancesToAutoJoinHelixCluster(String helixClusterName, String zkServer,
+  public void addFakeBrokerInstancesToAutoJoinHelixCluster(String helixClusterName, String zkServer,
       int numInstances)
       throws Exception {
     addFakeBrokerInstancesToAutoJoinHelixCluster(helixClusterName, zkServer, numInstances, false);
   }
 
-  public static void addFakeBrokerInstancesToAutoJoinHelixCluster(String helixClusterName, String zkServer,
+  public void addFakeBrokerInstancesToAutoJoinHelixCluster(String helixClusterName, String zkServer,
       int numInstances, boolean isSingleTenant)
       throws Exception {
     for (int i = 0; i < numInstances; ++i) {
       final String brokerId = "Broker_localhost_" + i;
       final HelixManager helixZkManager =
           HelixManagerFactory.getZKHelixManager(helixClusterName, brokerId, InstanceType.PARTICIPANT, zkServer);
+      _helixManagers.add(helixZkManager);
       final StateMachineEngine stateMachineEngine = helixZkManager.getStateMachineEngine();
       final StateModelFactory<?> stateModelFactory = new EmptyBrokerOnlineOfflineStateModelFactory();
       stateMachineEngine
@@ -66,26 +81,26 @@ public class ControllerRequestBuilderUtil {
         helixZkManager.getClusterManagmentTool().addInstanceTag(helixClusterName, brokerId,
             TagNameUtils.getBrokerTagForTenant(TagNameUtils.DEFAULT_TENANT_NAME));
       } else {
-        helixZkManager.getClusterManagmentTool().addInstanceTag(helixClusterName, brokerId, UNTAGGED_BROKER_INSTANCE);
+        helixZkManager.getClusterManagmentTool().addInstanceTag(helixClusterName, brokerId, CommonConstants.Helix.UNTAGGED_BROKER_INSTANCE);
       }
     }
   }
 
-  public static void addFakeDataInstancesToAutoJoinHelixCluster(String helixClusterName, String zkServer,
+  public void addFakeDataInstancesToAutoJoinHelixCluster(String helixClusterName, String zkServer,
       int numInstances)
       throws Exception {
     addFakeDataInstancesToAutoJoinHelixCluster(helixClusterName, zkServer, numInstances, false,
         CommonConstants.Server.DEFAULT_ADMIN_API_PORT);
   }
 
-  public static void addFakeDataInstancesToAutoJoinHelixCluster(String helixClusterName, String zkServer,
+  public void addFakeDataInstancesToAutoJoinHelixCluster(String helixClusterName, String zkServer,
       int numInstances, boolean isSingleTenant)
       throws Exception {
     addFakeDataInstancesToAutoJoinHelixCluster(helixClusterName, zkServer, numInstances, isSingleTenant,
         CommonConstants.Server.DEFAULT_ADMIN_API_PORT);
   }
 
-  public static void addFakeDataInstancesToAutoJoinHelixCluster(String helixClusterName, String zkServer,
+  public void addFakeDataInstancesToAutoJoinHelixCluster(String helixClusterName, String zkServer,
       int numInstances, boolean isSingleTenant, int adminPort)
       throws Exception {
 
@@ -95,25 +110,26 @@ public class ControllerRequestBuilderUtil {
     }
   }
 
-  public static void addFakeDataInstanceToAutoJoinHelixCluster(String helixClusterName, String zkServer,
+  public void addFakeDataInstanceToAutoJoinHelixCluster(String helixClusterName, String zkServer,
       String instanceId)
       throws Exception {
     addFakeDataInstanceToAutoJoinHelixCluster(helixClusterName, zkServer, instanceId, false,
         CommonConstants.Server.DEFAULT_ADMIN_API_PORT);
   }
 
-  public static void addFakeDataInstanceToAutoJoinHelixCluster(String helixClusterName, String zkServer,
+  public void addFakeDataInstanceToAutoJoinHelixCluster(String helixClusterName, String zkServer,
       String instanceId, boolean isSingleTenant)
       throws Exception {
     addFakeDataInstanceToAutoJoinHelixCluster(helixClusterName, zkServer, instanceId, isSingleTenant,
         CommonConstants.Server.DEFAULT_ADMIN_API_PORT);
   }
 
-  public static void addFakeDataInstanceToAutoJoinHelixCluster(String helixClusterName, String zkServer,
+  public void addFakeDataInstanceToAutoJoinHelixCluster(String helixClusterName, String zkServer,
       String instanceId, boolean isSingleTenant, int adminPort)
       throws Exception {
     final HelixManager helixZkManager =
         HelixManagerFactory.getZKHelixManager(helixClusterName, instanceId, InstanceType.PARTICIPANT, zkServer);
+    _helixManagers.add(helixZkManager);
     final StateMachineEngine stateMachineEngine = helixZkManager.getStateMachineEngine();
     final StateModelFactory<?> stateModelFactory = new EmptySegmentOnlineOfflineStateModelFactory();
     stateMachineEngine
@@ -125,7 +141,7 @@ public class ControllerRequestBuilderUtil {
       helixZkManager.getClusterManagmentTool().addInstanceTag(helixClusterName, instanceId,
           TableNameBuilder.REALTIME.tableNameWithType(TagNameUtils.DEFAULT_TENANT_NAME));
     } else {
-      helixZkManager.getClusterManagmentTool().addInstanceTag(helixClusterName, instanceId, UNTAGGED_SERVER_INSTANCE);
+      helixZkManager.getClusterManagmentTool().addInstanceTag(helixClusterName, instanceId, CommonConstants.Helix.UNTAGGED_SERVER_INSTANCE);
     }
     HelixConfigScope scope =
         new HelixConfigScopeBuilder(HelixConfigScope.ConfigScopeProperty.PARTICIPANT, helixClusterName)
@@ -135,18 +151,4 @@ public class ControllerRequestBuilderUtil {
     helixZkManager.getClusterManagmentTool().setConfig(scope, props);
   }
 
-  public static String buildBrokerTenantCreateRequestJSON(String tenantName, int numberOfInstances)
-      throws JsonProcessingException {
-    Tenant tenant = new TenantBuilder(tenantName).setRole(TenantRole.BROKER).setTotalInstances(numberOfInstances)
-        .setOfflineInstances(0).setRealtimeInstances(0).build();
-    return JsonUtils.objectToString(tenant);
-  }
-
-  public static String buildServerTenantCreateRequestJSON(String tenantName, int numberOfInstances,
-      int offlineInstances, int realtimeInstances)
-      throws JsonProcessingException {
-    Tenant tenant = new TenantBuilder(tenantName).setRole(TenantRole.SERVER).setTotalInstances(numberOfInstances)
-        .setOfflineInstances(offlineInstances).setRealtimeInstances(realtimeInstances).build();
-    return JsonUtils.objectToString(tenant);
-  }
 }
diff --git a/pinot-controller/src/test/java/org/apache/pinot/controller/api/resources/PinotFileUploadTest.java b/pinot-controller/src/test/java/org/apache/pinot/controller/api/resources/PinotFileUploadTest.java
index 454d83e..f95ecdb 100644
--- a/pinot-controller/src/test/java/org/apache/pinot/controller/api/resources/PinotFileUploadTest.java
+++ b/pinot-controller/src/test/java/org/apache/pinot/controller/api/resources/PinotFileUploadTest.java
@@ -26,8 +26,8 @@ import org.apache.http.impl.client.DefaultHttpClient;
 import org.apache.pinot.common.config.TableConfig;
 import org.apache.pinot.common.utils.CommonConstants;
 import org.apache.pinot.common.utils.ZkStarter;
-import org.apache.pinot.controller.helix.ControllerRequestBuilderUtil;
 import org.apache.pinot.controller.helix.ControllerTest;
+import org.apache.pinot.controller.helix.FakeHelixClients;
 import org.testng.Assert;
 import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
@@ -40,6 +40,7 @@ import org.testng.annotations.Test;
  */
 public class PinotFileUploadTest extends ControllerTest {
   private static final String TABLE_NAME = "testTable";
+  private FakeHelixClients _fakeHelixClients;
 
   @Test
   public void testUploadBogusData()
@@ -59,9 +60,10 @@ public class PinotFileUploadTest extends ControllerTest {
       throws Exception {
     startZk();
     startController();
-    ControllerRequestBuilderUtil
+    _fakeHelixClients = new FakeHelixClients();
+    _fakeHelixClients
         .addFakeBrokerInstancesToAutoJoinHelixCluster(getHelixClusterName(), ZkStarter.DEFAULT_ZK_STR, 5, true);
-    ControllerRequestBuilderUtil
+    _fakeHelixClients
         .addFakeDataInstancesToAutoJoinHelixCluster(getHelixClusterName(), ZkStarter.DEFAULT_ZK_STR, 5, true);
 
     Assert.assertEquals(_helixAdmin.getInstancesInClusterWithTag(getHelixClusterName(), "DefaultTenant_BROKER").size(),
@@ -76,6 +78,7 @@ public class PinotFileUploadTest extends ControllerTest {
   @AfterClass
   public void tearDown()
       throws Exception {
+    _fakeHelixClients.shutDown();
     stopController();
     stopZk();
   }
diff --git a/pinot-controller/src/test/java/org/apache/pinot/controller/api/resources/PinotSegmentRestletResourceTest.java b/pinot-controller/src/test/java/org/apache/pinot/controller/api/resources/PinotSegmentRestletResourceTest.java
index aaf36a2..733c2bf 100644
--- a/pinot-controller/src/test/java/org/apache/pinot/controller/api/resources/PinotSegmentRestletResourceTest.java
+++ b/pinot-controller/src/test/java/org/apache/pinot/controller/api/resources/PinotSegmentRestletResourceTest.java
@@ -26,8 +26,8 @@ import org.apache.pinot.common.segment.SegmentMetadata;
 import org.apache.pinot.common.utils.CommonConstants;
 import org.apache.pinot.common.utils.JsonUtils;
 import org.apache.pinot.common.utils.ZkStarter;
-import org.apache.pinot.controller.helix.ControllerRequestBuilderUtil;
 import org.apache.pinot.controller.helix.ControllerTest;
+import org.apache.pinot.controller.helix.FakeHelixClients;
 import org.apache.pinot.controller.utils.SegmentMetadataMockUtils;
 import org.testng.Assert;
 import org.testng.annotations.AfterClass;
@@ -38,6 +38,7 @@ import org.testng.annotations.Test;
 public class PinotSegmentRestletResourceTest extends ControllerTest {
   private final static String ZK_SERVER = ZkStarter.DEFAULT_ZK_STR;
   private final static String TABLE_NAME = "testTable";
+  private FakeHelixClients _fakeHelixClients;
 
   @BeforeClass
   public void setUp()
@@ -45,8 +46,9 @@ public class PinotSegmentRestletResourceTest extends ControllerTest {
     startZk();
     startController();
 
-    ControllerRequestBuilderUtil.addFakeDataInstancesToAutoJoinHelixCluster(getHelixClusterName(), ZK_SERVER, 1, true);
-    ControllerRequestBuilderUtil
+    _fakeHelixClients = new FakeHelixClients();
+    _fakeHelixClients.addFakeDataInstancesToAutoJoinHelixCluster(getHelixClusterName(), ZK_SERVER, 1, true);
+    _fakeHelixClients
         .addFakeBrokerInstancesToAutoJoinHelixCluster(getHelixClusterName(), ZK_SERVER, 1, true);
 
     while (_helixAdmin.getInstancesInClusterWithTag(getHelixClusterName(), "DefaultTenant_OFFLINE").size() == 0) {
@@ -62,6 +64,7 @@ public class PinotSegmentRestletResourceTest extends ControllerTest {
   @AfterClass
   public void tearDown()
       throws Exception {
+    _fakeHelixClients.shutDown();
     stopController();
     stopZk();
   }
diff --git a/pinot-controller/src/test/java/org/apache/pinot/controller/api/resources/PinotTableRestletResourceTest.java b/pinot-controller/src/test/java/org/apache/pinot/controller/api/resources/PinotTableRestletResourceTest.java
index fe00c6a..f9218bc 100644
--- a/pinot-controller/src/test/java/org/apache/pinot/controller/api/resources/PinotTableRestletResourceTest.java
+++ b/pinot-controller/src/test/java/org/apache/pinot/controller/api/resources/PinotTableRestletResourceTest.java
@@ -27,8 +27,8 @@ import org.apache.pinot.common.utils.CommonConstants.Helix.TableType;
 import org.apache.pinot.common.utils.JsonUtils;
 import org.apache.pinot.common.utils.ZkStarter;
 import org.apache.pinot.controller.ControllerConf;
-import org.apache.pinot.controller.helix.ControllerRequestBuilderUtil;
 import org.apache.pinot.controller.helix.ControllerTest;
+import org.apache.pinot.controller.helix.FakeHelixClients;
 import org.apache.pinot.core.realtime.impl.fakestream.FakeStreamConfigUtils;
 import org.apache.pinot.core.realtime.stream.StreamConfig;
 import org.testng.Assert;
@@ -50,6 +50,7 @@ public class PinotTableRestletResourceTest extends ControllerTest {
   private final TableConfig.Builder _offlineBuilder = new TableConfig.Builder(TableType.OFFLINE);
   private final TableConfig.Builder _realtimeBuilder = new TableConfig.Builder(TableType.REALTIME);
   private String _createTableUrl;
+  private FakeHelixClients _fakeHelixClients;
 
   @BeforeClass
   public void setUp()
@@ -60,10 +61,11 @@ public class PinotTableRestletResourceTest extends ControllerTest {
     startController(config);
     _createTableUrl = _controllerRequestURLBuilder.forTableCreate();
 
-    ControllerRequestBuilderUtil
+    _fakeHelixClients = new FakeHelixClients();
+    _fakeHelixClients
         .addFakeBrokerInstancesToAutoJoinHelixCluster(getHelixClusterName(), ZkStarter.DEFAULT_ZK_STR,
             NUM_BROKER_INSTANCES, true);
-    ControllerRequestBuilderUtil
+    _fakeHelixClients
         .addFakeDataInstancesToAutoJoinHelixCluster(getHelixClusterName(), ZkStarter.DEFAULT_ZK_STR,
             NUM_SERVER_INSTANCES, true);
 
@@ -308,6 +310,7 @@ public class PinotTableRestletResourceTest extends ControllerTest {
 
   @AfterClass
   public void tearDown() {
+    _fakeHelixClients.shutDown();
     stopController();
     stopZk();
   }
diff --git a/pinot-controller/src/test/java/org/apache/pinot/controller/api/resources/PinotTenantRestletResourceTest.java b/pinot-controller/src/test/java/org/apache/pinot/controller/api/resources/PinotTenantRestletResourceTest.java
index 645b195..2653039 100644
--- a/pinot-controller/src/test/java/org/apache/pinot/controller/api/resources/PinotTenantRestletResourceTest.java
+++ b/pinot-controller/src/test/java/org/apache/pinot/controller/api/resources/PinotTenantRestletResourceTest.java
@@ -24,8 +24,8 @@ import org.apache.pinot.common.config.TableConfig;
 import org.apache.pinot.common.utils.CommonConstants;
 import org.apache.pinot.common.utils.JsonUtils;
 import org.apache.pinot.common.utils.ZkStarter;
-import org.apache.pinot.controller.helix.ControllerRequestBuilderUtil;
 import org.apache.pinot.controller.helix.ControllerTest;
+import org.apache.pinot.controller.helix.FakeHelixClients;
 import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
@@ -41,11 +41,13 @@ public class PinotTenantRestletResourceTest extends ControllerTest {
   private final TableConfig.Builder _offlineBuilder = new TableConfig.Builder(CommonConstants.Helix.TableType.OFFLINE);
   private static final int NUM_BROKER_INSTANCES = 2;
   private static final int NUM_SERVER_INSTANCES = 6;
+  private FakeHelixClients _fakeHelixClients;
 
   @BeforeClass
   public void setUp() {
     startZk();
     startController();
+    _fakeHelixClients = new FakeHelixClients();
   }
 
   @Test
@@ -81,10 +83,10 @@ public class PinotTenantRestletResourceTest extends ControllerTest {
     // Add a table to the server
     String createTableUrl = _controllerRequestURLBuilder.forTableCreate();
 
-    ControllerRequestBuilderUtil
+    _fakeHelixClients
         .addFakeBrokerInstancesToAutoJoinHelixCluster(getHelixClusterName(), ZkStarter.DEFAULT_ZK_STR,
             NUM_BROKER_INSTANCES, true);
-    ControllerRequestBuilderUtil
+    _fakeHelixClients
         .addFakeDataInstancesToAutoJoinHelixCluster(getHelixClusterName(), ZkStarter.DEFAULT_ZK_STR,
             NUM_SERVER_INSTANCES, true);
 
@@ -105,6 +107,7 @@ public class PinotTenantRestletResourceTest extends ControllerTest {
 
   @AfterClass
   public void tearDown() {
+    _fakeHelixClients.shutDown();
     stopController();
     stopZk();
   }
diff --git a/pinot-controller/src/test/java/org/apache/pinot/controller/api/resources/TableViewsTest.java b/pinot-controller/src/test/java/org/apache/pinot/controller/api/resources/TableViewsTest.java
index 12103cf..c66320d 100644
--- a/pinot-controller/src/test/java/org/apache/pinot/controller/api/resources/TableViewsTest.java
+++ b/pinot-controller/src/test/java/org/apache/pinot/controller/api/resources/TableViewsTest.java
@@ -27,8 +27,8 @@ import org.apache.pinot.common.config.TableNameBuilder;
 import org.apache.pinot.common.utils.CommonConstants;
 import org.apache.pinot.common.utils.JsonUtils;
 import org.apache.pinot.common.utils.ZkStarter;
-import org.apache.pinot.controller.helix.ControllerRequestBuilderUtil;
 import org.apache.pinot.controller.helix.ControllerTest;
+import org.apache.pinot.controller.helix.FakeHelixClients;
 import org.apache.pinot.controller.utils.SegmentMetadataMockUtils;
 import org.apache.pinot.core.realtime.impl.fakestream.FakeStreamConfigUtils;
 import org.apache.pinot.core.realtime.stream.StreamConfig;
@@ -45,17 +45,19 @@ public class TableViewsTest extends ControllerTest {
   private static final String HYBRID_TABLE_NAME = "hybridTable";
   private static final int NUM_BROKER_INSTANCES = 3;
   private static final int NUM_SERVER_INSTANCES = 4;
+  private FakeHelixClients _fakeHelixClients;
 
   @BeforeClass
   public void setUp()
       throws Exception {
     startZk();
     startController();
+    _fakeHelixClients = new FakeHelixClients();
 
-    ControllerRequestBuilderUtil
+    _fakeHelixClients
         .addFakeBrokerInstancesToAutoJoinHelixCluster(getHelixClusterName(), ZkStarter.DEFAULT_ZK_STR,
             NUM_BROKER_INSTANCES, true);
-    ControllerRequestBuilderUtil
+    _fakeHelixClients
         .addFakeDataInstancesToAutoJoinHelixCluster(getHelixClusterName(), ZkStarter.DEFAULT_ZK_STR,
             NUM_SERVER_INSTANCES, true);
 
@@ -177,6 +179,7 @@ public class TableViewsTest extends ControllerTest {
 
   @AfterClass
   public void tearDown() {
+    _fakeHelixClients.shutDown();
     stopController();
     stopZk();
   }
diff --git a/pinot-controller/src/test/java/org/apache/pinot/controller/helix/ControllerInstanceToggleTest.java b/pinot-controller/src/test/java/org/apache/pinot/controller/helix/ControllerInstanceToggleTest.java
index 731fa3f..adb2f05 100644
--- a/pinot-controller/src/test/java/org/apache/pinot/controller/helix/ControllerInstanceToggleTest.java
+++ b/pinot-controller/src/test/java/org/apache/pinot/controller/helix/ControllerInstanceToggleTest.java
@@ -41,15 +41,17 @@ public class ControllerInstanceToggleTest extends ControllerTest {
   private static final int NUM_INSTANCES = 3;
 
   private final String _helixClusterName = getHelixClusterName();
+  private FakeHelixClients _fakeHelixClients;
 
   @BeforeClass
   public void setup()
       throws Exception {
     startZk();
     startController();
-    ControllerRequestBuilderUtil
+    _fakeHelixClients = new FakeHelixClients();
+    _fakeHelixClients
         .addFakeBrokerInstancesToAutoJoinHelixCluster(_helixClusterName, ZkStarter.DEFAULT_ZK_STR, NUM_INSTANCES, true);
-    ControllerRequestBuilderUtil
+    _fakeHelixClients
         .addFakeDataInstancesToAutoJoinHelixCluster(_helixClusterName, ZkStarter.DEFAULT_ZK_STR, NUM_INSTANCES, true);
   }
 
@@ -124,6 +126,7 @@ public class ControllerInstanceToggleTest extends ControllerTest {
 
   @AfterClass
   public void tearDown() {
+    _fakeHelixClients.shutDown();
     stopController();
     stopZk();
   }
diff --git a/pinot-controller/src/test/java/org/apache/pinot/controller/helix/ControllerSentinelTestV2.java b/pinot-controller/src/test/java/org/apache/pinot/controller/helix/ControllerSentinelTestV2.java
index 97bf934..af5b8ca 100644
--- a/pinot-controller/src/test/java/org/apache/pinot/controller/helix/ControllerSentinelTestV2.java
+++ b/pinot-controller/src/test/java/org/apache/pinot/controller/helix/ControllerSentinelTestV2.java
@@ -32,20 +32,23 @@ import org.testng.annotations.Test;
 
 public class ControllerSentinelTestV2 extends ControllerTest {
   private final String _helixClusterName = getHelixClusterName();
+  private FakeHelixClients _fakeHelixClients;
 
   @BeforeClass
   public void setup()
       throws Exception {
     startZk();
     startController();
-    ControllerRequestBuilderUtil
+    _fakeHelixClients = new FakeHelixClients();
+    _fakeHelixClients
         .addFakeBrokerInstancesToAutoJoinHelixCluster(_helixClusterName, ZkStarter.DEFAULT_ZK_STR, 20, true);
-    ControllerRequestBuilderUtil
+    _fakeHelixClients
         .addFakeDataInstancesToAutoJoinHelixCluster(_helixClusterName, ZkStarter.DEFAULT_ZK_STR, 20, true);
   }
 
   @AfterClass
   public void tearDown() {
+    _fakeHelixClients.shutDown();
     stopController();
     stopZk();
   }
diff --git a/pinot-controller/src/test/java/org/apache/pinot/controller/helix/ControllerTenantTest.java b/pinot-controller/src/test/java/org/apache/pinot/controller/helix/ControllerTenantTest.java
index 59923d5..9a106a5 100644
--- a/pinot-controller/src/test/java/org/apache/pinot/controller/helix/ControllerTenantTest.java
+++ b/pinot-controller/src/test/java/org/apache/pinot/controller/helix/ControllerTenantTest.java
@@ -43,16 +43,18 @@ public class ControllerTenantTest extends ControllerTest {
   private static final int NUM_SERVERS_PER_TAG = NUM_OFFLINE_SERVERS_PER_TAG + NUM_REALTIME_SERVERS_PER_TAG;
 
   private final String _helixClusterName = getHelixClusterName();
+  private FakeHelixClients _fakeHelixClients;
 
   @BeforeClass
   public void setUp()
       throws Exception {
     startZk();
     startController();
+    _fakeHelixClients = new FakeHelixClients();
     ZKMetadataProvider.setClusterTenantIsolationEnabled(_propertyStore, false);
-    ControllerRequestBuilderUtil
+    _fakeHelixClients
         .addFakeBrokerInstancesToAutoJoinHelixCluster(_helixClusterName, ZkStarter.DEFAULT_ZK_STR, NUM_INSTANCES);
-    ControllerRequestBuilderUtil
+    _fakeHelixClients
         .addFakeDataInstancesToAutoJoinHelixCluster(_helixClusterName, ZkStarter.DEFAULT_ZK_STR, NUM_INSTANCES);
   }
 
@@ -185,6 +187,7 @@ public class ControllerTenantTest extends ControllerTest {
 
   @AfterClass
   public void tearDown() {
+    _fakeHelixClients.shutDown();
     stopController();
     stopZk();
   }
diff --git a/pinot-controller/src/test/java/org/apache/pinot/controller/helix/PinotResourceManagerTest.java b/pinot-controller/src/test/java/org/apache/pinot/controller/helix/PinotResourceManagerTest.java
index d65e818..8163278 100644
--- a/pinot-controller/src/test/java/org/apache/pinot/controller/helix/PinotResourceManagerTest.java
+++ b/pinot-controller/src/test/java/org/apache/pinot/controller/helix/PinotResourceManagerTest.java
@@ -41,6 +41,7 @@ public class PinotResourceManagerTest extends ControllerTest {
 
   private ZkStarter.ZookeeperInstance _zookeeperInstance;
   private ZkClient _zkClient;
+  private FakeHelixClients _fakeHelixClients;
 
   @BeforeClass
   public void setUp()
@@ -49,10 +50,11 @@ public class PinotResourceManagerTest extends ControllerTest {
     _zkClient = new ZkClient(ZkStarter.DEFAULT_ZK_STR);
 
     startController();
+    _fakeHelixClients = new FakeHelixClients();
 
-    ControllerRequestBuilderUtil
+    _fakeHelixClients
         .addFakeDataInstancesToAutoJoinHelixCluster(getHelixClusterName(), ZkStarter.DEFAULT_ZK_STR, 1, true);
-    ControllerRequestBuilderUtil
+    _fakeHelixClients
         .addFakeBrokerInstancesToAutoJoinHelixCluster(getHelixClusterName(), ZkStarter.DEFAULT_ZK_STR, 1, true);
     Assert.assertEquals(_helixAdmin.getInstancesInClusterWithTag(getHelixClusterName(), "DefaultTenant_BROKER").size(), 1);
     Assert
@@ -151,6 +153,7 @@ public class PinotResourceManagerTest extends ControllerTest {
 
   @AfterClass
   public void tearDown() {
+    _fakeHelixClients.shutDown();
     _helixResourceManager.stop();
     _zkClient.close();
     ZkStarter.stopLocalZkServer(_zookeeperInstance);
diff --git a/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/PinotHelixResourceManagerTest.java b/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/PinotHelixResourceManagerTest.java
index a850ac4..17da5e9 100644
--- a/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/PinotHelixResourceManagerTest.java
+++ b/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/PinotHelixResourceManagerTest.java
@@ -53,8 +53,8 @@ import org.apache.pinot.common.utils.CommonConstants.Helix.TableType;
 import org.apache.pinot.common.utils.TenantRole;
 import org.apache.pinot.common.utils.ZkStarter;
 import org.apache.pinot.controller.ControllerConf;
-import org.apache.pinot.controller.helix.ControllerRequestBuilderUtil;
 import org.apache.pinot.controller.helix.ControllerTest;
+import org.apache.pinot.controller.helix.FakeHelixClients;
 import org.apache.pinot.util.TestUtils;
 import org.testng.Assert;
 import org.testng.annotations.AfterClass;
@@ -80,6 +80,7 @@ public class PinotHelixResourceManagerTest extends ControllerTest {
   private static final long TIMEOUT_IN_MS = 10_000L;
 
   private final String _helixClusterName = getHelixClusterName();
+  private FakeHelixClients _fakeHelixClients;
 
   @BeforeClass
   public void setUp() throws Exception {
@@ -87,10 +88,11 @@ public class PinotHelixResourceManagerTest extends ControllerTest {
     ControllerConf config = getDefaultControllerConfiguration();
     config.setTenantIsolationEnabled(false);
     startController(config);
+    _fakeHelixClients = new FakeHelixClients();
 
-    ControllerRequestBuilderUtil.addFakeBrokerInstancesToAutoJoinHelixCluster(_helixClusterName,
+    _fakeHelixClients.addFakeBrokerInstancesToAutoJoinHelixCluster(_helixClusterName,
         ZkStarter.DEFAULT_ZK_STR, NUM_INSTANCES, false);
-    ControllerRequestBuilderUtil.addFakeDataInstancesToAutoJoinHelixCluster(_helixClusterName, ZkStarter.DEFAULT_ZK_STR,
+    _fakeHelixClients.addFakeDataInstancesToAutoJoinHelixCluster(_helixClusterName, ZkStarter.DEFAULT_ZK_STR,
         NUM_INSTANCES, false, BASE_SERVER_ADMIN_PORT);
 
     // Create server tenant on all Servers
@@ -576,6 +578,7 @@ public class PinotHelixResourceManagerTest extends ControllerTest {
 
   @AfterClass
   public void tearDown() {
+    _fakeHelixClients.shutDown();
     stopController();
     stopZk();
   }
diff --git a/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/rebalance/ReplicaGroupRebalanceStrategyTest.java b/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/rebalance/ReplicaGroupRebalanceStrategyTest.java
index 84c8b50..4ec307a 100644
--- a/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/rebalance/ReplicaGroupRebalanceStrategyTest.java
+++ b/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/rebalance/ReplicaGroupRebalanceStrategyTest.java
@@ -33,8 +33,8 @@ import org.apache.pinot.common.partition.ReplicaGroupPartitionAssignmentGenerato
 import org.apache.pinot.common.utils.CommonConstants;
 import org.apache.pinot.common.utils.ZkStarter;
 import org.apache.pinot.controller.ControllerConf;
-import org.apache.pinot.controller.helix.ControllerRequestBuilderUtil;
 import org.apache.pinot.controller.helix.ControllerTest;
+import org.apache.pinot.controller.helix.FakeHelixClients;
 import org.apache.pinot.controller.utils.ReplicaGroupTestUtils;
 import org.testng.Assert;
 import org.testng.annotations.AfterClass;
@@ -55,6 +55,8 @@ public class ReplicaGroupRebalanceStrategyTest extends ControllerTest {
 
   private final TableConfig.Builder _offlineBuilder = new TableConfig.Builder(CommonConstants.Helix.TableType.OFFLINE);
 
+  private FakeHelixClients _fakeHelixClients;
+
   @BeforeClass
   public void setUp()
       throws Exception {
@@ -63,10 +65,11 @@ public class ReplicaGroupRebalanceStrategyTest extends ControllerTest {
       ControllerConf config = getDefaultControllerConfiguration();
       config.setTableMinReplicas(MIN_NUM_REPLICAS);
       startController(config);
-      ControllerRequestBuilderUtil
+      _fakeHelixClients = new FakeHelixClients();
+      _fakeHelixClients
           .addFakeBrokerInstancesToAutoJoinHelixCluster(getHelixClusterName(), ZkStarter.DEFAULT_ZK_STR,
               NUM_BROKER_INSTANCES, true);
-      ControllerRequestBuilderUtil
+      _fakeHelixClients
           .addFakeDataInstancesToAutoJoinHelixCluster(getHelixClusterName(), ZkStarter.DEFAULT_ZK_STR,
               NUM_SERVER_INSTANCES, true);
 
@@ -78,7 +81,7 @@ public class ReplicaGroupRebalanceStrategyTest extends ControllerTest {
       // Join 4 more servers as untagged
       String[] instanceNames = {"Server_localhost_a", "Server_localhost_b", "Server_localhost_c", "Server_localhost_d"};
       for (String instanceName : instanceNames) {
-        ControllerRequestBuilderUtil
+        _fakeHelixClients
             .addFakeDataInstanceToAutoJoinHelixCluster(getHelixClusterName(), ZkStarter.DEFAULT_ZK_STR, instanceName,
                 true);
         _helixAdmin.removeInstanceTag(getHelixClusterName(), instanceName, OFFLINE_TENENT_NAME);
@@ -90,6 +93,7 @@ public class ReplicaGroupRebalanceStrategyTest extends ControllerTest {
 
   @AfterClass
   public void tearDown() {
+    _fakeHelixClients.shutDown();
     stopController();
     stopZk();
   }
diff --git a/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/sharding/SegmentAssignmentStrategyTest.java b/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/sharding/SegmentAssignmentStrategyTest.java
index 836824c..8281087 100644
--- a/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/sharding/SegmentAssignmentStrategyTest.java
+++ b/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/sharding/SegmentAssignmentStrategyTest.java
@@ -36,13 +36,11 @@ import org.apache.pinot.common.partition.ReplicaGroupPartitionAssignment;
 import org.apache.pinot.common.partition.ReplicaGroupPartitionAssignmentGenerator;
 import org.apache.pinot.common.utils.CommonConstants;
 import org.apache.pinot.common.utils.ZkStarter;
-import org.apache.pinot.controller.helix.ControllerRequestBuilderUtil;
 import org.apache.pinot.controller.helix.ControllerTest;
+import org.apache.pinot.controller.helix.FakeHelixClients;
 import org.apache.pinot.controller.utils.ReplicaGroupTestUtils;
 import org.apache.pinot.controller.utils.SegmentMetadataMockUtils;
 import org.apache.pinot.core.realtime.impl.fakestream.FakeStreamConfigUtils;
-import org.apache.pinot.core.realtime.stream.StreamConfig;
-import org.apache.pinot.core.realtime.stream.StreamConfigProperties;
 import org.testng.Assert;
 import org.testng.annotations.AfterTest;
 import org.testng.annotations.BeforeTest;
@@ -65,6 +63,7 @@ public class SegmentAssignmentStrategyTest extends ControllerTest {
   private final int _numBrokerInstance = 1;
   private ZkStarter.ZookeeperInstance _zookeeperInstance;
   private ReplicaGroupPartitionAssignmentGenerator _partitionAssignmentGenerator;
+  private FakeHelixClients _fakeHelixClients;
 
   @BeforeTest
   public void setup()
@@ -81,9 +80,10 @@ public class SegmentAssignmentStrategyTest extends ControllerTest {
     _partitionAssignmentGenerator =
         new ReplicaGroupPartitionAssignmentGenerator(helixZkManager.getHelixPropertyStore());
 
-    ControllerRequestBuilderUtil
+    _fakeHelixClients = new FakeHelixClients();
+    _fakeHelixClients
         .addFakeDataInstancesToAutoJoinHelixCluster(getHelixClusterName(), ZK_SERVER, _numServerInstance, true);
-    ControllerRequestBuilderUtil
+    _fakeHelixClients
         .addFakeBrokerInstancesToAutoJoinHelixCluster(getHelixClusterName(), ZK_SERVER, _numBrokerInstance, true);
     Thread.sleep(100);
     Assert.assertEquals(_helixAdmin.getInstancesInClusterWithTag(getHelixClusterName(), "DefaultTenant_OFFLINE").size(),
@@ -97,6 +97,7 @@ public class SegmentAssignmentStrategyTest extends ControllerTest {
 
   @AfterTest
   public void tearDown() {
+    _fakeHelixClients.shutDown();
     _helixResourceManager.stop();
     _zkClient.close();
     ZkStarter.stopLocalZkServer(_zookeeperInstance);
diff --git a/pinot-controller/src/test/java/org/apache/pinot/controller/validation/ValidationManagerTest.java b/pinot-controller/src/test/java/org/apache/pinot/controller/validation/ValidationManagerTest.java
index 55c13a5..57e3a77 100644
--- a/pinot-controller/src/test/java/org/apache/pinot/controller/validation/ValidationManagerTest.java
+++ b/pinot-controller/src/test/java/org/apache/pinot/controller/validation/ValidationManagerTest.java
@@ -35,8 +35,8 @@ import org.apache.pinot.common.utils.HLCSegmentName;
 import org.apache.pinot.common.utils.LLCSegmentName;
 import org.apache.pinot.common.utils.ZkStarter;
 import org.apache.pinot.common.utils.helix.HelixHelper;
-import org.apache.pinot.controller.helix.ControllerRequestBuilderUtil;
 import org.apache.pinot.controller.helix.ControllerTest;
+import org.apache.pinot.controller.helix.FakeHelixClients;
 import org.apache.pinot.controller.utils.SegmentMetadataMockUtils;
 import org.joda.time.DateTime;
 import org.joda.time.Duration;
@@ -64,6 +64,7 @@ public class ValidationManagerTest extends ControllerTest {
   private ZkStarter.ZookeeperInstance _zookeeperInstance;
   private TableConfig _offlineTableConfig;
   private HelixManager _helixManager;
+  private FakeHelixClients _fakeHelixClients;
 
   @BeforeClass
   public void setUp()
@@ -73,9 +74,10 @@ public class ValidationManagerTest extends ControllerTest {
     Thread.sleep(1000);
 
     startController();
+    _fakeHelixClients = new FakeHelixClients();
 
-    ControllerRequestBuilderUtil.addFakeDataInstancesToAutoJoinHelixCluster(getHelixClusterName(), ZK_STR, 2, true);
-    ControllerRequestBuilderUtil.addFakeBrokerInstancesToAutoJoinHelixCluster(getHelixClusterName(), ZK_STR, 2, true);
+    _fakeHelixClients.addFakeDataInstancesToAutoJoinHelixCluster(getHelixClusterName(), ZK_STR, 2, true);
+    _fakeHelixClients.addFakeBrokerInstancesToAutoJoinHelixCluster(getHelixClusterName(), ZK_STR, 2, true);
 
     _offlineTableConfig =
         new TableConfig.Builder(CommonConstants.Helix.TableType.OFFLINE).setTableName(TEST_TABLE_NAME).setNumReplicas(2)
@@ -188,6 +190,7 @@ public class ValidationManagerTest extends ControllerTest {
 
   @AfterClass
   public void shutDown() {
+    _fakeHelixClients.shutDown();
     _helixResourceManager.stop();
     _zkClient.close();
     ZkStarter.stopLocalZkServer(_zookeeperInstance);


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org