Jackie-Jiang commented on code in PR #10363:
URL: https://github.com/apache/pinot/pull/10363#discussion_r1124948166
##########
pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/PinotSegmentRestletResource.java:
##########
@@ -901,6 +903,35 @@ public String getServerMetadata(
return segmentsMetadata;
}
+ @GET
+ @Path("segments/{tableName}/zkmetadata")
+ @Produces(MediaType.APPLICATION_JSON)
+ @ApiOperation(value = "Get the zookeeper metadata for all table segments",
notes = "Get the zookeeper metadata for "
+ + "all table segments")
+ public String getZookeeperMetadata(
+ @ApiParam(value = "Name of the table", required = true)
@PathParam("tableName") String tableName,
+ @ApiParam(value = "OFFLINE|REALTIME") @QueryParam("type") String
tableTypeStr)
+ throws JsonProcessingException {
+ LOGGER.info("Received a request to fetch zookeeper metadata for all
segments for table {}", tableName);
+ TableType tableType = Constants.validateTableType(tableTypeStr);
+
+ List<String> tableNamesWithType =
+
ResourceUtils.getExistingTableNamesWithType(_pinotHelixResourceManager,
tableName, tableType, LOGGER);
+ Map<String, JsonNode> tableTypeToSegmentMetadata = new HashMap<>();
+ for (String tableNameWithType : tableNamesWithType) {
+ List<SegmentZKMetadata> segmentZKMetadataList =
+ _pinotHelixResourceManager.getSegmentsZKMetadata(tableNameWithType);
+ Map<String, JsonNode> segmentToMetadataMap = new HashMap<>();
+ for (SegmentZKMetadata segmentZKMetadata : segmentZKMetadataList) {
+ segmentToMetadataMap.put(segmentZKMetadata.getSegmentName(),
JsonUtils.objectToJsonNode(segmentZKMetadata));
Review Comment:
`SegmentZKMetadata` is not designed to be JSON serializable. We can use
`toMap() ` extract the values.
```suggestion
segmentToMetadataMap.put(segmentZKMetadata.getSegmentName(),
segmentZKMetadata.toMap());
```
##########
pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/PinotSegmentRestletResource.java:
##########
@@ -901,6 +903,35 @@ public String getServerMetadata(
return segmentsMetadata;
}
+ @GET
+ @Path("segments/{tableName}/zkmetadata")
+ @Produces(MediaType.APPLICATION_JSON)
+ @ApiOperation(value = "Get the zookeeper metadata for all table segments",
+ notes = "Get the zookeeper metadata for all table segments")
+ public String getZookeeperMetadata(
+ @ApiParam(value = "Name of the table", required = true)
@PathParam("tableName") String tableName,
+ @ApiParam(value = "OFFLINE|REALTIME") @QueryParam("type") String
tableTypeStr)
+ throws JsonProcessingException {
+ LOGGER.info("Received a request to fetch zookeeper metadata for all
segments for table {}", tableName);
+ TableType tableType = Constants.validateTableType(tableTypeStr);
+
+ List<String> tableNamesWithType =
+
ResourceUtils.getExistingTableNamesWithType(_pinotHelixResourceManager,
tableName, tableType, LOGGER);
+ Map<String, JsonNode> tableTypeToSegmentMetadata = new HashMap<>();
Review Comment:
Seems we have different return type for different API. Since this one is for
metadata, maybe keep it the same as server metadata API? Basically only return
the metadata for the first table if table type is not provided
##########
pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/PinotSegmentRestletResource.java:
##########
@@ -901,6 +903,35 @@ public String getServerMetadata(
return segmentsMetadata;
}
+ @GET
+ @Path("segments/{tableName}/zkmetadata")
+ @Produces(MediaType.APPLICATION_JSON)
+ @ApiOperation(value = "Get the zookeeper metadata for all table segments",
notes = "Get the zookeeper metadata for "
+ + "all table segments")
+ public String getZookeeperMetadata(
+ @ApiParam(value = "Name of the table", required = true)
@PathParam("tableName") String tableName,
+ @ApiParam(value = "OFFLINE|REALTIME") @QueryParam("type") String
tableTypeStr)
+ throws JsonProcessingException {
+ LOGGER.info("Received a request to fetch zookeeper metadata for all
segments for table {}", tableName);
+ TableType tableType = Constants.validateTableType(tableTypeStr);
+
+ List<String> tableNamesWithType =
+
ResourceUtils.getExistingTableNamesWithType(_pinotHelixResourceManager,
tableName, tableType, LOGGER);
+ Map<String, JsonNode> tableTypeToSegmentMetadata = new HashMap<>();
+ for (String tableNameWithType : tableNamesWithType) {
+ List<SegmentZKMetadata> segmentZKMetadataList =
+ _pinotHelixResourceManager.getSegmentsZKMetadata(tableNameWithType);
+ Map<String, JsonNode> segmentToMetadataMap = new HashMap<>();
+ for (SegmentZKMetadata segmentZKMetadata : segmentZKMetadataList) {
+ segmentToMetadataMap.put(segmentZKMetadata.getSegmentName(),
JsonUtils.objectToJsonNode(segmentZKMetadata));
+ }
+ tableTypeToSegmentMetadata
+
.put(Objects.requireNonNull(TableNameBuilder.getTableTypeFromTableName(tableNameWithType)).toString(),
+ JsonUtils.objectToJsonNode(segmentToMetadataMap));
+ }
+ return JsonUtils.objectToPrettyString(tableTypeToSegmentMetadata);
Review Comment:
We can directly return `Map<String, Map<String, String>>` here
--
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]