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

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


The following commit(s) were added to refs/heads/tsfile_name by this push:
     new 35086c870d Update filename when upgrading from old version  (#6603)
35086c870d is described below

commit 35086c870d660b1a3f03630163468989d4e86a17
Author: Alan Choo <[email protected]>
AuthorDate: Wed Jul 6 19:06:59 2022 +0800

    Update filename when upgrading from old version  (#6603)
---
 .../org/apache/iotdb/db/conf/IoTDBStartCheck.java  |  7 ++
 .../compaction/inner/InnerSpaceCompactionTask.java |  2 +-
 .../impl/ReadPointCompactionPerformer.java         | 10 ++-
 .../iotdb/db/engine/storagegroup/DataRegion.java   | 79 ++++++++++++++++------
 .../db/engine/storagegroup/TsFileManager.java      | 18 -----
 5 files changed, 71 insertions(+), 45 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBStartCheck.java 
b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBStartCheck.java
index ec23692ef3..76cb550da2 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBStartCheck.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBStartCheck.java
@@ -114,6 +114,8 @@ public class IoTDBStartCheck {
   private static final String DATA_REGION_CONSENSUS_PROTOCOL = 
"data_region_consensus_protocol";
   private static final String IOTDB_VERSION_STRING = "iotdb_version";
 
+  private boolean upgradeFromOldVersion = false;
+
   public static IoTDBStartCheck getInstance() {
     return IoTDBConfigCheckHolder.INSTANCE;
   }
@@ -237,6 +239,7 @@ public class IoTDBStartCheck {
       logger.error("IoTDB version is too old, please upgrade to 0.12 
firstly.");
       System.exit(-1);
     } else if (versionString.startsWith("0.12") || 
versionString.startsWith("0.13")) {
+      upgradeFromOldVersion = true;
       checkWALNotExists();
       upgradePropertiesFile();
       MetadataUpgrader.upgrade();
@@ -474,4 +477,8 @@ public class IoTDBStartCheck {
     logger.error("Unexpected consensus group type");
     return false;
   }
+
+  public boolean isUpgradeFromOldVersion() {
+    return upgradeFromOldVersion;
+  }
 }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/InnerSpaceCompactionTask.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/InnerSpaceCompactionTask.java
index 7895307a39..319286f99e 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/InnerSpaceCompactionTask.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/InnerSpaceCompactionTask.java
@@ -111,7 +111,7 @@ public class InnerSpaceCompactionTask extends 
AbstractCompactionTask {
       targetTsFileResource =
           TsFileNameGenerator.getInnerCompactionTargetFileResource(
               selectedTsFileResourceList, sequence);
-    } catch (IOException e) {
+    } catch (Exception e) {
       LOGGER.error("Failed to get target file for {}", 
selectedTsFileResourceList, e);
       return;
     }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/performer/impl/ReadPointCompactionPerformer.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/compaction/performer/impl/ReadPointCompactionPerformer.java
index eecb159196..6dcf802127 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/performer/impl/ReadPointCompactionPerformer.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/compaction/performer/impl/ReadPointCompactionPerformer.java
@@ -34,7 +34,7 @@ import 
org.apache.iotdb.db.engine.compaction.writer.AbstractCompactionWriter;
 import org.apache.iotdb.db.engine.compaction.writer.CrossSpaceCompactionWriter;
 import org.apache.iotdb.db.engine.compaction.writer.InnerSpaceCompactionWriter;
 import org.apache.iotdb.db.engine.querycontext.QueryDataSource;
-import org.apache.iotdb.db.engine.storagegroup.TsFileNameGenerator;
+import org.apache.iotdb.db.engine.storagegroup.TsFileName;
 import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
 import org.apache.iotdb.db.exception.StorageEngineException;
 import org.apache.iotdb.db.metadata.path.AlignedPath;
@@ -253,12 +253,10 @@ public class ReadPointCompactionPerformer
     allResources.sort(
         (o1, o2) -> {
           try {
-            TsFileNameGenerator.TsFileName n1 =
-                TsFileNameGenerator.getTsFileName(o1.getTsFile().getName());
-            TsFileNameGenerator.TsFileName n2 =
-                TsFileNameGenerator.getTsFileName(o2.getTsFile().getName());
+            TsFileName n1 = TsFileName.parse(o1.getTsFile().getName());
+            TsFileName n2 = TsFileName.parse(o2.getTsFile().getName());
             return (int) (n2.getVersion() - n1.getVersion());
-          } catch (IOException e) {
+          } catch (Exception e) {
             return 0;
           }
         });
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/DataRegion.java 
b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/DataRegion.java
index c8ceecd187..1568ad04aa 100755
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/DataRegion.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/DataRegion.java
@@ -31,6 +31,7 @@ import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.consensus.ConsensusFactory;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
+import org.apache.iotdb.db.conf.IoTDBStartCheck;
 import org.apache.iotdb.db.conf.directories.DirectoryManager;
 import org.apache.iotdb.db.engine.StorageEngine;
 import org.apache.iotdb.db.engine.StorageEngineV2;
@@ -118,6 +119,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -426,6 +428,12 @@ public class DataRegion {
     }
 
     try {
+      // check whether upgrading from v0.12, v.13
+      // Notice: delete this when release v0.15
+      if (IoTDBStartCheck.getInstance().isUpgradeFromOldVersion()) {
+        upgradeTsFileName();
+      }
+
       // collect candidate TsFiles from sequential and unsequential data 
directory
       Pair<List<TsFileResource>, List<TsFileResource>> seqTsFilesPair =
           
getAllFiles(DirectoryManager.getInstance().getAllSequenceFileFolders());
@@ -561,6 +569,46 @@ public class DataRegion {
     }
   }
 
+  private void upgradeTsFileName() {
+    List<File> tsFiles = new ArrayList<>();
+    for (String baseDir : DirectoryManager.getInstance().getAllFilesFolders()) 
{
+      File fileFolder =
+          fsFactory.getFile(baseDir + File.separator + 
logicalStorageGroupName, dataRegionId);
+      if (!fileFolder.exists()) {
+        continue;
+      }
+      File[] subFiles = fileFolder.listFiles();
+      if (subFiles != null) {
+        for (File partitionFolder : subFiles) {
+          if (!partitionFolder.isDirectory()) {
+            logger.warn("{} is not a directory.", 
partitionFolder.getAbsolutePath());
+          } else if 
(!partitionFolder.getName().equals(IoTDBConstant.UPGRADE_FOLDER_NAME)) {
+            // some TsFileResource may be being persisted when the system 
crashed, try recovering
+            // such resources
+            continueFailedRenames(partitionFolder, TEMP_SUFFIX);
+            Collections.addAll(
+                tsFiles,
+                fsFactory.listFilesBySuffix(partitionFolder.getAbsolutePath(), 
TSFILE_SUFFIX));
+          }
+        }
+      }
+    }
+
+    tsFiles.sort(Comparator.comparingLong(file -> 
TsFileName.parseVersion(file.getName())));
+    int curr = 0, next = 1;
+    while (next < tsFiles.size()) {
+      TsFileName currFileName = TsFileName.parse(tsFiles.get(curr).getName());
+      TsFileName nextFileName = TsFileName.parse(tsFiles.get(next).getName());
+      if (currFileName.getTime() > nextFileName.getTime()) {
+        currFileName.setTime(nextFileName.getTime());
+        TsFileResource tsFileResource = new TsFileResource(tsFiles.get(curr));
+        tsFileResource.renameTo(currFileName.toFileName());
+      }
+      curr = next;
+      next++;
+    }
+  }
+
   private void initCompaction() {
     if (!config.isEnableSeqSpaceCompaction()
         && !config.isEnableUnseqSpaceCompaction()
@@ -617,7 +665,6 @@ public class DataRegion {
    */
   @SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity 
warning
   private void updateLatestFlushedTime() throws IOException {
-
     VersionController versionController =
         new SimpleFileVersionController(storageGroupSysDir.getPath());
     long currentVersion = versionController.currVersion();
@@ -656,7 +703,7 @@ public class DataRegion {
 
   @SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity 
warning
   private Pair<List<TsFileResource>, List<TsFileResource>> 
getAllFiles(List<String> folders)
-      throws IOException, DataRegionException {
+      throws IOException {
     List<File> tsFiles = new ArrayList<>();
     List<File> upgradeFiles = new ArrayList<>();
     for (String baseDir : folders) {
@@ -732,20 +779,19 @@ public class DataRegion {
   }
 
   /** check if the tsfile's time is smaller than system current time */
-  private void checkTsFileTime(File tsFile) throws DataRegionException {
+  private void checkTsFileTime(File tsFile) {
     String[] items = tsFile.getName().replace(TSFILE_SUFFIX, 
"").split(FILE_NAME_SEPARATOR);
     long fileTime = Long.parseLong(items[0]);
     long currentTime = System.currentTimeMillis();
     if (fileTime > currentTime) {
-      throw new DataRegionException(
-          String.format(
-              "data region %s[%s] is down, because the time of tsfile %s is 
larger than system current time, "
-                  + "file time is %d while system current time is %d, please 
check it.",
-              logicalStorageGroupName,
-              dataRegionId,
-              tsFile.getAbsolutePath(),
-              fileTime,
-              currentTime));
+      logger.error(
+          "data region {}[{}] is down, because the time of tsfile {} is larger 
than system current time, file time is {} while system current time is {}, 
please check it.",
+          logicalStorageGroupName,
+          dataRegionId,
+          tsFile.getAbsolutePath(),
+          fileTime,
+          currentTime);
+      System.exit(-1);
     }
   }
 
@@ -1538,14 +1584,7 @@ public class DataRegion {
 
     String filePath =
         TsFileNameGenerator.generateNewTsFilePathWithMkdir(
-            sequence,
-            logicalStorageGroupName,
-            dataRegionId,
-            timePartitionId,
-            createdTime,
-            version, // TODO: change version to 0L when field 
partitionMaxFileVersions is removed
-            0,
-            0);
+            sequence, logicalStorageGroupName, dataRegionId, timePartitionId, 
createdTime, 0, 0, 0);
 
     return getTsFileProcessor(sequence, filePath, timePartitionId);
   }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileManager.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileManager.java
index c563ddd58b..35954b848d 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileManager.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileManager.java
@@ -556,24 +556,6 @@ public class TsFileManager {
     }
   }
 
-  // 
({systemTime}-{versionNum}-{innerCompactionNum}-{crossCompactionNum}.tsfile)
-  public static int compareFileName(File o1, File o2) {
-    String[] items1 = o1.getName().replace(TSFILE_SUFFIX, 
"").split(FILE_NAME_SEPARATOR);
-    String[] items2 = o2.getName().replace(TSFILE_SUFFIX, 
"").split(FILE_NAME_SEPARATOR);
-    long ver1 = Long.parseLong(items1[0]);
-    long ver2 = Long.parseLong(items2[0]);
-    int cmp = Long.compare(ver1, ver2);
-    if (cmp == 0) {
-      int cmpVersion = Long.compare(Long.parseLong(items1[1]), 
Long.parseLong(items2[1]));
-      if (cmpVersion == 0) {
-        return Long.compare(Long.parseLong(items1[2]), 
Long.parseLong(items2[2]));
-      }
-      return cmpVersion;
-    } else {
-      return cmp;
-    }
-  }
-
   public long getNextCompactionTaskId() {
     return currentCompactionTaskSerialId.getAndIncrement();
   }

Reply via email to