himanish-star commented on code in PR #15725: URL: https://github.com/apache/pinot/pull/15725#discussion_r2098421022
########## pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/TableViews.java: ########## @@ -141,28 +146,41 @@ public TableView getExternalView( 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, + @ApiParam(value = "Show segments being replaced: true|false", required = false) + @QueryParam("showReplacedSegments") @DefaultValue("true") boolean showReplacedSegments, @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); + + Map<String, Map<String, String>> externalViewStateMap = getStateMap(externalView); + Map<String, Map<String, String>> idealStateMap = getStateMap(idealStateView); + Set<String> segments = idealStateMap.keySet(); + + if (!showReplacedSegments) { + SegmentLineage segmentLineage = SegmentLineageAccessHelper + .getSegmentLineage(_pinotHelixResourceManager.getPropertyStore(), tableName); + SegmentLineageUtils + .filterSegmentsBasedOnLineageInPlace(segments, segmentLineage); + } + + List<SegmentStatusInfo> segmentStatusInfoListMap = getSegmentStatuses(externalViewStateMap, idealStateMap); + 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); + public List<SegmentStatusInfo> getSegmentStatuses(Map<String, Map<String, String>> externalViewMap, + Map<String, Map<String, String>> idealStateMap) { List<SegmentStatusInfo> segmentStatusInfoList = new ArrayList<>(); - for (Map.Entry<String, Map<String, String>> entry : externalViewMap.entrySet()) { + for (Map.Entry<String, Map<String, String>> entry : idealStateMap.entrySet()) { String segment = entry.getKey(); - Map<String, String> externalViewEntryValue = entry.getValue(); - Map<String, String> idealViewEntryValue = idealStateMap.get(segment); - if (isErrorSegment(externalViewEntryValue)) { + Map<String, String> externalViewEntryValue = externalViewMap.get(segment); + Map<String, String> idealViewEntryValue = entry.getValue(); + + if (externalViewEntryValue == null || isErrorSegment(externalViewEntryValue)) { segmentStatusInfoList.add( Review Comment: ok -- 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