You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ej...@apache.org on 2021/03/14 13:38:05 UTC

[iotdb] branch dynamic_compaction updated: finish read problem

This is an automated email from the ASF dual-hosted git repository.

ejttianyu pushed a commit to branch dynamic_compaction
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/dynamic_compaction by this push:
     new 74b5009  finish read problem
74b5009 is described below

commit 74b500909b263d56596c58bb2b690ee57fae20a1
Author: EJTTianyu <16...@qq.com>
AuthorDate: Sun Mar 14 21:37:30 2021 +0800

    finish read problem
---
 .../db/engine/cache/TimeSeriesMetadataCache.java    |  3 +++
 .../HitterLevelCompactionTsFileManagement.java      | 21 ++++++++++++++++-----
 2 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java b/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java
index e49c12f..f8fe217 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java
@@ -167,6 +167,9 @@ public class TimeSeriesMetadataCache {
           printCacheLog(false);
           List<TimeseriesMetadata> timeSeriesMetadataList = reader
               .readTimeseriesMetadata(path, allSensors);
+          if (timeSeriesMetadataList == null) {
+            return null;
+          }
           // put TimeSeriesMetadata of all sensors used in this query into cache
           lock.writeLock().lock();
           try {
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/level/hitter/HitterLevelCompactionTsFileManagement.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/level/hitter/HitterLevelCompactionTsFileManagement.java
index 5783d3c..28721e4 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/level/hitter/HitterLevelCompactionTsFileManagement.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/level/hitter/HitterLevelCompactionTsFileManagement.java
@@ -113,7 +113,8 @@ public class HitterLevelCompactionTsFileManagement extends LevelCompactionTsFile
             for (TsFileResource fileResource : toMergeTsFiles) {
               // remove cache
               ChunkMetadataCache.getInstance().remove(fileResource);
-              FileReaderManager.getInstance().closeFileAndRemoveReader(fileResource.getTsFilePath());
+              FileReaderManager.getInstance()
+                  .closeFileAndRemoveReader(fileResource.getTsFilePath());
 
               TsFileIOWriter oldFileWriter = getOldFileWriter(fileResource);
               // filter all the chunks that have been merged
@@ -144,20 +145,30 @@ public class HitterLevelCompactionTsFileManagement extends LevelCompactionTsFile
               historicalVersions.addAll(tsFileResource.getHistoricalVersions());
             }
             toMergeTsFiles.get(0).setHistoricalVersions(historicalVersions);
-            for (TsFileResource tsFileResource: toMergeTsFiles) {
+            // update start end time
+            for (Map.Entry<String, Integer> deviceIndexEntry : newResource
+                .getDeviceToIndexMap().entrySet()) {
+              toMergeTsFiles.get(0).updateStartTime(deviceIndexEntry.getKey(),
+                  newResource.getStartTime(deviceIndexEntry.getKey()));
+              toMergeTsFiles.get(0).updateEndTime(deviceIndexEntry.getKey(),
+                  newResource.getEndTime(deviceIndexEntry.getKey()));
+            }
+            for (TsFileResource tsFileResource : toMergeTsFiles) {
               // rename file
               File oldFile = tsFileResource.getTsFile();
               File newFile = createNewTsFileName(oldFile, i + 1);
               FSFactoryProducer.getFSFactory().moveFile(oldFile, newFile);
               FSFactoryProducer.getFSFactory().moveFile(
-                  FSFactoryProducer.getFSFactory().getFile(oldFile + TsFileResource.RESOURCE_SUFFIX),
-                  FSFactoryProducer.getFSFactory().getFile(newFile + TsFileResource.RESOURCE_SUFFIX));
+                  FSFactoryProducer.getFSFactory()
+                      .getFile(oldFile + TsFileResource.RESOURCE_SUFFIX),
+                  FSFactoryProducer.getFSFactory()
+                      .getFile(newFile + TsFileResource.RESOURCE_SUFFIX));
               tsFileResource.setFile(newFile);
               //
               tsFileResource.serialize();
               tsFileResource.close();
             }
-            for (TsFileIOWriter writer: writers){
+            for (TsFileIOWriter writer : writers) {
               writer.endFile();
             }
             newFileWriter.close();