cypherean commented on code in PR #14250:
URL: https://github.com/apache/pinot/pull/14250#discussion_r2302749560
##########
pinot-server/src/main/java/org/apache/pinot/server/api/resources/TablesResource.java:
##########
@@ -409,6 +411,62 @@ public String getSegmentMetadata(
}
}
+ @GET
+ @Encoded
+ @Path("/tables/{tableName}/segments/metadata")
+ @Produces(MediaType.APPLICATION_JSON)
+ @ApiOperation(value = "Provide segments metadata", notes = "Provide segments
metadata for the segments on server")
+ @ApiResponses(value = {
+ @ApiResponse(code = 200, message = "Success"),
+ @ApiResponse(code = 500, message = "Internal server error", response =
ErrorInfo.class),
+ @ApiResponse(code = 404, message = "Table or segment not found",
response = ErrorInfo.class)
+ })
+ public String getSegmentsMetadata(
+ @ApiParam(value = "Table name including type", required = true, example
= "myTable_OFFLINE")
+ @PathParam("tableName") String tableName,
+ @ApiParam(value = "Segments name", allowMultiple = true)
@QueryParam("segments")
+ @DefaultValue("") List<String> segments,
+ @ApiParam(value = "Column name", allowMultiple = true)
@QueryParam("columns") @DefaultValue("")
+ List<String> columns, @Context HttpHeaders headers) {
+ tableName = DatabaseUtils.translateTableName(tableName, headers);
+ TableDataManager tableDataManager =
ServerResourceUtils.checkGetTableDataManager(_serverInstance, tableName);
+ // decode columns and segments
+ List<String> decodedSegments = new ArrayList<>();
+ if (CollectionUtils.isNotEmpty(segments)) {
+ for (String segment : segments) {
+ if (!segment.isEmpty()) {
+ decodedSegments.add(URIUtils.decode(segment));
+ }
+ }
+ }
+ List<SegmentDataManager> segmentDataManagers;
+ if (!decodedSegments.isEmpty()) {
+ segmentDataManagers = tableDataManager.acquireSegments(decodedSegments,
new ArrayList<>());
+ } else {
+ segmentDataManagers = tableDataManager.acquireAllSegments();
+ }
+ for (int i = 0; i < columns.size(); i++) {
+ columns.set(i, URIUtils.decode(columns.get(i)));
+ }
+ // get metadata for every segment in the list
+ Map<String, JsonNode> response = new HashMap<>();
+ for (SegmentDataManager segmentDataManager: segmentDataManagers) {
+ String segmentName = segmentDataManager.getSegmentName();
+ try {
+ String segmentMetadata =
SegmentMetadataFetcher.getSegmentMetadata(segmentDataManager, columns);
+ JsonNode segmentMetadataJson =
JsonUtils.stringToJsonNode(segmentMetadata);
+ response.put(segmentName, segmentMetadataJson);
+ } catch (Exception e) {
+ LOGGER.error("Failed to convert table {} segment {} to json",
tableName, segmentName);
+ throw new WebApplicationException("Failed to convert segment metadata
to json",
+ Response.Status.INTERNAL_SERVER_ERROR);
+ } finally {
+ tableDataManager.releaseSegment(segmentDataManager);
+ }
Review Comment:
good catch, thanks
--
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]