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

rongr pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git


The following commit(s) were added to refs/heads/master by this push:
     new 16989370ce reload status should only count online/consuming segments 
(#11787)
16989370ce is described below

commit 16989370cec5dba847984022412844e7f196b507
Author: Rong Rong <[email protected]>
AuthorDate: Fri Oct 13 09:37:15 2023 -0700

    reload status should only count online/consuming segments (#11787)
    
    Co-authored-by: Rong Rong <[email protected]>
---
 .../api/resources/PinotSegmentRestletResource.java |  2 +-
 .../helix/core/PinotHelixResourceManager.java      | 22 ++++++++++++++++++++++
 2 files changed, 23 insertions(+), 1 deletion(-)

diff --git 
a/pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/PinotSegmentRestletResource.java
 
b/pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/PinotSegmentRestletResource.java
index 0bf2da9314..5db7d8c1c3 100644
--- 
a/pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/PinotSegmentRestletResource.java
+++ 
b/pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/PinotSegmentRestletResource.java
@@ -665,7 +665,7 @@ public class PinotSegmentRestletResource {
         serverToSegments.put(server, segmentList);
       });
     } else {
-      serverToSegments = 
_pinotHelixResourceManager.getServerToSegmentsMap(tableNameWithType);
+      serverToSegments = 
_pinotHelixResourceManager.getServerToOnlineSegmentsMap(tableNameWithType);
     }
 
     BiMap<String, String> serverEndPoints =
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 4b4f6fccb2..860a9e1f83 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
@@ -2634,6 +2634,28 @@ public class PinotHelixResourceManager {
     _helixAdmin.setConfig(scope, propToUpdate);
   }
 
+  /**
+   * Returns a map from server instance to list of online segments it serves 
for the given table.
+   */
+  public Map<String, List<String>> getServerToOnlineSegmentsMap(String 
tableNameWithType) {
+    Map<String, List<String>> serverToSegmentsMap = new TreeMap<>();
+    IdealState idealState = 
_helixAdmin.getResourceIdealState(_helixClusterName, tableNameWithType);
+    if (idealState == null) {
+      throw new IllegalStateException("Ideal state does not exist for table: " 
+ tableNameWithType);
+    }
+    for (Map.Entry<String, Map<String, String>> entry : 
idealState.getRecord().getMapFields().entrySet()) {
+      String segmentName = entry.getKey();
+      for (Map.Entry<String, String> e : entry.getValue().entrySet()) {
+        String server = e.getKey();
+        String status = e.getValue();
+        if (status.equals(SegmentStateModel.CONSUMING) || 
status.equals(SegmentStateModel.ONLINE)) {
+          serverToSegmentsMap.computeIfAbsent(server, key -> new 
ArrayList<>()).add(segmentName);
+        }
+      }
+    }
+    return serverToSegmentsMap;
+  }
+
   /**
    * Returns a map from server instance to list of segments it serves for the 
given table.
    */


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

Reply via email to