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

qiaojialin 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 febdcb8  [IOTDB-2074] Fix NullPointerException when recovering 
compaction in MacOS (#4519)
febdcb8 is described below

commit febdcb8cde7231a0df7d1042f514860980652897
Author: 周沛辰 <[email protected]>
AuthorDate: Fri Dec 3 19:38:25 2021 +0800

    [IOTDB-2074] Fix NullPointerException when recovering compaction in MacOS 
(#4519)
---
 .../engine/storagegroup/StorageGroupProcessor.java  |  5 +++++
 .../recover/SizeTieredCompactionRecoverTest.java    | 21 +++++++++++++++++++++
 2 files changed, 26 insertions(+)

diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessor.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessor.java
index 43e3154..41edad5 100755
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessor.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessor.java
@@ -113,6 +113,7 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
+import java.util.regex.Pattern;
 
 import static org.apache.iotdb.db.conf.IoTDBConstant.FILE_NAME_SEPARATOR;
 import static 
org.apache.iotdb.db.engine.compaction.cross.inplace.task.CrossSpaceMergeTask.MERGE_SUFFIX;
@@ -555,6 +556,10 @@ public class StorageGroupProcessor {
         return;
       }
       for (File timePartitionDir : timePartitionDirs) {
+        if (!timePartitionDir.isDirectory()
+            || 
!Pattern.compile("[0-9]*").matcher(timePartitionDir.getName()).matches()) {
+          continue;
+        }
         File[] compactionLogs =
             
InnerSpaceCompactionUtils.findInnerSpaceCompactionLogs(timePartitionDir.getPath());
         for (File compactionLog : compactionLogs) {
diff --git 
a/server/src/test/java/org/apache/iotdb/db/engine/compaction/recover/SizeTieredCompactionRecoverTest.java
 
b/server/src/test/java/org/apache/iotdb/db/engine/compaction/recover/SizeTieredCompactionRecoverTest.java
index b5a15f9..3b8d798 100644
--- 
a/server/src/test/java/org/apache/iotdb/db/engine/compaction/recover/SizeTieredCompactionRecoverTest.java
+++ 
b/server/src/test/java/org/apache/iotdb/db/engine/compaction/recover/SizeTieredCompactionRecoverTest.java
@@ -26,8 +26,11 @@ import 
org.apache.iotdb.db.engine.compaction.inner.sizetiered.SizeTieredCompacti
 import 
org.apache.iotdb.db.engine.compaction.inner.utils.InnerSpaceCompactionUtils;
 import 
org.apache.iotdb.db.engine.compaction.inner.utils.SizeTieredCompactionLogger;
 import 
org.apache.iotdb.db.engine.compaction.utils.CompactionFileGeneratorUtils;
+import org.apache.iotdb.db.engine.flush.TsFileFlushPolicy;
+import org.apache.iotdb.db.engine.storagegroup.StorageGroupProcessor;
 import org.apache.iotdb.db.engine.storagegroup.TsFileNameGenerator;
 import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
+import org.apache.iotdb.db.exception.StorageGroupProcessorException;
 
 import org.apache.commons.io.FileUtils;
 import org.junit.After;
@@ -37,6 +40,7 @@ import org.junit.Test;
 
 import java.io.File;
 import java.io.FileOutputStream;
+import java.io.IOException;
 import java.lang.reflect.Field;
 import java.nio.channels.FileChannel;
 import java.util.ArrayList;
@@ -128,6 +132,23 @@ public class SizeTieredCompactionRecoverTest {
     dataDirsField.set(config, dataDirs);
   }
 
+  /** Test when a file that is not a directory exists under virtual 
storageGroup dir. */
+  @Test
+  public void testRecoverWithUncorrectTimePartionDir() {
+    try {
+      File timePartitionDir = new File(SEQ_FILE_DIR);
+      File f = new File(timePartitionDir.getParent() + File.separator + 
"test.tmp");
+      f.createNewFile();
+      new StorageGroupProcessor(
+          TestConstant.BASE_OUTPUT_PATH + File.separator + "data" + 
File.separator + "sequence",
+          "0",
+          new TsFileFlushPolicy.DirectFlushPolicy(),
+          COMPACTION_TEST_SG);
+    } catch (StorageGroupProcessorException | IOException e) {
+      Assert.fail(e.getMessage());
+    }
+  }
+
   /**
    * Test a compaction task in finished. The compaction log use file info to 
record files.
    *

Reply via email to