diff --git a/pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/PinotInstanceRestletResource.java b/pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/PinotInstanceRestletResource.java index fa3aaf56993..cedc36223c5 100644 --- a/pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/PinotInstanceRestletResource.java +++ b/pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/PinotInstanceRestletResource.java @@ -104,7 +104,11 @@ public List getInstances() { @ApiResponse(code = 200, message = "Success"), @ApiResponse(code = 500, message = "Internal error") }) - public Instances getAllInstances() { + public Instances getAllInstances( + @ApiParam("Filter by tag") @QueryParam("tag") String tag) { + if (tag != null) { + return new Instances(_pinotHelixResourceManager.getAllInstancesWithTag(tag)); + } return new Instances(_pinotHelixResourceManager.getAllInstances()); } diff --git a/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/PinotHelixResourceManager.java b/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/PinotHelixResourceManager.java index 717d8dca4ee..17ed1a34a47 100644 --- a/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/PinotHelixResourceManager.java +++ b/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/PinotHelixResourceManager.java @@ -414,6 +414,15 @@ public List getAllInstances() { return _helixAdmin.getInstancesInCluster(_helixClusterName); } + /** + * Get Ids of all instance with the given tag. + * + * @return List of instance Ids + */ + public List getAllInstancesWithTag(String tag) { + return HelixHelper.getInstancesWithTag(_helixZkManager, tag); + } + /** * Get all live instance Ids. * diff --git a/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/PinotHelixResourceManagerStatelessTest.java b/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/PinotHelixResourceManagerStatelessTest.java index 987f83b55e9..658808daf34 100644 --- a/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/PinotHelixResourceManagerStatelessTest.java +++ b/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/PinotHelixResourceManagerStatelessTest.java @@ -147,6 +147,17 @@ private void resetServerTags() { assertEquals(_helixResourceManager.getOnlineUnTaggedServerInstanceList().size(), 0); } + @Test + public void testGetInstancesByTag() { + List controllersByTag = _helixResourceManager.getAllInstancesWithTag("controller"); + List controllerConfigs = _helixResourceManager.getAllControllerInstanceConfigs(); + + assertEquals(controllersByTag.size(), controllerConfigs.size()); + for (InstanceConfig c: controllerConfigs) { + assertTrue(controllersByTag.contains(c.getInstanceName())); + } + } + @Test public void testGetDataInstanceAdminEndpoints() throws Exception {