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.
*