xiangfu0 commented on code in PR #17475:
URL: https://github.com/apache/pinot/pull/17475#discussion_r2675268018
##########
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();
Review Comment:
How expensive this call could be? Shall we make it evaluated later based on
the matching instances?
--
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]