JackieTien97 commented on code in PR #12539:
URL: https://github.com/apache/iotdb/pull/12539#discussion_r1606183559
##########
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/TsFileProcessor.java:
##########
@@ -1612,6 +1623,300 @@ public String getStorageGroupName() {
return storageGroupName;
}
+ private void processAlignedChunkMetaDataFromFlushedMemTable(
+ AlignedChunkMetadata alignedChunkMetadata,
+ Map<String, List<IChunkMetadata>> measurementToChunkMetaMap,
+ Map<String, List<IChunkHandle>> measurementToChunkHandleMap,
+ TsFileSequenceReader tsFileReader) {
+ SharedTimeDataBuffer sharedTimeDataBuffer =
+ new SharedTimeDataBuffer(alignedChunkMetadata.getTimeChunkMetadata());
+ for (IChunkMetadata valueChunkMetaData :
alignedChunkMetadata.getValueChunkMetadataList()) {
+ measurementToChunkMetaMap
+ .computeIfAbsent(valueChunkMetaData.getMeasurementUid(), k -> new
ArrayList<>())
+ .add(valueChunkMetaData);
+ measurementToChunkHandleMap
+ .computeIfAbsent(valueChunkMetaData.getMeasurementUid(), k -> new
ArrayList<>())
+ .add(
+ new DiskAlignedChunkHandleImpl(
+ tsFileReader,
+ valueChunkMetaData.getOffsetOfChunkHeader(),
+ valueChunkMetaData.getStatistics(),
+ sharedTimeDataBuffer));
+ }
+ }
+
+ private void processChunkMetaDataFromFlushedMemTable(
+ ChunkMetadata chunkMetadata,
+ Map<String, List<IChunkMetadata>> measurementToChunkMetaMap,
+ Map<String, List<IChunkHandle>> measurementToChunkHandleMap,
+ TsFileSequenceReader tsFileReader) {
+ measurementToChunkMetaMap
+ .computeIfAbsent(chunkMetadata.getMeasurementUid(), k -> new
ArrayList<>())
+ .add(chunkMetadata);
+ measurementToChunkHandleMap
+ .computeIfAbsent(chunkMetadata.getMeasurementUid(), k -> new
ArrayList<>())
+ .add(
+ new DiskChunkHandleImpl(
+ tsFileReader,
+ chunkMetadata.getOffsetOfChunkHeader(),
+ chunkMetadata.getStatistics()));
+ }
+
+ private void buildChunkHandleForFlushedMemTable(
+ List<IChunkMetadata> chunkMetadataList,
+ Map<String, List<IChunkMetadata>> measurementToChunkMetaList,
+ Map<String, List<IChunkHandle>> measurementToChunkHandleList)
+ throws IOException {
+ TsFileSequenceReader tsFileReader =
+
FileReaderManager.getInstance().get(this.tsFileResource.getTsFilePath(), true);
+ for (IChunkMetadata chunkMetadata : chunkMetadataList) {
+ if (chunkMetadata instanceof AlignedChunkMetadata) {
+ processAlignedChunkMetaDataFromFlushedMemTable(
+ (AlignedChunkMetadata) chunkMetadata,
+ measurementToChunkMetaList,
+ measurementToChunkHandleList,
+ tsFileReader);
+ } else {
+ processChunkMetaDataFromFlushedMemTable(
+ (ChunkMetadata) chunkMetadata,
+ measurementToChunkMetaList,
+ measurementToChunkHandleList,
+ tsFileReader);
+ }
+ }
+ }
+
+ private List<ChunkMetadata>
searchTimeChunkMetaData(List<List<ChunkMetadata>> chunkMetaDataList) {
+ for (List<ChunkMetadata> chunkMetadata : chunkMetaDataList) {
+ if (chunkMetadata.isEmpty()) {
+ continue;
+ }
+ if (chunkMetadata.get(0).getMeasurementUid().isEmpty()) {
+ return chunkMetadata;
+ }
+ }
+ return Collections.emptyList();
+ }
+
+ private List<IChunkMetadata> getVisibleMetadataListFromWriterByDeviceID(
+ QueryContext queryContext, IDeviceID deviceID) {
+ Map<String, List<Modification>> modifications =
+ queryContext.getDeviceModifications(tsFileResource, deviceID);
+
+ List<List<ChunkMetadata>> chunkMetaDataListForDevice =
+ writer.getVisibleMetadataList(deviceID, null);
+ List<ChunkMetadata> processedChunkMetadataForOneDevice = new ArrayList<>();
+ for (List<ChunkMetadata> chunkMetadataList : chunkMetaDataListForDevice) {
+ if (chunkMetadataList.isEmpty()) {
+ continue;
+ }
+ ModificationUtils.modifyChunkMetaData(
+ chunkMetadataList,
modifications.get(chunkMetadataList.get(0).getMeasurementUid()));
+ chunkMetadataList.removeIf(queryContext::chunkNotSatisfy);
+ processedChunkMetadataForOneDevice.addAll(chunkMetadataList);
+ }
+ return new ArrayList<>(processedChunkMetadataForOneDevice);
+ }
+
+ private List<IChunkMetadata>
getAlignedVisibleMetadataListFromWriterByDeviceID(
+ QueryContext queryContext, IDeviceID deviceID) throws
QueryProcessException {
+ List<AlignedChunkMetadata> alignedChunkMetadataForOneDevice = new
ArrayList<>();
+ Map<String, List<Modification>> modifications =
+ queryContext.getDeviceModifications(tsFileResource, deviceID);
Review Comment:
same above
--
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]