diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfigCheck.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfigCheck.java index ffbba6eba3158..992ef36b2eca6 100644 --- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfigCheck.java +++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfigCheck.java @@ -241,6 +241,14 @@ private void upgradePropertiesFile() throws IOException { System.exit(-1); } + // virtual storage group num can only set to 1 when upgrading from old version + if (!virtualStorageGroupNum.equals("1")) { + logger.error( + "virtual storage group num cannot set to {} when upgrading from old version, " + + "please set to 1 and restart", + virtualStorageGroupNum); + System.exit(-1); + } try (FileOutputStream tmpFOS = new FileOutputStream(tmpPropertiesFile.toString())) { properties.setProperty(PARTITION_INTERVAL_STRING, String.valueOf(partitionInterval)); properties.setProperty(TSFILE_FILE_SYSTEM_STRING, tsfileFileSystem); @@ -432,6 +440,16 @@ private void moveFileToUpgradeFolder(List folders) { if (!storageGroup.isDirectory()) { continue; } + // create virtual storage group folder 0 + File virtualStorageGroupDir = fsFactory.getFile(storageGroup, "0"); + if (virtualStorageGroupDir.mkdirs()) { + logger.info( + "virtual storage directory {} doesn't exist, create it", + virtualStorageGroupDir.getPath()); + } else if (!virtualStorageGroupDir.exists()) { + logger.error( + "Create virtual storage directory {} failed", virtualStorageGroupDir.getPath()); + } for (File partitionDir : storageGroup.listFiles()) { if (!partitionDir.isDirectory()) { continue; @@ -450,7 +468,8 @@ private void moveFileToUpgradeFolder(List folders) { if (oldTsfileArray.length + oldResourceFileArray.length + oldModificationFileArray.length != 0) { // create upgrade directory if not exist - File upgradeFolder = fsFactory.getFile(partitionDir, IoTDBConstant.UPGRADE_FOLDER_NAME); + File upgradeFolder = + fsFactory.getFile(virtualStorageGroupDir, IoTDBConstant.UPGRADE_FOLDER_NAME); if (upgradeFolder.mkdirs()) { logger.info("Upgrade Directory {} doesn't exist, create it", upgradeFolder.getPath()); } else if (!upgradeFolder.exists()) { @@ -475,6 +494,13 @@ private void moveFileToUpgradeFolder(List folders) { } } } + if (partitionDir.listFiles().length == 0) { + try { + Files.delete(partitionDir.toPath()); + } catch (IOException e) { + logger.error("Delete {} failed", partitionDir); + } + } } } } diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/v2/file/metadata/TsFileMetadataV2.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/v2/file/metadata/TsFileMetadataV2.java index 9825a5c20c068..2ebd12e7a7099 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/v2/file/metadata/TsFileMetadataV2.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/v2/file/metadata/TsFileMetadataV2.java @@ -24,6 +24,7 @@ import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils; import java.nio.ByteBuffer; +import java.util.ArrayList; import java.util.List; public class TsFileMetadataV2 { @@ -34,12 +35,12 @@ private TsFileMetadataV2() {} * deserialize data from the buffer. * * @param buffer -buffer use to deserialize - * @return -a instance of TsFileMetaData + * @return -a pair of TsFileMetaData and VersionInfo */ - public static TsFileMetadata deserializeFrom( - ByteBuffer buffer, List> versionInfo) { + public static Pair>> deserializeFrom(ByteBuffer buffer) { TsFileMetadata fileMetaData = new TsFileMetadata(); + List> versionInfo = new ArrayList<>(); // metadataIndex fileMetaData.setMetadataIndex(MetadataIndexNodeV2.deserializeFrom(buffer)); // totalChunkNum @@ -70,6 +71,6 @@ public static TsFileMetadata deserializeFrom( BloomFilter.buildBloomFilter(bytes, filterSize, hashFunctionSize)); } - return fileMetaData; + return new Pair<>(fileMetaData, versionInfo); } } diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/v2/read/TsFileSequenceReaderForV2.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/v2/read/TsFileSequenceReaderForV2.java index d07007b6d0cdd..117da82cfc775 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/v2/read/TsFileSequenceReaderForV2.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/v2/read/TsFileSequenceReaderForV2.java @@ -145,11 +145,11 @@ public String readVersionNumberV2() throws IOException { */ @Override public TsFileMetadata readFileMetadata() throws IOException { - if (tsFileMetaData == null) { - versionInfo = new ArrayList<>(); - tsFileMetaData = - TsFileMetadataV2.deserializeFrom( - readData(fileMetadataPos, fileMetadataSize), versionInfo); + if (tsFileMetaData == null || versionInfo == null) { + Pair>> pair = + TsFileMetadataV2.deserializeFrom(readData(fileMetadataPos, fileMetadataSize)); + tsFileMetaData = pair.left; + versionInfo = pair.right; } return tsFileMetaData; }