Copilot commented on code in PR #17475:
URL: https://github.com/apache/pinot/pull/17475#discussion_r2672117327


##########
pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/minion/PinotHelixTaskResourceManager.java:
##########
@@ -1340,6 +1343,121 @@ public Map<String, Map<String, Long>> 
getTaskMetadataLastUpdateTimeMs() {
     return 
MinionTaskMetadataUtils.getAllTaskMetadataLastUpdateTimeMs(propertyStore);
   }
 
+  /**
+   * Gets the status of all minion instances, including their task counts and 
drain state.
+   *
+   * @param statusFilter Optional filter by status ("ONLINE" or "DRAINED"). If 
null, returns all minions.
+   * @param limit Maximum number of minions to return. If 0 or negative, 
returns all minions.
+   * @return MinionStatusResponse containing status information for minion 
instances
+   */
+  public MinionStatusResponse getMinionStatus(String statusFilter, int limit) {
+    // Validate status filter
+    if (statusFilter != null && !statusFilter.isEmpty()) {
+      if (!"ONLINE".equalsIgnoreCase(statusFilter) && 
!"DRAINED".equalsIgnoreCase(statusFilter)) {
+        throw new IllegalArgumentException("Invalid status filter. Must be 
'ONLINE' or 'DRAINED'");
+      }
+    }
+
+    // Get all instances and filter for minions, then sort them
+    List<String> allInstances = _helixResourceManager.getAllInstances();
+    List<String> minionInstances = allInstances.stream()
+        .filter(InstanceTypeUtils::isMinion)
+        .sorted()
+        .collect(Collectors.toList());
+
+    // Get running task counts per minion (if a task resource manager is 
provided)
+    Map<String, Integer> runningTaskCounts = new HashMap<>();
+      try {
+        runningTaskCounts = getRunningTaskCountsPerMinion();
+      } catch (Exception e) {
+        LOGGER.warn("Failed to get running task counts from task resource 
manager", e);
+        // Continue with an empty map-task counts will be 0
+    }
+
+    // Build status list for each minion
+    List<MinionStatusResponse.MinionStatus> minionStatusList = new 
ArrayList<>();
+    for (String minionInstanceId : minionInstances) {
+      InstanceConfig instanceConfig = 
_helixResourceManager.getHelixInstanceConfig(minionInstanceId);
+      if (instanceConfig == null) {
+        continue;
+      }
+
+      // Determine if minion is drained
+      List<String> tags = instanceConfig.getTags();
+      boolean isDrained = tags != null && 
tags.contains(Helix.DRAINED_MINION_INSTANCE);
+      String status = isDrained ? "DRAINED" : "ONLINE";
+
+      // Apply status filter if specified
+      if (statusFilter != null && !statusFilter.isEmpty() && 
!status.equalsIgnoreCase(statusFilter)) {
+        continue;
+      }
+
+      // Get host and port
+      String host = instanceConfig.getHostName();
+      int port = Integer.parseInt(instanceConfig.getPort());
+
+      // Get a running task count for this minion

Review Comment:
   Corrected spelling of 'a' to ''. Should read 'Get running task count for 
this minion'.
   ```suggestion
         // Get running task count for this minion
   ```



##########
pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/minion/PinotHelixTaskResourceManager.java:
##########
@@ -1340,6 +1343,121 @@ public Map<String, Map<String, Long>> 
getTaskMetadataLastUpdateTimeMs() {
     return 
MinionTaskMetadataUtils.getAllTaskMetadataLastUpdateTimeMs(propertyStore);
   }
 
+  /**
+   * Gets the status of all minion instances, including their task counts and 
drain state.
+   *
+   * @param statusFilter Optional filter by status ("ONLINE" or "DRAINED"). If 
null, returns all minions.
+   * @param limit Maximum number of minions to return. If 0 or negative, 
returns all minions.
+   * @return MinionStatusResponse containing status information for minion 
instances
+   */
+  public MinionStatusResponse getMinionStatus(String statusFilter, int limit) {
+    // Validate status filter
+    if (statusFilter != null && !statusFilter.isEmpty()) {
+      if (!"ONLINE".equalsIgnoreCase(statusFilter) && 
!"DRAINED".equalsIgnoreCase(statusFilter)) {
+        throw new IllegalArgumentException("Invalid status filter. Must be 
'ONLINE' or 'DRAINED'");
+      }
+    }
+
+    // Get all instances and filter for minions, then sort them
+    List<String> allInstances = _helixResourceManager.getAllInstances();
+    List<String> minionInstances = allInstances.stream()
+        .filter(InstanceTypeUtils::isMinion)
+        .sorted()
+        .collect(Collectors.toList());
+
+    // Get running task counts per minion (if a task resource manager is 
provided)
+    Map<String, Integer> runningTaskCounts = new HashMap<>();
+      try {
+        runningTaskCounts = getRunningTaskCountsPerMinion();
+      } catch (Exception e) {
+        LOGGER.warn("Failed to get running task counts from task resource 
manager", e);
+        // Continue with an empty map-task counts will be 0

Review Comment:
   Missing space after hyphen. Should be 'empty map - task counts will be 0'.
   ```suggestion
           // Continue with an empty map - task counts will be 0
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to