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]