You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2021/01/21 08:19:50 UTC

[iotdb] branch master updated: fix some upgrade recover bugs (#2536)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 7a393ef  fix some upgrade recover bugs (#2536)
7a393ef is described below

commit 7a393ef2bf2b2a567ebef2b9430a0b56e9cd9f6e
Author: Haonan <hh...@outlook.com>
AuthorDate: Thu Jan 21 16:19:25 2021 +0800

    fix some upgrade recover bugs (#2536)
    
    fix some upgrade recover bugs
---
 .../apache/iotdb/db/engine/upgrade/UpgradeTask.java    |  3 ++-
 .../java/org/apache/iotdb/db/utils/UpgradeUtils.java   | 18 +++++++++++++-----
 2 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/engine/upgrade/UpgradeTask.java b/server/src/main/java/org/apache/iotdb/db/engine/upgrade/UpgradeTask.java
index deb8e27..3a977df 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/upgrade/UpgradeTask.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/upgrade/UpgradeTask.java
@@ -100,7 +100,8 @@ public class UpgradeTask extends WrappedRunnable {
       File upgradeFolder = upgradeResource.getTsFile().getParentFile();
       for (File tempPartitionDir : upgradeFolder.listFiles()) {
         if (tempPartitionDir.isDirectory() && 
-            fsFactory.getFile(tempPartitionDir, upgradeResource.getTsFile().getName()).exists()) {
+            fsFactory.getFile(tempPartitionDir, upgradeResource.getTsFile().getName() 
+                + TsFileResource.RESOURCE_SUFFIX).exists()) {
           TsFileResource resource = new TsFileResource(
               fsFactory.getFile(tempPartitionDir, upgradeResource.getTsFile().getName()));
           resource.deserialize();
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/UpgradeUtils.java b/server/src/main/java/org/apache/iotdb/db/utils/UpgradeUtils.java
index e16a118..da9bddd 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/UpgradeUtils.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/UpgradeUtils.java
@@ -101,11 +101,13 @@ public class UpgradeUtils {
         partitionDir.mkdir();
       }
       // move upgraded TsFile
-      fsFactory.moveFile(upgradedFile,
+      if (upgradedFile.exists()) {
+        fsFactory.moveFile(upgradedFile,
           fsFactory.getFile(partitionDir, upgradedFile.getName()));
-      // delete generated temp resource
-      Files.delete(fsFactory
-          .getFile(upgradedResource.getTsFile().toPath() + TsFileResource.RESOURCE_SUFFIX).toPath());
+      }
+      // get temp resource
+      File tempResourceFile = fsFactory
+          .getFile(upgradedResource.getTsFile().toPath() + TsFileResource.RESOURCE_SUFFIX);
       // move upgraded mods file
       File newModsFile = fsFactory
           .getFile(upgradedResource.getTsFile().toPath() + ModificationFile.FILE_SUFFIX);
@@ -116,10 +118,13 @@ public class UpgradeUtils {
       // re-serialize upgraded resource to correct place
       upgradedResource.setFile(
           fsFactory.getFile(partitionDir, upgradedFile.getName()));
-      if (newModsFile.exists()) {
+      if (fsFactory.getFile(partitionDir, newModsFile.getName()).exists()) {
         upgradedResource.getModFile();
       }
+      upgradedResource.setClosed(true);
       upgradedResource.serialize();
+      // delete generated temp resource file
+      Files.delete(tempResourceFile.toPath());
       // delete tmp partition folder when it is empty
       File tmpPartitionDir = upgradedFile.getParentFile();
       if (tmpPartitionDir.isDirectory() && tmpPartitionDir.listFiles().length == 0) {
@@ -161,6 +166,9 @@ public class UpgradeUtils {
             File upgradeDir = FSFactoryProducer.getFSFactory().getFile(key)
                 .getParentFile();
             File[] partitionDirs = upgradeDir.listFiles();
+            if (partitionDirs == null) {
+              return;
+            }
             for (File partitionDir : partitionDirs) {
               if (partitionDir.isDirectory()) {
                 File[] generatedFiles = partitionDir.listFiles();