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