deepthi912 commented on code in PR #13296:
URL: https://github.com/apache/pinot/pull/13296#discussion_r1718932021


##########
pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/TableViews.java:
##########
@@ -110,6 +115,75 @@ public TableView getExternalView(
     return getTableState(tableName, EXTERNALVIEW, tableType);
   }
 
+  @GET
+  @Produces(MediaType.APPLICATION_JSON)
+  @Path("/tables/{tableName}/segmentsStatus")
+  @Authorize(targetType = TargetType.TABLE, paramName = "tableName", action = 
Actions.Table.GET_SEGMENT_STATUS)
+  @ApiOperation(value = "Get segment names to segment status map", notes = 
"Get segment statuses of each segment")
+  public String getSegmentsStatusDetails(
+      @ApiParam(value = "Name of the table", required = true) 
@PathParam("tableName") String tableName,
+      @ApiParam(value = "realtime|offline", required = false) 
@QueryParam("tableType") String tableTypeStr,
+      @Context HttpHeaders headers)
+      throws JsonProcessingException {
+    tableName = DatabaseUtils.translateTableName(tableName, headers);
+    TableType tableType = validateTableType(tableTypeStr);
+    TableViews.TableView externalView = getTableState(tableName, 
TableViews.EXTERNALVIEW, tableType);
+    TableViews.TableView idealStateView = getTableState(tableName, 
TableViews.IDEALSTATE, tableType);
+    List<SegmentStatusInfo> segmentStatusInfoListMap = new ArrayList<>();
+    segmentStatusInfoListMap = getSegmentStatuses(externalView, 
idealStateView);
+    return JsonUtils.objectToPrettyString(segmentStatusInfoListMap);
+  }
+
+  public List<SegmentStatusInfo> getSegmentStatuses(TableViews.TableView 
externalView,
+      TableViews.TableView idealStateView) {
+    Map<String, Map<String, String>> idealStateMap = 
getStateMap(idealStateView);
+    Map<String, Map<String, String>> externalViewMap = 
getStateMap(externalView);
+    List<SegmentStatusInfo> segmentStatusInfoList = new ArrayList<>();
+
+    for (Map.Entry<String, Map<String, String>> entry : 
externalViewMap.entrySet()) {
+      String segment = entry.getKey();
+      Map<String, String> externalViewEntryValue = entry.getValue();
+      if (isErrorSegment(externalViewEntryValue)) {
+        segmentStatusInfoList.add(
+            new SegmentStatusInfo(segment, 
CommonConstants.Helix.StateModel.DisplaySegmentStatus.BAD));
+      } else if (isOnlineOrConsumingSegment(externalViewEntryValue) && 
externalViewMap.equals(idealStateMap)) {

Review Comment:
   Resolved it. Thank you for pointing this out. Made sure I have junits for 
this.



-- 
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: commits-unsubscr...@pinot.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org
For additional commands, e-mail: commits-h...@pinot.apache.org

Reply via email to