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

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

commit ff9cb42521397c593407b57e55f543ba814e0107
Author: HTHou <[email protected]>
AuthorDate: Thu Jan 21 14:40:03 2021 +0800

    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();

Reply via email to