You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by xi...@apache.org on 2023/03/23 03:23:03 UTC

[iotdb] branch master updated: remove aligned time series id in nonAligned measurement iterator (#9410)

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

xingtanzjr 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 09c7fa77c4 remove aligned time series id in nonAligned measurement iterator (#9410)
09c7fa77c4 is described below

commit 09c7fa77c461a3c9825b92354cd666733ba3aaa3
Author: 周沛辰 <45...@users.noreply.github.com>
AuthorDate: Thu Mar 23 11:22:57 2023 +0800

    remove aligned time series id in nonAligned measurement iterator (#9410)
---
 .../impl/ReadChunkCompactionPerformer.java         |   7 +-
 .../execute/utils/MultiTsFileDeviceIterator.java   |   7 +
 .../utils/MultiTsFileDeviceIteratorTest.java       | 257 +++++++++++++++++----
 3 files changed, 220 insertions(+), 51 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/execute/performer/impl/ReadChunkCompactionPerformer.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/execute/performer/impl/ReadChunkCompactionPerformer.java
index 58d2a9e25e..e97f2e5fe3 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/execute/performer/impl/ReadChunkCompactionPerformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/execute/performer/impl/ReadChunkCompactionPerformer.java
@@ -170,13 +170,8 @@ public class ReadChunkCompactionPerformer implements ISeqCompactionPerformer {
         deviceIterator.iterateNotAlignedSeries(device, true);
     while (seriesIterator.hasNextSeries()) {
       checkThreadInterrupted();
-      String seriesID = seriesIterator.nextSeries();
-      if (seriesID.equals("")) {
-        // encounter a deleted aligned device, return
-        return;
-      }
       // TODO: we can provide a configuration item to enable concurrent between each series
-      PartialPath p = new PartialPath(device, seriesID);
+      PartialPath p = new PartialPath(device, seriesIterator.nextSeries());
       // TODO: seriesIterator needs to be refactor.
       // This statement must be called before next hasNextSeries() called, or it may be trapped in a
       // dead-loop.
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/execute/utils/MultiTsFileDeviceIterator.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/execute/utils/MultiTsFileDeviceIterator.java
index c10a2bb9f4..7572e797e1 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/execute/utils/MultiTsFileDeviceIterator.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/execute/utils/MultiTsFileDeviceIterator.java
@@ -377,6 +377,9 @@ public class MultiTsFileDeviceIterator implements AutoCloseable {
     }
   }
 
+  /*
+  NonAligned measurement iterator.
+   */
   public class MeasurementIterator {
     private Map<TsFileResource, TsFileSequenceReader> readerMap;
     private String device;
@@ -429,6 +432,10 @@ public class MultiTsFileDeviceIterator implements AutoCloseable {
         if (chunkMetadataListMap.size() == 0) {
           if (chunkMetadataIteratorMap.get(resource).hasNext()) {
             chunkMetadataListMap = chunkMetadataIteratorMap.get(resource).next();
+            if (chunkMetadataListMap.containsKey("")) {
+              // encounter deleted aligned series, then remove it
+              chunkMetadataListMap.remove("");
+            }
             chunkMetadataCacheMap.put(reader, chunkMetadataListMap);
           } else {
             continue;
diff --git a/server/src/test/java/org/apache/iotdb/db/engine/compaction/utils/MultiTsFileDeviceIteratorTest.java b/server/src/test/java/org/apache/iotdb/db/engine/compaction/utils/MultiTsFileDeviceIteratorTest.java
index 5e4c60e4ed..a6d1612889 100644
--- a/server/src/test/java/org/apache/iotdb/db/engine/compaction/utils/MultiTsFileDeviceIteratorTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/engine/compaction/utils/MultiTsFileDeviceIteratorTest.java
@@ -349,6 +349,29 @@ public class MultiTsFileDeviceIteratorTest extends AbstractCompactionTest {
     createFiles(2, 10, 15, 100, 2000, 2000, 50, 50, true, true);
     tsFileManager.addAll(seqResources, true);
 
+    // sort the deviceId in lexicographical order from small to large
+    List<String> deviceIds = new ArrayList<>();
+    for (int i = 0; i < 30; i++) {
+      deviceIds.add("root.testsg.d" + (i + TsFileGeneratorUtils.getAlignDeviceOffset()));
+    }
+    deviceIds.sort(String::compareTo);
+
+    int deviceNum = 0;
+    try (MultiTsFileDeviceIterator multiTsFileDeviceIterator =
+        new MultiTsFileDeviceIterator(tsFileManager.getTsFileList(true))) {
+      while (multiTsFileDeviceIterator.hasNextDevice()) {
+        Pair<String, Boolean> deviceInfo = multiTsFileDeviceIterator.nextDevice();
+        Assert.assertEquals(deviceIds.get(deviceNum), deviceInfo.left);
+        if (Integer.parseInt(deviceInfo.left.substring(13)) < 10) {
+          Assert.assertTrue(deviceInfo.right);
+        } else {
+          Assert.assertFalse(deviceInfo.right);
+        }
+        deviceNum++;
+      }
+    }
+    Assert.assertEquals(30, deviceNum);
+
     List<PartialPath> timeseriesPaths = new ArrayList<>();
     for (int i = 0; i < 30; i++) {
       for (int j = 0; j < 15; j++) {
@@ -399,16 +422,18 @@ public class MultiTsFileDeviceIteratorTest extends AbstractCompactionTest {
     createFiles(1, 10, 5, 100, 2000, 2000, 50, 50, false, true);
     tsFileManager.add(seqResources.get(seqResources.size() - 1), true);
 
-    sourceData = readSourceFiles(timeseriesPaths, Collections.emptyList());
-
-    // sort the deviceId in lexicographical order from small to large
-    List<String> deviceIds = new ArrayList<>();
+    timeseriesPaths.clear();
     for (int i = 0; i < 30; i++) {
-      deviceIds.add("root.testsg.d" + (i + TsFileGeneratorUtils.getAlignDeviceOffset()));
+      for (int j = 0; j < 15; j++) {
+        timeseriesPaths.add(
+            new MeasurementPath(
+                COMPACTION_TEST_SG + PATH_SEPARATOR + "d" + i + PATH_SEPARATOR + "s" + j,
+                TSDataType.INT64));
+      }
     }
-    deviceIds.sort(String::compareTo);
+    sourceData = readSourceFiles(timeseriesPaths, Collections.emptyList());
 
-    int deviceNum = 0;
+    deviceNum = 0;
     try (MultiTsFileDeviceIterator multiTsFileDeviceIterator =
         new MultiTsFileDeviceIterator(tsFileManager.getTsFileList(true))) {
       while (multiTsFileDeviceIterator.hasNextDevice()) {
@@ -453,7 +478,7 @@ public class MultiTsFileDeviceIteratorTest extends AbstractCompactionTest {
     createFiles(3, 10, 5, 100, 0, 0, 50, 50, true, true);
     createFiles(4, 30, 5, 100, 1000, 0, 50, 50, true, true);
 
-    // generate mods file, delete d0 ~ d9 with nonAligned property
+    // generate mods file, delete d0 ~ d9 with aligned property
     List<String> seriesPaths = new ArrayList<>();
     for (int i = 0; i < 10; i++) {
       for (int j = 0; j < 5; j++) {
@@ -464,14 +489,37 @@ public class MultiTsFileDeviceIteratorTest extends AbstractCompactionTest {
     generateModsFile(seriesPaths, unseqResources, Long.MIN_VALUE, Long.MAX_VALUE);
     deleteTimeseriesInMManager(seriesPaths);
 
-    // generate d0 ~ d9 with aligned property
+    // generate d0 ~ d9 with nonAligned property
     createFiles(2, 10, 15, 100, 2000, 2000, 50, 50, false, true);
     tsFileManager.addAll(seqResources, true);
 
+    // sort the deviceId in lexicographical order from small to large
+    List<String> deviceIds = new ArrayList<>();
+    for (int i = 0; i < 30; i++) {
+      deviceIds.add("root.testsg.d" + (i + TsFileGeneratorUtils.getAlignDeviceOffset()));
+    }
+    deviceIds.sort(String::compareTo);
+
+    int deviceNum = 0;
+    try (MultiTsFileDeviceIterator multiTsFileDeviceIterator =
+        new MultiTsFileDeviceIterator(tsFileManager.getTsFileList(true))) {
+      while (multiTsFileDeviceIterator.hasNextDevice()) {
+        Pair<String, Boolean> deviceInfo = multiTsFileDeviceIterator.nextDevice();
+        Assert.assertEquals(deviceIds.get(deviceNum), deviceInfo.left);
+        if (Integer.parseInt(deviceInfo.left.substring(13)) < 10) {
+          Assert.assertFalse(deviceInfo.right);
+        } else {
+          Assert.assertTrue(deviceInfo.right);
+        }
+        deviceNum++;
+      }
+    }
+    Assert.assertEquals(30, deviceNum);
+
     List<PartialPath> timeseriesPaths = new ArrayList<>();
     for (int i = 0; i < 30; i++) {
       for (int j = 0; j < 15; j++) {
-        if (i < 10) {
+        if (i >= 10) {
           timeseriesPaths.add(
               new AlignedPath(
                   COMPACTION_TEST_SG + PATH_SEPARATOR + "d" + i,
@@ -502,7 +550,7 @@ public class MultiTsFileDeviceIteratorTest extends AbstractCompactionTest {
     validateSeqFiles(true);
     validateTargetDatas(sourceData, Collections.emptyList());
 
-    // generate mods file, delete d0 ~ d9 with aligned property
+    // generate mods file, delete d0 ~ d9 with nonAligned property
     seriesPaths.clear();
     for (int i = 0; i < 10; i++) {
       for (int j = 0; j < 15; j++) {
@@ -514,20 +562,23 @@ public class MultiTsFileDeviceIteratorTest extends AbstractCompactionTest {
 
     deleteTimeseriesInMManager(seriesPaths);
 
-    // generate mods file, delete d0 ~ d9 with nonAligned property
+    // generate mods file, delete d0 ~ d9 with aligned property
     createFiles(1, 10, 5, 100, 2000, 2000, 50, 50, true, true);
     tsFileManager.add(seqResources.get(seqResources.size() - 1), true);
 
-    sourceData = readSourceFiles(timeseriesPaths, Collections.emptyList());
-
-    // sort the deviceId in lexicographical order from small to large
-    List<String> deviceIds = new ArrayList<>();
+    timeseriesPaths.clear();
     for (int i = 0; i < 30; i++) {
-      deviceIds.add("root.testsg.d" + (i + TsFileGeneratorUtils.getAlignDeviceOffset()));
+      for (int j = 0; j < 15; j++) {
+        timeseriesPaths.add(
+            new AlignedPath(
+                COMPACTION_TEST_SG + PATH_SEPARATOR + "d" + i,
+                Collections.singletonList("s" + j),
+                Collections.singletonList(new MeasurementSchema("s" + j, TSDataType.INT64))));
+      }
     }
-    deviceIds.sort(String::compareTo);
+    sourceData = readSourceFiles(timeseriesPaths, Collections.emptyList());
 
-    int deviceNum = 0;
+    deviceNum = 0;
     try (MultiTsFileDeviceIterator multiTsFileDeviceIterator =
         new MultiTsFileDeviceIterator(tsFileManager.getTsFileList(true))) {
       while (multiTsFileDeviceIterator.hasNextDevice()) {
@@ -585,6 +636,29 @@ public class MultiTsFileDeviceIteratorTest extends AbstractCompactionTest {
     createFiles(2, 10, 15, 100, 2000, 2000, 50, 50, true, true);
     tsFileManager.addAll(seqResources, true);
 
+    // sort the deviceId in lexicographical order from small to large
+    List<String> deviceIds = new ArrayList<>();
+    for (int i = 0; i < 30; i++) {
+      deviceIds.add("root.testsg.d" + (i + TsFileGeneratorUtils.getAlignDeviceOffset()));
+    }
+    deviceIds.sort(String::compareTo);
+
+    int deviceNum = 0;
+    try (MultiTsFileDeviceIterator multiTsFileDeviceIterator =
+        new MultiTsFileDeviceIterator(tsFileManager.getTsFileList(true))) {
+      while (multiTsFileDeviceIterator.hasNextDevice()) {
+        Pair<String, Boolean> deviceInfo = multiTsFileDeviceIterator.nextDevice();
+        Assert.assertEquals(deviceIds.get(deviceNum), deviceInfo.left);
+        if (Integer.parseInt(deviceInfo.left.substring(13)) < 10) {
+          Assert.assertTrue(deviceInfo.right);
+        } else {
+          Assert.assertFalse(deviceInfo.right);
+        }
+        deviceNum++;
+      }
+    }
+    Assert.assertEquals(30, deviceNum);
+
     List<PartialPath> timeseriesPaths = new ArrayList<>();
     for (int i = 0; i < 30; i++) {
       for (int j = 0; j < 15; j++) {
@@ -635,16 +709,18 @@ public class MultiTsFileDeviceIteratorTest extends AbstractCompactionTest {
     createFiles(1, 10, 5, 100, 2000, 2000, 50, 50, false, true);
     tsFileManager.add(seqResources.get(seqResources.size() - 1), true);
 
-    sourceData = readSourceFiles(timeseriesPaths, Collections.emptyList());
-
-    // sort the deviceId in lexicographical order from small to large
-    List<String> deviceIds = new ArrayList<>();
+    timeseriesPaths.clear();
     for (int i = 0; i < 30; i++) {
-      deviceIds.add("root.testsg.d" + (i + TsFileGeneratorUtils.getAlignDeviceOffset()));
+      for (int j = 0; j < 15; j++) {
+        timeseriesPaths.add(
+            new MeasurementPath(
+                COMPACTION_TEST_SG + PATH_SEPARATOR + "d" + i + PATH_SEPARATOR + "s" + j,
+                TSDataType.INT64));
+      }
     }
-    deviceIds.sort(String::compareTo);
+    sourceData = readSourceFiles(timeseriesPaths, Collections.emptyList());
 
-    int deviceNum = 0;
+    deviceNum = 0;
     try (MultiTsFileDeviceIterator multiTsFileDeviceIterator =
         new MultiTsFileDeviceIterator(tsFileManager.getTsFileList(true))) {
       while (multiTsFileDeviceIterator.hasNextDevice()) {
@@ -688,7 +764,7 @@ public class MultiTsFileDeviceIteratorTest extends AbstractCompactionTest {
     createFiles(3, 10, 5, 100, 0, 0, 50, 50, true, true);
     createFiles(4, 30, 5, 100, 1000, 0, 50, 50, true, true);
 
-    // generate mods file, delete d0 ~ d9 with nonAligned property
+    // generate mods file, delete d0 ~ d9 with aligned property
     List<String> seriesPaths = new ArrayList<>();
     for (int i = 0; i < 10; i++) {
       for (int j = 0; j < 5; j++) {
@@ -699,10 +775,33 @@ public class MultiTsFileDeviceIteratorTest extends AbstractCompactionTest {
     generateModsFile(seriesPaths, unseqResources, Long.MIN_VALUE, Long.MAX_VALUE);
     deleteTimeseriesInMManager(seriesPaths);
 
-    // generate d0 ~ d9 with aligned property
+    // generate d0 ~ d9 with nonAligned property
     createFiles(2, 10, 15, 100, 2000, 2000, 50, 50, false, true);
     tsFileManager.addAll(seqResources, true);
 
+    // sort the deviceId in lexicographical order from small to large
+    List<String> deviceIds = new ArrayList<>();
+    for (int i = 0; i < 30; i++) {
+      deviceIds.add("root.testsg.d" + (i + TsFileGeneratorUtils.getAlignDeviceOffset()));
+    }
+    deviceIds.sort(String::compareTo);
+
+    int deviceNum = 0;
+    try (MultiTsFileDeviceIterator multiTsFileDeviceIterator =
+        new MultiTsFileDeviceIterator(tsFileManager.getTsFileList(true))) {
+      while (multiTsFileDeviceIterator.hasNextDevice()) {
+        Pair<String, Boolean> deviceInfo = multiTsFileDeviceIterator.nextDevice();
+        Assert.assertEquals(deviceIds.get(deviceNum), deviceInfo.left);
+        if (Integer.parseInt(deviceInfo.left.substring(13)) < 10) {
+          Assert.assertFalse(deviceInfo.right);
+        } else {
+          Assert.assertTrue(deviceInfo.right);
+        }
+        deviceNum++;
+      }
+    }
+    Assert.assertEquals(30, deviceNum);
+
     List<PartialPath> timeseriesPaths = new ArrayList<>();
     for (int i = 0; i < 30; i++) {
       for (int j = 0; j < 15; j++) {
@@ -737,7 +836,7 @@ public class MultiTsFileDeviceIteratorTest extends AbstractCompactionTest {
     validateSeqFiles(true);
     validateTargetDatas(sourceData, Collections.emptyList());
 
-    // generate mods file, delete d0 ~ d9 with aligned property
+    // generate mods file, delete d0 ~ d9 with nonAligned property
     seriesPaths.clear();
     for (int i = 0; i < 10; i++) {
       for (int j = 0; j < 15; j++) {
@@ -749,20 +848,30 @@ public class MultiTsFileDeviceIteratorTest extends AbstractCompactionTest {
 
     deleteTimeseriesInMManager(seriesPaths);
 
-    // generate mods file, delete d0 ~ d9 with nonAligned property
+    // generate mods file, delete d0 ~ d9 with aligned property
     createFiles(1, 10, 5, 100, 2000, 2000, 50, 50, true, true);
     tsFileManager.add(seqResources.get(seqResources.size() - 1), true);
 
+    timeseriesPaths.clear();
+    for (int i = 0; i < 30; i++) {
+      for (int j = 0; j < 15; j++) {
+        timeseriesPaths.add(
+            new AlignedPath(
+                COMPACTION_TEST_SG + PATH_SEPARATOR + "d" + i,
+                Collections.singletonList("s" + j),
+                Collections.singletonList(new MeasurementSchema("s" + j, TSDataType.INT64))));
+      }
+    }
     sourceData = readSourceFiles(timeseriesPaths, Collections.emptyList());
 
     // sort the deviceId in lexicographical order from small to large
-    List<String> deviceIds = new ArrayList<>();
+    deviceIds = new ArrayList<>();
     for (int i = 0; i < 30; i++) {
       deviceIds.add("root.testsg.d" + (i + TsFileGeneratorUtils.getAlignDeviceOffset()));
     }
     deviceIds.sort(String::compareTo);
 
-    int deviceNum = 0;
+    deviceNum = 0;
     try (MultiTsFileDeviceIterator multiTsFileDeviceIterator =
         new MultiTsFileDeviceIterator(tsFileManager.getTsFileList(true))) {
       while (multiTsFileDeviceIterator.hasNextDevice()) {
@@ -823,6 +932,29 @@ public class MultiTsFileDeviceIteratorTest extends AbstractCompactionTest {
     createFiles(2, 10, 15, 100, 2000, 2000, 50, 50, true, true);
     tsFileManager.addAll(seqResources, true);
 
+    // sort the deviceId in lexicographical order from small to large
+    List<String> deviceIds = new ArrayList<>();
+    for (int i = 0; i < 30; i++) {
+      deviceIds.add("root.testsg.d" + (i + TsFileGeneratorUtils.getAlignDeviceOffset()));
+    }
+    deviceIds.sort(String::compareTo);
+
+    int deviceNum = 0;
+    try (MultiTsFileDeviceIterator multiTsFileDeviceIterator =
+        new MultiTsFileDeviceIterator(tsFileManager.getTsFileList(true))) {
+      while (multiTsFileDeviceIterator.hasNextDevice()) {
+        Pair<String, Boolean> deviceInfo = multiTsFileDeviceIterator.nextDevice();
+        Assert.assertEquals(deviceIds.get(deviceNum), deviceInfo.left);
+        if (Integer.parseInt(deviceInfo.left.substring(13)) < 10) {
+          Assert.assertTrue(deviceInfo.right);
+        } else {
+          Assert.assertFalse(deviceInfo.right);
+        }
+        deviceNum++;
+      }
+    }
+    Assert.assertEquals(30, deviceNum);
+
     List<PartialPath> timeseriesPaths = new ArrayList<>();
     for (int i = 0; i < 30; i++) {
       for (int j = 0; j < 15; j++) {
@@ -873,16 +1005,18 @@ public class MultiTsFileDeviceIteratorTest extends AbstractCompactionTest {
     createFiles(1, 10, 5, 100, 2000, 2000, 50, 50, false, true);
     tsFileManager.add(seqResources.get(seqResources.size() - 1), true);
 
-    sourceData = readSourceFiles(timeseriesPaths, Collections.emptyList());
-
-    // sort the deviceId in lexicographical order from small to large
-    List<String> deviceIds = new ArrayList<>();
+    timeseriesPaths.clear();
     for (int i = 0; i < 30; i++) {
-      deviceIds.add("root.testsg.d" + (i + TsFileGeneratorUtils.getAlignDeviceOffset()));
+      for (int j = 0; j < 15; j++) {
+        timeseriesPaths.add(
+            new MeasurementPath(
+                COMPACTION_TEST_SG + PATH_SEPARATOR + "d" + i + PATH_SEPARATOR + "s" + j,
+                TSDataType.INT64));
+      }
     }
-    deviceIds.sort(String::compareTo);
+    sourceData = readSourceFiles(timeseriesPaths, Collections.emptyList());
 
-    int deviceNum = 0;
+    deviceNum = 0;
     try (MultiTsFileDeviceIterator multiTsFileDeviceIterator =
         new MultiTsFileDeviceIterator(tsFileManager.getTsFileList(true))) {
       while (multiTsFileDeviceIterator.hasNextDevice()) {
@@ -928,7 +1062,7 @@ public class MultiTsFileDeviceIteratorTest extends AbstractCompactionTest {
     createFiles(3, 10, 5, 100, 0, 0, 50, 50, true, true);
     createFiles(4, 30, 5, 100, 1000, 0, 50, 50, true, true);
 
-    // generate mods file, delete d0 ~ d9 with nonAligned property
+    // generate mods file, delete d0 ~ d9 with aligned property
     List<String> seriesPaths = new ArrayList<>();
     for (int i = 0; i < 10; i++) {
       for (int j = 0; j < 5; j++) {
@@ -939,10 +1073,33 @@ public class MultiTsFileDeviceIteratorTest extends AbstractCompactionTest {
     generateModsFile(seriesPaths, unseqResources, Long.MIN_VALUE, Long.MAX_VALUE);
     deleteTimeseriesInMManager(seriesPaths);
 
-    // generate d0 ~ d9 with aligned property
+    // generate d0 ~ d9 with nonAligned property
     createFiles(2, 10, 15, 100, 2000, 2000, 50, 50, false, true);
     tsFileManager.addAll(seqResources, true);
 
+    // sort the deviceId in lexicographical order from small to large
+    List<String> deviceIds = new ArrayList<>();
+    for (int i = 0; i < 30; i++) {
+      deviceIds.add("root.testsg.d" + (i + TsFileGeneratorUtils.getAlignDeviceOffset()));
+    }
+    deviceIds.sort(String::compareTo);
+
+    int deviceNum = 0;
+    try (MultiTsFileDeviceIterator multiTsFileDeviceIterator =
+        new MultiTsFileDeviceIterator(tsFileManager.getTsFileList(true))) {
+      while (multiTsFileDeviceIterator.hasNextDevice()) {
+        Pair<String, Boolean> deviceInfo = multiTsFileDeviceIterator.nextDevice();
+        Assert.assertEquals(deviceIds.get(deviceNum), deviceInfo.left);
+        if (Integer.parseInt(deviceInfo.left.substring(13)) < 10) {
+          Assert.assertFalse(deviceInfo.right);
+        } else {
+          Assert.assertTrue(deviceInfo.right);
+        }
+        deviceNum++;
+      }
+    }
+    Assert.assertEquals(30, deviceNum);
+
     List<PartialPath> timeseriesPaths = new ArrayList<>();
     for (int i = 0; i < 30; i++) {
       for (int j = 0; j < 15; j++) {
@@ -977,7 +1134,7 @@ public class MultiTsFileDeviceIteratorTest extends AbstractCompactionTest {
     validateSeqFiles(true);
     validateTargetDatas(sourceData, Collections.emptyList());
 
-    // generate mods file, delete d0 ~ d9 with aligned property
+    // generate mods file, delete d0 ~ d9 with nonAligned property
     seriesPaths.clear();
     for (int i = 0; i < 10; i++) {
       for (int j = 0; j < 15; j++) {
@@ -989,20 +1146,30 @@ public class MultiTsFileDeviceIteratorTest extends AbstractCompactionTest {
 
     deleteTimeseriesInMManager(seriesPaths);
 
-    // generate mods file, delete d0 ~ d9 with nonAligned property
+    // generate mods file, delete d0 ~ d9 with aligned property
     createFiles(1, 10, 5, 100, 2000, 2000, 50, 50, true, true);
     tsFileManager.add(seqResources.get(seqResources.size() - 1), true);
 
+    timeseriesPaths.clear();
+    for (int i = 0; i < 30; i++) {
+      for (int j = 0; j < 15; j++) {
+        timeseriesPaths.add(
+            new AlignedPath(
+                COMPACTION_TEST_SG + PATH_SEPARATOR + "d" + i,
+                Collections.singletonList("s" + j),
+                Collections.singletonList(new MeasurementSchema("s" + j, TSDataType.INT64))));
+      }
+    }
     sourceData = readSourceFiles(timeseriesPaths, Collections.emptyList());
 
     // sort the deviceId in lexicographical order from small to large
-    List<String> deviceIds = new ArrayList<>();
+    deviceIds = new ArrayList<>();
     for (int i = 0; i < 30; i++) {
       deviceIds.add("root.testsg.d" + (i + TsFileGeneratorUtils.getAlignDeviceOffset()));
     }
     deviceIds.sort(String::compareTo);
 
-    int deviceNum = 0;
+    deviceNum = 0;
     try (MultiTsFileDeviceIterator multiTsFileDeviceIterator =
         new MultiTsFileDeviceIterator(tsFileManager.getTsFileList(true))) {
       while (multiTsFileDeviceIterator.hasNextDevice()) {