snleee commented on code in PR #11949:
URL: https://github.com/apache/pinot/pull/11949#discussion_r1381949812
##########
pinot-controller/src/main/java/org/apache/pinot/controller/util/TableMetadataReader.java:
##########
@@ -55,58 +53,58 @@ public TableMetadataReader(Executor executor,
HttpClientConnectionManager connec
}
/**
- * This method retrieves the full segment metadata for a given table.
- * Currently supports only OFFLINE tables.
- * @return a map of segmentName to its metadata
+ * This api takes in list of segments for which we need the metadata.
*/
- public JsonNode getSegmentsMetadata(String tableNameWithType, List<String>
columns, int timeoutMs)
+ public JsonNode getSegmentsMetadata(String tableNameWithType, List<String>
columns, Set<String> segmentsToInclude,
+ int timeoutMs)
throws InvalidConfigException, IOException {
- final Map<String, List<String>> serverToSegments =
+ return getSegmentsMetadataInternal(tableNameWithType, columns,
segmentsToInclude, timeoutMs);
+ }
+
+ private JsonNode getSegmentsMetadataInternal(String tableNameWithType,
List<String> columns,
+ Set<String> segmentsToInclude, int timeoutMs)
+ throws InvalidConfigException, IOException {
+ final Map<String, List<String>> serverToSegmentsMap =
_pinotHelixResourceManager.getServerToSegmentsMap(tableNameWithType);
BiMap<String, String> endpoints =
-
_pinotHelixResourceManager.getDataInstanceAdminEndpoints(serverToSegments.keySet());
+
_pinotHelixResourceManager.getDataInstanceAdminEndpoints(serverToSegmentsMap.keySet());
ServerSegmentMetadataReader serverSegmentMetadataReader =
new ServerSegmentMetadataReader(_executor, _connectionManager);
- List<String> segmentsMetadata = serverSegmentMetadataReader
- .getSegmentMetadataFromServer(tableNameWithType, serverToSegments,
endpoints, columns, timeoutMs);
+ // Filter segments that we need
+ for (Map.Entry<String, List<String>> serverToSegment :
serverToSegmentsMap.entrySet()) {
+ List<String> segments = serverToSegment.getValue();
+ if (segmentsToInclude != null && !segmentsToInclude.isEmpty()) {
+ segments.retainAll(segmentsToInclude);
+ }
+ }
+ List<String> segmentsMetadata = serverSegmentMetadataReader
+ .getSegmentMetadataFromServer(tableNameWithType, serverToSegmentsMap,
endpoints, columns, timeoutMs);
Map<String, JsonNode> response = new HashMap<>();
for (String segmentMetadata : segmentsMetadata) {
JsonNode responseJson = JsonUtils.stringToJsonNode(segmentMetadata);
response.put(responseJson.get("segmentName").asText(), responseJson);
}
return JsonUtils.objectToJsonNode(response);
}
+ /**
+ * This method retrieves the full segment metadata for a given table.
+ * Currently supports only OFFLINE tables.
+ * @return a map of segmentName to its metadata
+ */
+ public JsonNode getSegmentsMetadata(String tableNameWithType, List<String>
columns, int timeoutMs)
+ throws InvalidConfigException, IOException {
+ return getSegmentsMetadataInternal(tableNameWithType, columns, null,
timeoutMs);
Review Comment:
(nit) please apply the formatting
##########
pinot-controller/src/main/java/org/apache/pinot/controller/util/TableMetadataReader.java:
##########
@@ -55,58 +53,58 @@ public TableMetadataReader(Executor executor,
HttpClientConnectionManager connec
}
/**
- * This method retrieves the full segment metadata for a given table.
- * Currently supports only OFFLINE tables.
- * @return a map of segmentName to its metadata
+ * This api takes in list of segments for which we need the metadata.
*/
- public JsonNode getSegmentsMetadata(String tableNameWithType, List<String>
columns, int timeoutMs)
+ public JsonNode getSegmentsMetadata(String tableNameWithType, List<String>
columns, Set<String> segmentsToInclude,
+ int timeoutMs)
throws InvalidConfigException, IOException {
- final Map<String, List<String>> serverToSegments =
+ return getSegmentsMetadataInternal(tableNameWithType, columns,
segmentsToInclude, timeoutMs);
+ }
+
+ private JsonNode getSegmentsMetadataInternal(String tableNameWithType,
List<String> columns,
+ Set<String> segmentsToInclude, int timeoutMs)
+ throws InvalidConfigException, IOException {
+ final Map<String, List<String>> serverToSegmentsMap =
_pinotHelixResourceManager.getServerToSegmentsMap(tableNameWithType);
BiMap<String, String> endpoints =
-
_pinotHelixResourceManager.getDataInstanceAdminEndpoints(serverToSegments.keySet());
+
_pinotHelixResourceManager.getDataInstanceAdminEndpoints(serverToSegmentsMap.keySet());
ServerSegmentMetadataReader serverSegmentMetadataReader =
new ServerSegmentMetadataReader(_executor, _connectionManager);
- List<String> segmentsMetadata = serverSegmentMetadataReader
- .getSegmentMetadataFromServer(tableNameWithType, serverToSegments,
endpoints, columns, timeoutMs);
+ // Filter segments that we need
+ for (Map.Entry<String, List<String>> serverToSegment :
serverToSegmentsMap.entrySet()) {
+ List<String> segments = serverToSegment.getValue();
+ if (segmentsToInclude != null && !segmentsToInclude.isEmpty()) {
+ segments.retainAll(segmentsToInclude);
+ }
+ }
+ List<String> segmentsMetadata = serverSegmentMetadataReader
+ .getSegmentMetadataFromServer(tableNameWithType, serverToSegmentsMap,
endpoints, columns, timeoutMs);
Map<String, JsonNode> response = new HashMap<>();
for (String segmentMetadata : segmentsMetadata) {
JsonNode responseJson = JsonUtils.stringToJsonNode(segmentMetadata);
response.put(responseJson.get("segmentName").asText(), responseJson);
}
return JsonUtils.objectToJsonNode(response);
}
+ /**
Review Comment:
(nit) add line
--
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]