You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by lt...@apache.org on 2019/10/23 01:58:28 UTC

[incubator-iotdb] branch reimpl_sync_V2 updated: fix ut

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

lta pushed a commit to branch reimpl_sync_V2
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git


The following commit(s) were added to refs/heads/reimpl_sync_V2 by this push:
     new f472427  fix ut
f472427 is described below

commit f4724276c0ab90001dedbbc8952ae9320ce22101
Author: lta <li...@163.com>
AuthorDate: Wed Oct 23 09:58:12 2019 +0800

    fix ut
---
 .../engine/storagegroup/StorageGroupProcessor.java | 160 ++++-----
 .../db/sync/receiver/load/FileLoaderTest.java      | 390 ++++++++++-----------
 2 files changed, 258 insertions(+), 292 deletions(-)

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 3e9dda9..2625030 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
@@ -986,100 +986,6 @@ public class StorageGroupProcessor {
     }
     logger.info("{} a merge task ends", storageGroupName);
   }
-//
-//  /**
-//   * Load a new tsfile to storage group processor
-//   *
-//   * Firstly, determine the loading type of the file, whether it needs to be loaded in sequence list
-//   * or unsequence list.
-//   *
-//   * Secondly, execute the loading process by the type.
-//   *
-//   * Finally, update the latestTimeForEachDevice and latestFlushedTimeForEachDevice.
-//   *
-//   * @param newTsFileResource tsfile resource
-//   * @UsedBy sync module.
-//   */
-//  public void loadNewTsFile(TsFileResource newTsFileResource)
-//      throws TsFileProcessorException {
-//    File tsfileToBeInserted = newTsFileResource.getFile();
-//    writeLock();
-//    mergeLock.writeLock().lock();
-//    try {
-//      boolean isOverlap = false;
-//      int preIndex = -1, subsequentIndex = sequenceFileList.size();
-//
-//      // check new tsfile
-//      outer:
-//      for (int i = 0; i < sequenceFileList.size(); i++) {
-//        if (sequenceFileList.get(i).getFile().getName().equals(tsfileToBeInserted.getName())) {
-//          return;
-//        }
-//        if (i == sequenceFileList.size() - 1 && sequenceFileList.get(i).getEndTimeMap().isEmpty()) {
-//          continue;
-//        }
-//        boolean hasPre = false, hasSubsequence = false;
-//        for (String device : newTsFileResource.getStartTimeMap().keySet()) {
-//          if (sequenceFileList.get(i).getStartTimeMap().containsKey(device)) {
-//            long startTime1 = sequenceFileList.get(i).getStartTimeMap().get(device);
-//            long endTime1 = sequenceFileList.get(i).getEndTimeMap().get(device);
-//            long startTime2 = newTsFileResource.getStartTimeMap().get(device);
-//            long endTime2 = newTsFileResource.getEndTimeMap().get(device);
-//            if (startTime1 > endTime2) {
-//              hasSubsequence = true;
-//            } else if (startTime2 > endTime1) {
-//              hasPre = true;
-//            } else {
-//              isOverlap = true;
-//              break outer;
-//            }
-//          }
-//        }
-//        if (hasPre && hasSubsequence) {
-//          isOverlap = true;
-//          break;
-//        }
-//        if (!hasPre && hasSubsequence) {
-//          subsequentIndex = i;
-//          break;
-//        }
-//        if (hasPre) {
-//          preIndex = i;
-//        }
-//      }
-//
-//      // loading tsfile by type
-//      if (isOverlap) {
-//        loadTsFileByType(LoadTsFileType.LOAD_UNSEQUENCE, tsfileToBeInserted, newTsFileResource,
-//            unSequenceFileList.size());
-//      } else {
-//
-//        // check whether the file name needs to be renamed.
-//        if (subsequentIndex != sequenceFileList.size() || preIndex == -1) {
-//          String newFileName = getFileNameForLoadingFile(tsfileToBeInserted.getName(), preIndex,
-//              subsequentIndex);
-//          if (!newFileName.equals(tsfileToBeInserted.getName())) {
-//            logger.info("Tsfile {} must be renamed to {} for loading into the sequence list.",
-//                tsfileToBeInserted.getName(), newFileName);
-//            newTsFileResource.setFile(new File(tsfileToBeInserted.getParentFile(), newFileName));
-//          }
-//        }
-//        loadTsFileByType(LoadTsFileType.LOAD_SEQUENCE, tsfileToBeInserted, newTsFileResource,
-//            getBinarySearchIndex(newTsFileResource));
-//      }
-//
-//      // update latest time map
-//      updateLatestTimeMap(newTsFileResource);
-//    } catch (TsFileProcessorException | DiskSpaceInsufficientException e) {
-//      logger.error("Failed to append the tsfile {} to storage group processor {}.",
-//          tsfileToBeInserted.getAbsolutePath(), tsfileToBeInserted.getParentFile().getName());
-//      IoTDBDescriptor.getInstance().getConfig().setReadOnly(true);
-//      throw new TsFileProcessorException(e);
-//    } finally {
-//      mergeLock.writeLock().unlock();
-//      writeUnlock();
-//    }
-//  }
 
   /**
    * Load a new tsfile to storage group processor
@@ -1100,8 +1006,69 @@ public class StorageGroupProcessor {
     writeLock();
     mergeLock.writeLock().lock();
     try {
-      loadTsFileByType(LoadTsFileType.LOAD_SEQUENCE, tsfileToBeInserted, newTsFileResource,
-          getBinarySearchIndex(newTsFileResource));
+      boolean isOverlap = false;
+      int preIndex = -1, subsequentIndex = sequenceFileList.size();
+
+      // check new tsfile
+      outer:
+      for (int i = 0; i < sequenceFileList.size(); i++) {
+        if (sequenceFileList.get(i).getFile().getName().equals(tsfileToBeInserted.getName())) {
+          return;
+        }
+        if (i == sequenceFileList.size() - 1 && sequenceFileList.get(i).getEndTimeMap().isEmpty()) {
+          continue;
+        }
+        boolean hasPre = false, hasSubsequence = false;
+        for (String device : newTsFileResource.getStartTimeMap().keySet()) {
+          if (sequenceFileList.get(i).getStartTimeMap().containsKey(device)) {
+            long startTime1 = sequenceFileList.get(i).getStartTimeMap().get(device);
+            long endTime1 = sequenceFileList.get(i).getEndTimeMap().get(device);
+            long startTime2 = newTsFileResource.getStartTimeMap().get(device);
+            long endTime2 = newTsFileResource.getEndTimeMap().get(device);
+            if (startTime1 > endTime2) {
+              hasSubsequence = true;
+            } else if (startTime2 > endTime1) {
+              hasPre = true;
+            } else {
+              isOverlap = true;
+              break outer;
+            }
+          }
+        }
+        if (hasPre && hasSubsequence) {
+          isOverlap = true;
+          break;
+        }
+        if (!hasPre && hasSubsequence) {
+          subsequentIndex = i;
+          break;
+        }
+        if (hasPre) {
+          preIndex = i;
+        }
+      }
+
+      // loading tsfile by type
+      if (isOverlap) {
+        loadTsFileByType(LoadTsFileType.LOAD_UNSEQUENCE, tsfileToBeInserted, newTsFileResource,
+            unSequenceFileList.size());
+      } else {
+
+        // check whether the file name needs to be renamed.
+        if (subsequentIndex != sequenceFileList.size() || preIndex == -1) {
+          String newFileName = getFileNameForLoadingFile(tsfileToBeInserted.getName(), preIndex,
+              subsequentIndex);
+          if (!newFileName.equals(tsfileToBeInserted.getName())) {
+            logger.info("Tsfile {} must be renamed to {} for loading into the sequence list.",
+                tsfileToBeInserted.getName(), newFileName);
+            newTsFileResource.setFile(new File(tsfileToBeInserted.getParentFile(), newFileName));
+          }
+        }
+        loadTsFileByType(LoadTsFileType.LOAD_SEQUENCE, tsfileToBeInserted, newTsFileResource,
+            getBinarySearchIndex(newTsFileResource));
+      }
+
+      // update latest time map
       updateLatestTimeMap(newTsFileResource);
     } catch (TsFileProcessorException | DiskSpaceInsufficientException e) {
       logger.error("Failed to append the tsfile {} to storage group processor {}.",
@@ -1114,7 +1081,6 @@ public class StorageGroupProcessor {
     }
   }
 
-
   /**
    * Get an appropriate filename to ensure the order between files. The tsfile is named after
    * ({systemTime}-{versionNum}-{mergeNum}.tsfile).
diff --git a/server/src/test/java/org/apache/iotdb/db/sync/receiver/load/FileLoaderTest.java b/server/src/test/java/org/apache/iotdb/db/sync/receiver/load/FileLoaderTest.java
index b8f0fc1..82b8242 100644
--- a/server/src/test/java/org/apache/iotdb/db/sync/receiver/load/FileLoaderTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/sync/receiver/load/FileLoaderTest.java
@@ -86,202 +86,202 @@ public class FileLoaderTest {
     EnvironmentUtils.cleanEnv();
   }
 
-//  @Test
-//  public void loadNewTsfiles() throws IOException, StorageEngineException {
-//    fileLoader = FileLoader.createFileLoader(getReceiverFolderFile());
-//    Map<String, List<File>> allFileList = new HashMap<>();
-//    Map<String, Set<String>> correctSequenceLoadedFileMap = new HashMap<>();
-//
-//    // add some new tsfiles
-//    Random r = new Random(0);
-//    long time = System.currentTimeMillis();
-//    for (int i = 0; i < 3; i++) {
-//      for (int j = 0; j < 10; j++) {
-//        allFileList.putIfAbsent(SG_NAME + i, new ArrayList<>());
-//        correctSequenceLoadedFileMap.putIfAbsent(SG_NAME + i, new HashSet<>());
-//        String rand = String.valueOf(r.nextInt(10000));
-//        String fileName =
-//            getSnapshotFolder() + File.separator + SG_NAME + i + File.separator + (time + i * 100
-//                + j) + IoTDBConstant.TSFILE_NAME_SEPARATOR + rand
-//                + IoTDBConstant.TSFILE_NAME_SEPARATOR + "0.tsfile";
-//        File syncFile = new File(fileName);
-//        File dataFile = new File(
-//            syncFile.getParentFile().getParentFile().getParentFile().getParentFile()
-//                .getParentFile(), IoTDBConstant.SEQUENCE_FLODER_NAME
-//            + File.separatorChar + syncFile.getParentFile().getName() + File.separatorChar
-//            + syncFile.getName());
-//        correctSequenceLoadedFileMap.get(SG_NAME + i).add(dataFile.getAbsolutePath());
-//        allFileList.get(SG_NAME + i).add(syncFile);
-//        if (!syncFile.getParentFile().exists()) {
-//          syncFile.getParentFile().mkdirs();
-//        }
-//        if (!syncFile.exists() && !syncFile.createNewFile()) {
-//          LOGGER.error("Can not create new file {}", syncFile.getPath());
-//        }
-//        if (!new File(syncFile.getAbsolutePath() + TsFileResource.RESOURCE_SUFFIX).exists()
-//            && !new File(syncFile.getAbsolutePath() + TsFileResource.RESOURCE_SUFFIX)
-//            .createNewFile()) {
-//          LOGGER.error("Can not create new file {}", syncFile.getPath());
-//        }
-//        TsFileResource tsFileResource = new TsFileResource(syncFile);
-//        tsFileResource.getStartTimeMap().put(String.valueOf(i), (long) j * 10);
-//        tsFileResource.getEndTimeMap().put(String.valueOf(i), (long) j * 10 + 5);
-//        tsFileResource.serialize();
-//      }
-//    }
-//
-//    for (int i = 0; i < 3; i++) {
-//      StorageGroupProcessor processor = StorageEngine.getInstance().getProcessor(SG_NAME + i);
-//      assertTrue(processor.getSequenceFileList().isEmpty());
-//      assertTrue(processor.getUnSequenceFileList().isEmpty());
-//    }
-//
-//    assertTrue(getReceiverFolderFile().exists());
-//    for (List<File> set : allFileList.values()) {
-//      for (File newTsFile : set) {
-//        if (!newTsFile.getName().endsWith(TsFileResource.RESOURCE_SUFFIX)) {
-//          fileLoader.addTsfile(newTsFile);
-//        }
-//      }
-//    }
-//    fileLoader.endSync();
-//
-//    try {
-//      long waitTime = 0;
-//      while (FileLoaderManager.getInstance()
-//          .containsFileLoader(getReceiverFolderFile().getName())) {
-//        Thread.sleep(100);
-//        waitTime += 100;
-//        LOGGER.info("Has waited for loading new tsfiles {}ms", waitTime);
-//      }
-//    } catch (InterruptedException e) {
-//      LOGGER.error("Fail to wait for loading new tsfiles", e);
-//    }
-//
-//    assertFalse(new File(getReceiverFolderFile(), SyncConstant.RECEIVER_DATA_FOLDER_NAME).exists());
-//    Map<String, Set<String>> sequenceLoadedFileMap = new HashMap<>();
-//    for (int i = 0; i < 3; i++) {
-//      StorageGroupProcessor processor = StorageEngine.getInstance().getProcessor(SG_NAME + i);
-//      sequenceLoadedFileMap.putIfAbsent(SG_NAME + i, new HashSet<>());
+  @Test
+  public void loadNewTsfiles() throws IOException, StorageEngineException {
+    fileLoader = FileLoader.createFileLoader(getReceiverFolderFile());
+    Map<String, List<File>> allFileList = new HashMap<>();
+    Map<String, Set<String>> correctSequenceLoadedFileMap = new HashMap<>();
+
+    // add some new tsfiles
+    Random r = new Random(0);
+    long time = System.currentTimeMillis();
+    for (int i = 0; i < 3; i++) {
+      for (int j = 0; j < 10; j++) {
+        allFileList.putIfAbsent(SG_NAME + i, new ArrayList<>());
+        correctSequenceLoadedFileMap.putIfAbsent(SG_NAME + i, new HashSet<>());
+        String rand = String.valueOf(r.nextInt(10000));
+        String fileName =
+            getSnapshotFolder() + File.separator + SG_NAME + i + File.separator + (time + i * 100
+                + j) + IoTDBConstant.TSFILE_NAME_SEPARATOR + rand
+                + IoTDBConstant.TSFILE_NAME_SEPARATOR + "0.tsfile";
+        File syncFile = new File(fileName);
+        File dataFile = new File(
+            syncFile.getParentFile().getParentFile().getParentFile().getParentFile()
+                .getParentFile(), IoTDBConstant.SEQUENCE_FLODER_NAME
+            + File.separatorChar + syncFile.getParentFile().getName() + File.separatorChar
+            + syncFile.getName());
+        correctSequenceLoadedFileMap.get(SG_NAME + i).add(dataFile.getAbsolutePath());
+        allFileList.get(SG_NAME + i).add(syncFile);
+        if (!syncFile.getParentFile().exists()) {
+          syncFile.getParentFile().mkdirs();
+        }
+        if (!syncFile.exists() && !syncFile.createNewFile()) {
+          LOGGER.error("Can not create new file {}", syncFile.getPath());
+        }
+        if (!new File(syncFile.getAbsolutePath() + TsFileResource.RESOURCE_SUFFIX).exists()
+            && !new File(syncFile.getAbsolutePath() + TsFileResource.RESOURCE_SUFFIX)
+            .createNewFile()) {
+          LOGGER.error("Can not create new file {}", syncFile.getPath());
+        }
+        TsFileResource tsFileResource = new TsFileResource(syncFile);
+        tsFileResource.getStartTimeMap().put(String.valueOf(i), (long) j * 10);
+        tsFileResource.getEndTimeMap().put(String.valueOf(i), (long) j * 10 + 5);
+        tsFileResource.serialize();
+      }
+    }
+
+    for (int i = 0; i < 3; i++) {
+      StorageGroupProcessor processor = StorageEngine.getInstance().getProcessor(SG_NAME + i);
+      assertTrue(processor.getSequenceFileList().isEmpty());
+      assertTrue(processor.getUnSequenceFileList().isEmpty());
+    }
+
+    assertTrue(getReceiverFolderFile().exists());
+    for (List<File> set : allFileList.values()) {
+      for (File newTsFile : set) {
+        if (!newTsFile.getName().endsWith(TsFileResource.RESOURCE_SUFFIX)) {
+          fileLoader.addTsfile(newTsFile);
+        }
+      }
+    }
+    fileLoader.endSync();
+
+    try {
+      long waitTime = 0;
+      while (FileLoaderManager.getInstance()
+          .containsFileLoader(getReceiverFolderFile().getName())) {
+        Thread.sleep(100);
+        waitTime += 100;
+        LOGGER.info("Has waited for loading new tsfiles {}ms", waitTime);
+      }
+    } catch (InterruptedException e) {
+      LOGGER.error("Fail to wait for loading new tsfiles", e);
+    }
+
+    assertFalse(new File(getReceiverFolderFile(), SyncConstant.RECEIVER_DATA_FOLDER_NAME).exists());
+    Map<String, Set<String>> sequenceLoadedFileMap = new HashMap<>();
+    for (int i = 0; i < 3; i++) {
+      StorageGroupProcessor processor = StorageEngine.getInstance().getProcessor(SG_NAME + i);
+      sequenceLoadedFileMap.putIfAbsent(SG_NAME + i, new HashSet<>());
+      assertEquals(10, processor.getSequenceFileList().size());
+      for (TsFileResource tsFileResource : processor.getSequenceFileList()) {
+        sequenceLoadedFileMap.get(SG_NAME + i).add(tsFileResource.getFile().getAbsolutePath());
+      }
+      assertTrue(processor.getUnSequenceFileList().isEmpty());
+    }
+
+    assertEquals(sequenceLoadedFileMap.size(), correctSequenceLoadedFileMap.size());
+    for (Entry<String, Set<String>> entry : correctSequenceLoadedFileMap.entrySet()) {
+      String sg = entry.getKey();
+      assertEquals(entry.getValue().size(), sequenceLoadedFileMap.get(sg).size());
+      assertTrue(entry.getValue().containsAll(sequenceLoadedFileMap.get(sg)));
+    }
+
+    // add some overlap new tsfiles
+    fileLoader = FileLoader.createFileLoader(getReceiverFolderFile());
+    Map<String, Set<String>> correctUnSequenceLoadedFileMap = new HashMap<>();
+    allFileList = new HashMap<>();
+    r = new Random(1);
+    time = System.currentTimeMillis();
+    for (int i = 0; i < 3; i++) {
+      for (int j = 0; j < 10; j++) {
+        allFileList.putIfAbsent(SG_NAME + i, new ArrayList<>());
+        correctUnSequenceLoadedFileMap.putIfAbsent(SG_NAME + i, new HashSet<>());
+        String rand = String.valueOf(r.nextInt(10000));
+        String fileName =
+            getSnapshotFolder() + File.separator + SG_NAME + i + File.separator + (time + i * 100
+                + j) + IoTDBConstant.TSFILE_NAME_SEPARATOR + rand
+                + IoTDBConstant.TSFILE_NAME_SEPARATOR + "0.tsfile";
+        File syncFile = new File(fileName);
+        File dataFile = new File(
+            syncFile.getParentFile().getParentFile().getParentFile().getParentFile()
+                .getParentFile(), IoTDBConstant.UNSEQUENCE_FLODER_NAME
+            + File.separatorChar + syncFile.getParentFile().getName() + File.separatorChar
+            + syncFile.getName());
+        correctUnSequenceLoadedFileMap.get(SG_NAME + i).add(dataFile.getAbsolutePath());
+        allFileList.get(SG_NAME + i).add(syncFile);
+        if (!syncFile.getParentFile().exists()) {
+          syncFile.getParentFile().mkdirs();
+        }
+        if (!syncFile.exists() && !syncFile.createNewFile()) {
+          LOGGER.error("Can not create new file {}", syncFile.getPath());
+        }
+        if (!new File(syncFile.getAbsolutePath() + TsFileResource.RESOURCE_SUFFIX).exists()
+            && !new File(syncFile.getAbsolutePath() + TsFileResource.RESOURCE_SUFFIX)
+            .createNewFile()) {
+          LOGGER.error("Can not create new file {}", syncFile.getPath());
+        }
+        TsFileResource tsFileResource = new TsFileResource(syncFile);
+        tsFileResource.getStartTimeMap().put(String.valueOf(i), (long) j * 10);
+        tsFileResource.getEndTimeMap().put(String.valueOf(i), (long) j * 10 + 3);
+        tsFileResource.serialize();
+      }
+    }
+
+    for (int i = 0; i < 3; i++) {
+      StorageGroupProcessor processor = StorageEngine.getInstance().getProcessor(SG_NAME + i);
+      assertFalse(processor.getSequenceFileList().isEmpty());
+      assertTrue(processor.getUnSequenceFileList().isEmpty());
+    }
+
+    assertTrue(getReceiverFolderFile().exists());
+    for (List<File> set : allFileList.values()) {
+      for (File newTsFile : set) {
+        if (!newTsFile.getName().endsWith(TsFileResource.RESOURCE_SUFFIX)) {
+          fileLoader.addTsfile(newTsFile);
+        }
+      }
+    }
+    fileLoader.endSync();
+
+    try {
+      long waitTime = 0;
+      while (FileLoaderManager.getInstance()
+          .containsFileLoader(getReceiverFolderFile().getName())) {
+        Thread.sleep(100);
+        waitTime += 100;
+        LOGGER.info("Has waited for loading new tsfiles {}ms", waitTime);
+      }
+    } catch (InterruptedException e) {
+      LOGGER.error("Fail to wait for loading new tsfiles", e);
+    }
+
+    assertFalse(new File(getReceiverFolderFile(), SyncConstant.RECEIVER_DATA_FOLDER_NAME).exists());
+    sequenceLoadedFileMap = new HashMap<>();
+    for (int i = 0; i < 3; i++) {
+      StorageGroupProcessor processor = StorageEngine.getInstance().getProcessor(SG_NAME + i);
+      sequenceLoadedFileMap.putIfAbsent(SG_NAME + i, new HashSet<>());
 //      assertEquals(10, processor.getSequenceFileList().size());
-//      for (TsFileResource tsFileResource : processor.getSequenceFileList()) {
-//        sequenceLoadedFileMap.get(SG_NAME + i).add(tsFileResource.getFile().getAbsolutePath());
-//      }
-//      assertTrue(processor.getUnSequenceFileList().isEmpty());
-//    }
-//
-//    assertEquals(sequenceLoadedFileMap.size(), correctSequenceLoadedFileMap.size());
-//    for (Entry<String, Set<String>> entry : correctSequenceLoadedFileMap.entrySet()) {
-//      String sg = entry.getKey();
-//      assertEquals(entry.getValue().size(), sequenceLoadedFileMap.get(sg).size());
-//      assertTrue(entry.getValue().containsAll(sequenceLoadedFileMap.get(sg)));
-//    }
-//
-//    // add some overlap new tsfiles
-//    fileLoader = FileLoader.createFileLoader(getReceiverFolderFile());
-//    Map<String, Set<String>> correctUnSequenceLoadedFileMap = new HashMap<>();
-//    allFileList = new HashMap<>();
-//    r = new Random(1);
-//    time = System.currentTimeMillis();
-//    for (int i = 0; i < 3; i++) {
-//      for (int j = 0; j < 10; j++) {
-//        allFileList.putIfAbsent(SG_NAME + i, new ArrayList<>());
-//        correctUnSequenceLoadedFileMap.putIfAbsent(SG_NAME + i, new HashSet<>());
-//        String rand = String.valueOf(r.nextInt(10000));
-//        String fileName =
-//            getSnapshotFolder() + File.separator + SG_NAME + i + File.separator + (time + i * 100
-//                + j) + IoTDBConstant.TSFILE_NAME_SEPARATOR + rand
-//                + IoTDBConstant.TSFILE_NAME_SEPARATOR + "0.tsfile";
-//        File syncFile = new File(fileName);
-//        File dataFile = new File(
-//            syncFile.getParentFile().getParentFile().getParentFile().getParentFile()
-//                .getParentFile(), IoTDBConstant.UNSEQUENCE_FLODER_NAME
-//            + File.separatorChar + syncFile.getParentFile().getName() + File.separatorChar
-//            + syncFile.getName());
-//        correctUnSequenceLoadedFileMap.get(SG_NAME + i).add(dataFile.getAbsolutePath());
-//        allFileList.get(SG_NAME + i).add(syncFile);
-//        if (!syncFile.getParentFile().exists()) {
-//          syncFile.getParentFile().mkdirs();
-//        }
-//        if (!syncFile.exists() && !syncFile.createNewFile()) {
-//          LOGGER.error("Can not create new file {}", syncFile.getPath());
-//        }
-//        if (!new File(syncFile.getAbsolutePath() + TsFileResource.RESOURCE_SUFFIX).exists()
-//            && !new File(syncFile.getAbsolutePath() + TsFileResource.RESOURCE_SUFFIX)
-//            .createNewFile()) {
-//          LOGGER.error("Can not create new file {}", syncFile.getPath());
-//        }
-//        TsFileResource tsFileResource = new TsFileResource(syncFile);
-//        tsFileResource.getStartTimeMap().put(String.valueOf(i), (long) j * 10);
-//        tsFileResource.getEndTimeMap().put(String.valueOf(i), (long) j * 10 + 3);
-//        tsFileResource.serialize();
-//      }
-//    }
-//
-//    for (int i = 0; i < 3; i++) {
-//      StorageGroupProcessor processor = StorageEngine.getInstance().getProcessor(SG_NAME + i);
-//      assertFalse(processor.getSequenceFileList().isEmpty());
-//      assertTrue(processor.getUnSequenceFileList().isEmpty());
-//    }
-//
-//    assertTrue(getReceiverFolderFile().exists());
-//    for (List<File> set : allFileList.values()) {
-//      for (File newTsFile : set) {
-//        if (!newTsFile.getName().endsWith(TsFileResource.RESOURCE_SUFFIX)) {
-//          fileLoader.addTsfile(newTsFile);
-//        }
-//      }
-//    }
-//    fileLoader.endSync();
-//
-//    try {
-//      long waitTime = 0;
-//      while (FileLoaderManager.getInstance()
-//          .containsFileLoader(getReceiverFolderFile().getName())) {
-//        Thread.sleep(100);
-//        waitTime += 100;
-//        LOGGER.info("Has waited for loading new tsfiles {}ms", waitTime);
-//      }
-//    } catch (InterruptedException e) {
-//      LOGGER.error("Fail to wait for loading new tsfiles", e);
-//    }
-//
-//    assertFalse(new File(getReceiverFolderFile(), SyncConstant.RECEIVER_DATA_FOLDER_NAME).exists());
-//    sequenceLoadedFileMap = new HashMap<>();
-//    for (int i = 0; i < 3; i++) {
-//      StorageGroupProcessor processor = StorageEngine.getInstance().getProcessor(SG_NAME + i);
-//      sequenceLoadedFileMap.putIfAbsent(SG_NAME + i, new HashSet<>());
-////      assertEquals(10, processor.getSequenceFileList().size());
-//      for (TsFileResource tsFileResource : processor.getSequenceFileList()) {
-//        sequenceLoadedFileMap.get(SG_NAME + i).add(tsFileResource.getFile().getAbsolutePath());
-//      }
-//      assertFalse(processor.getUnSequenceFileList().isEmpty());
-//    }
-//
-//    assertEquals(sequenceLoadedFileMap.size(), correctSequenceLoadedFileMap.size());
-//    for (Entry<String, Set<String>> entry : correctSequenceLoadedFileMap.entrySet()) {
-//      String sg = entry.getKey();
-//      assertEquals(entry.getValue().size(), sequenceLoadedFileMap.get(sg).size());
-//      assertTrue(entry.getValue().containsAll(sequenceLoadedFileMap.get(sg)));
-//    }
-//
-//    Map<String, Set<String>> unsequenceLoadedFileMap = new HashMap<>();
-//    for (int i = 0; i < 3; i++) {
-//      StorageGroupProcessor processor = StorageEngine.getInstance().getProcessor(SG_NAME + i);
-//      unsequenceLoadedFileMap.putIfAbsent(SG_NAME + i, new HashSet<>());
-//      assertEquals(10, processor.getUnSequenceFileList().size());
-//      for (TsFileResource tsFileResource : processor.getUnSequenceFileList()) {
-//        unsequenceLoadedFileMap.get(SG_NAME + i).add(tsFileResource.getFile().getAbsolutePath());
-//      }
-//    }
-//
-//    assertEquals(unsequenceLoadedFileMap.size(), correctUnSequenceLoadedFileMap.size());
-//    for (Entry<String, Set<String>> entry : correctUnSequenceLoadedFileMap.entrySet()) {
-//      String sg = entry.getKey();
-//      assertEquals(entry.getValue().size(), unsequenceLoadedFileMap.get(sg).size());
-//      assertTrue(entry.getValue().containsAll(unsequenceLoadedFileMap.get(sg)));
-//    }
-//  }
+      for (TsFileResource tsFileResource : processor.getSequenceFileList()) {
+        sequenceLoadedFileMap.get(SG_NAME + i).add(tsFileResource.getFile().getAbsolutePath());
+      }
+      assertFalse(processor.getUnSequenceFileList().isEmpty());
+    }
+
+    assertEquals(sequenceLoadedFileMap.size(), correctSequenceLoadedFileMap.size());
+    for (Entry<String, Set<String>> entry : correctSequenceLoadedFileMap.entrySet()) {
+      String sg = entry.getKey();
+      assertEquals(entry.getValue().size(), sequenceLoadedFileMap.get(sg).size());
+      assertTrue(entry.getValue().containsAll(sequenceLoadedFileMap.get(sg)));
+    }
+
+    Map<String, Set<String>> unsequenceLoadedFileMap = new HashMap<>();
+    for (int i = 0; i < 3; i++) {
+      StorageGroupProcessor processor = StorageEngine.getInstance().getProcessor(SG_NAME + i);
+      unsequenceLoadedFileMap.putIfAbsent(SG_NAME + i, new HashSet<>());
+      assertEquals(10, processor.getUnSequenceFileList().size());
+      for (TsFileResource tsFileResource : processor.getUnSequenceFileList()) {
+        unsequenceLoadedFileMap.get(SG_NAME + i).add(tsFileResource.getFile().getAbsolutePath());
+      }
+    }
+
+    assertEquals(unsequenceLoadedFileMap.size(), correctUnSequenceLoadedFileMap.size());
+    for (Entry<String, Set<String>> entry : correctUnSequenceLoadedFileMap.entrySet()) {
+      String sg = entry.getKey();
+      assertEquals(entry.getValue().size(), unsequenceLoadedFileMap.get(sg).size());
+      assertTrue(entry.getValue().containsAll(unsequenceLoadedFileMap.get(sg)));
+    }
+  }
 
   @Test
   public void loadDeletedFileName()