You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by hu...@apache.org on 2022/12/06 06:36:55 UTC

[iotdb] branch master updated: Add an interface for query engine which storage engine must provide (#8345)

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

hui 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 11f369181a Add an interface for query engine which storage engine must provide (#8345)
11f369181a is described below

commit 11f369181a4b814270ea4d060dc9ef79037a5f0a
Author: liuminghui233 <36...@users.noreply.github.com>
AuthorDate: Tue Dec 6 14:36:49 2022 +0800

    Add an interface for query engine which storage engine must provide (#8345)
    
    Co-authored-by: JackieTien97 <ja...@gmail.com>
---
 .../statemachine/DataRegionStateMachine.java       |  12 +--
 .../org/apache/iotdb/db/engine/StorageEngine.java  |   6 +-
 .../iotdb/db/engine/load/LoadTsFileManager.java    |   2 +-
 .../iotdb/db/engine/snapshot/SnapshotTaker.java    |   8 +-
 .../iotdb/db/engine/storagegroup/DataRegion.java   | 114 ++++++++++-----------
 .../db/engine/storagegroup/DataRegionMetrics.java  |   2 +-
 .../engine/storagegroup/IDataRegionForQuery.java   |  47 +++++++++
 .../engine/storagegroup/TsFileProcessorInfo.java   |   2 +-
 .../db/engine/storagegroup/VirtualDataRegion.java  |  78 ++++++++++++++
 .../iotdb/db/mpp/execution/driver/DataDriver.java  |   4 +-
 .../db/mpp/execution/driver/DataDriverContext.java |   8 +-
 .../fragment/FragmentInstanceManager.java          |   4 +-
 .../last/AbstractUpdateLastCacheOperator.java      |   2 +-
 .../db/mpp/plan/planner/LocalExecutionPlanner.java |   4 +-
 .../org/apache/iotdb/db/rescon/SystemInfo.java     |  10 +-
 .../db/sync/sender/manager/LocalSyncManager.java   |   2 +-
 .../iotdb/db/sync/sender/pipe/TsFilePipe.java      |   2 +-
 .../sync/transport/client/SyncClientFactory.java   |   2 +-
 .../db/engine/snapshot/IoTDBSnapshotTest.java      |   2 +-
 .../db/engine/storagegroup/DataRegionTest.java     |   4 +-
 20 files changed, 219 insertions(+), 96 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/consensus/statemachine/DataRegionStateMachine.java b/server/src/main/java/org/apache/iotdb/db/consensus/statemachine/DataRegionStateMachine.java
index 6bd5fab3d1..c2c8bd0b7e 100644
--- a/server/src/main/java/org/apache/iotdb/db/consensus/statemachine/DataRegionStateMachine.java
+++ b/server/src/main/java/org/apache/iotdb/db/consensus/statemachine/DataRegionStateMachine.java
@@ -103,7 +103,7 @@ public class DataRegionStateMachine extends BaseStateMachine {
     } catch (Exception e) {
       logger.error(
           "Exception occurs when taking snapshot for {}-{} in {}",
-          region.getStorageGroupName(),
+          region.getDatabaseName(),
           region.getDataRegionId(),
           snapshotDir,
           e);
@@ -119,7 +119,7 @@ public class DataRegionStateMachine extends BaseStateMachine {
     } catch (Exception e) {
       logger.error(
           "Exception occurs when taking snapshot for {}-{} in {}",
-          region.getStorageGroupName(),
+          region.getDatabaseName(),
           region.getDataRegionId(),
           snapshotDir,
           e);
@@ -132,7 +132,7 @@ public class DataRegionStateMachine extends BaseStateMachine {
     DataRegion newRegion =
         new SnapshotLoader(
                 latestSnapshotRootDir.getAbsolutePath(),
-                region.getStorageGroupName(),
+                region.getDatabaseName(),
                 region.getDataRegionId())
             .loadSnapshotForStateMachine();
     if (newRegion == null) {
@@ -316,13 +316,13 @@ public class DataRegionStateMachine extends BaseStateMachine {
     try {
       return new SnapshotLoader(
               latestSnapshotRootDir.getAbsolutePath(),
-              region.getStorageGroupName(),
+              region.getDatabaseName(),
               region.getDataRegionId())
           .getSnapshotFileInfo().stream().map(File::toPath).collect(Collectors.toList());
     } catch (IOException e) {
       logger.error(
           "Meets error when getting snapshot files for {}-{}",
-          region.getStorageGroupName(),
+          region.getDatabaseName(),
           region.getDataRegionId(),
           e);
       return null;
@@ -450,7 +450,7 @@ public class DataRegionStateMachine extends BaseStateMachine {
     String snapshotDir =
         IoTDBDescriptor.getInstance().getConfig().getRatisDataRegionSnapshotDir()
             + File.separator
-            + region.getStorageGroupName()
+            + region.getDatabaseName()
             + "-"
             + region.getDataRegionId();
     try {
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/StorageEngine.java b/server/src/main/java/org/apache/iotdb/db/engine/StorageEngine.java
index 2323e720d4..3818568a13 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/StorageEngine.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/StorageEngine.java
@@ -508,7 +508,7 @@ public class StorageEngine implements IService {
   public void closeStorageGroupProcessor(String storageGroupPath, boolean isSeq) {
     List<Future<Void>> tasks = new ArrayList<>();
     for (DataRegion dataRegion : dataRegionMap.values()) {
-      if (dataRegion.getStorageGroupName().equals(storageGroupPath)) {
+      if (dataRegion.getDatabaseName().equals(storageGroupPath)) {
         if (isSeq) {
           for (TsFileProcessor tsFileProcessor : dataRegion.getWorkSequenceTsFileProcessors()) {
             tasks.add(
@@ -655,13 +655,13 @@ public class StorageEngine implements IService {
                 .equals(ConsensusFactory.IOT_CONSENSUS)) {
           WALManager.getInstance()
               .deleteWALNode(
-                  region.getStorageGroupName() + FILE_NAME_SEPARATOR + region.getDataRegionId());
+                  region.getDatabaseName() + FILE_NAME_SEPARATOR + region.getDataRegionId());
         }
         SyncService.getInstance().unregisterDataRegion(region.getDataRegionId());
       } catch (Exception e) {
         logger.error(
             "Error occurs when deleting data region {}-{}",
-            region.getStorageGroupName(),
+            region.getDatabaseName(),
             region.getDataRegionId(),
             e);
       } finally {
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/load/LoadTsFileManager.java b/server/src/main/java/org/apache/iotdb/db/engine/load/LoadTsFileManager.java
index fa9f7abd9b..4532977a67 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/load/LoadTsFileManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/load/LoadTsFileManager.java
@@ -290,7 +290,7 @@ public class LoadTsFileManager {
     public String toString() {
       return String.join(
           IoTDBConstant.FILE_NAME_SEPARATOR,
-          dataRegion.getStorageGroupName(),
+          dataRegion.getDatabaseName(),
           dataRegion.getDataRegionId(),
           Long.toString(timePartitionSlot.getStartTime()));
     }
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/snapshot/SnapshotTaker.java b/server/src/main/java/org/apache/iotdb/db/engine/snapshot/SnapshotTaker.java
index c01e5a0c25..f6c27f1fbc 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/snapshot/SnapshotTaker.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/snapshot/SnapshotTaker.java
@@ -105,14 +105,14 @@ public class SnapshotTaker {
       if (!success) {
         LOGGER.warn(
             "Failed to take snapshot for {}-{}, clean up",
-            dataRegion.getStorageGroupName(),
+            dataRegion.getDatabaseName(),
             dataRegion.getDataRegionId());
         cleanUpWhenFail(finalSnapshotId);
       } else {
         snapshotLogger.logEnd();
         LOGGER.info(
             "Successfully take snapshot for {}-{}, snapshot directory is {}",
-            dataRegion.getStorageGroupName(),
+            dataRegion.getDatabaseName(),
             dataRegion.getDataRegionId(),
             snapshotDir.getParentFile().getAbsolutePath() + File.separator + finalSnapshotId);
       }
@@ -121,7 +121,7 @@ public class SnapshotTaker {
     } catch (Exception e) {
       LOGGER.error(
           "Exception occurs when taking snapshot for {}-{}",
-          dataRegion.getStorageGroupName(),
+          dataRegion.getDatabaseName(),
           dataRegion.getDataRegionId(),
           e);
       return false;
@@ -226,7 +226,7 @@ public class SnapshotTaker {
     }
     stringBuilder.append(IoTDBConstant.SNAPSHOT_FOLDER_NAME);
     stringBuilder.append(File.separator);
-    stringBuilder.append(dataRegion.getStorageGroupName());
+    stringBuilder.append(dataRegion.getDatabaseName());
     stringBuilder.append("-");
     stringBuilder.append(dataRegion.getDataRegionId());
     stringBuilder.append(File.separator);
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/DataRegion.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/DataRegion.java
index c32c4f8f59..964c423f07 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/DataRegion.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/DataRegion.java
@@ -155,7 +155,7 @@ import static org.apache.iotdb.tsfile.common.constant.TsFileConstant.TSFILE_SUFF
  * <p>When a TsFileProcessor is closed, the closeUnsealedTsFileProcessorCallBack() method will be
  * called as a callback.
  */
-public class DataRegion {
+public class DataRegion implements IDataRegionForQuery {
 
   private static final IoTDBConfig config = IoTDBDescriptor.getInstance().getConfig();
   private static final Logger DEBUG_LOGGER = LoggerFactory.getLogger("QUERY_DEBUG");
@@ -213,7 +213,7 @@ public class DataRegion {
   /** data region id */
   private String dataRegionId;
   /** database name */
-  private String storageGroupName;
+  private String databaseName;
   /** database system directory */
   private File storageGroupSysDir;
   /** manage seqFileList and unSeqFileList */
@@ -273,21 +273,18 @@ public class DataRegion {
    * @param systemDir system dir path
    * @param dataRegionId data region id e.g. 1
    * @param fileFlushPolicy file flush policy
-   * @param storageGroupName database name e.g. root.sg1
+   * @param databaseName database name e.g. root.sg1
    */
   public DataRegion(
-      String systemDir,
-      String dataRegionId,
-      TsFileFlushPolicy fileFlushPolicy,
-      String storageGroupName)
+      String systemDir, String dataRegionId, TsFileFlushPolicy fileFlushPolicy, String databaseName)
       throws DataRegionException {
     this.dataRegionId = dataRegionId;
-    this.storageGroupName = storageGroupName;
+    this.databaseName = databaseName;
     this.fileFlushPolicy = fileFlushPolicy;
 
     storageGroupSysDir = SystemFileFactory.INSTANCE.getFile(systemDir, dataRegionId);
     this.tsFileManager =
-        new TsFileManager(storageGroupName, dataRegionId, storageGroupSysDir.getPath());
+        new TsFileManager(databaseName, dataRegionId, storageGroupSysDir.getPath());
     if (storageGroupSysDir.mkdirs()) {
       logger.info(
           "Database system Directory {} doesn't exist, create it", storageGroupSysDir.getPath());
@@ -297,7 +294,7 @@ public class DataRegion {
 
     // if use id table, we use id table flush time manager
     if (config.isEnableIDTable()) {
-      idTable = IDTableManager.getInstance().getIDTableDirectly(storageGroupName);
+      idTable = IDTableManager.getInstance().getIDTableDirectly(databaseName);
       lastFlushTimeMap = new IDTableLastFlushTimeMap(idTable, tsFileManager);
     } else {
       lastFlushTimeMap = new HashLastFlushTimeMap(tsFileManager);
@@ -309,11 +306,11 @@ public class DataRegion {
         && !StorageEngine.getInstance().isAllSgReady()) {
       logger.debug(
           "Skip recovering data region {}[{}] when consensus protocol is ratis and storage engine is not ready.",
-          storageGroupName,
+          databaseName,
           dataRegionId);
       for (String fileFolder : DirectoryManager.getInstance().getAllFilesFolders()) {
         File dataRegionFolder =
-            fsFactory.getFile(fileFolder, storageGroupName + File.separator + dataRegionId);
+            fsFactory.getFile(fileFolder, databaseName + File.separator + dataRegionId);
         if (dataRegionFolder.exists()) {
           File[] timePartitions = dataRegionFolder.listFiles();
           if (timePartitions != null) {
@@ -324,7 +321,7 @@ public class DataRegion {
                 logger.error(
                     "Exception occurs when deleting time partition directory {} for {}-{}",
                     timePartitions,
-                    storageGroupName,
+                    databaseName,
                     dataRegionId,
                     e);
               }
@@ -340,16 +337,17 @@ public class DataRegion {
   }
 
   @TestOnly
-  public DataRegion(String storageGroupName, String id) {
-    this.storageGroupName = storageGroupName;
+  public DataRegion(String databaseName, String id) {
+    this.databaseName = databaseName;
     this.dataRegionId = id;
-    this.tsFileManager = new TsFileManager(storageGroupName, id, "");
+    this.tsFileManager = new TsFileManager(databaseName, id, "");
     this.partitionMaxFileVersions = new HashMap<>();
     partitionMaxFileVersions.put(0L, 0L);
   }
 
-  public String getStorageGroupName() {
-    return storageGroupName;
+  @Override
+  public String getDatabaseName() {
+    return databaseName;
   }
 
   public boolean isReady() {
@@ -409,7 +407,7 @@ public class DataRegion {
         if (lastLogTime + config.getRecoveryLogIntervalInMs() < System.currentTimeMillis()) {
           logger.info(
               "The data region {}[{}] has recovered {}%, please wait a moment.",
-              storageGroupName, dataRegionId, recoveredFilesNum * 1.0 / numOfFilesToRecover);
+              databaseName, dataRegionId, recoveredFilesNum * 1.0 / numOfFilesToRecover);
           lastLogTime = System.currentTimeMillis();
         }
       }
@@ -553,10 +551,9 @@ public class DataRegion {
     initCompaction();
 
     if (StorageEngine.getInstance().isAllSgReady()) {
-      logger.info("The data region {}[{}] is created successfully", storageGroupName, dataRegionId);
+      logger.info("The data region {}[{}] is created successfully", databaseName, dataRegionId);
     } else {
-      logger.info(
-          "The data region {}[{}] is recovered successfully", storageGroupName, dataRegionId);
+      logger.info("The data region {}[{}] is recovered successfully", databaseName, dataRegionId);
     }
   }
 
@@ -582,7 +579,7 @@ public class DataRegion {
     }
     timedCompactionScheduleTask =
         IoTDBThreadPoolFactory.newSingleThreadScheduledExecutor(
-            ThreadName.COMPACTION_SCHEDULE.getName() + "-" + storageGroupName + "-" + dataRegionId);
+            ThreadName.COMPACTION_SCHEDULE.getName() + "-" + databaseName + "-" + dataRegionId);
     ScheduledExecutorUtil.safelyScheduleWithFixedDelay(
         timedCompactionScheduleTask,
         this::executeCompaction,
@@ -593,7 +590,7 @@ public class DataRegion {
 
   private void recoverCompaction() {
     CompactionRecoverManager compactionRecoverManager =
-        new CompactionRecoverManager(tsFileManager, storageGroupName, dataRegionId);
+        new CompactionRecoverManager(tsFileManager, databaseName, dataRegionId);
     compactionRecoverManager.recoverInnerSpaceCompaction(true);
     compactionRecoverManager.recoverInnerSpaceCompaction(false);
     compactionRecoverManager.recoverCrossSpaceCompaction();
@@ -654,8 +651,7 @@ public class DataRegion {
     List<File> tsFiles = new ArrayList<>();
     List<File> upgradeFiles = new ArrayList<>();
     for (String baseDir : folders) {
-      File fileFolder =
-          fsFactory.getFile(baseDir + File.separator + storageGroupName, dataRegionId);
+      File fileFolder = fsFactory.getFile(baseDir + File.separator + databaseName, dataRegionId);
       if (!fileFolder.exists()) {
         continue;
       }
@@ -735,7 +731,7 @@ public class DataRegion {
           String.format(
               "data region %s[%s] is down, because the time of tsfile %s is larger than system current time, "
                   + "file time is %d while system current time is %d, please check it.",
-              storageGroupName, dataRegionId, tsFile.getAbsolutePath(), fileTime, currentTime));
+              databaseName, dataRegionId, tsFile.getAbsolutePath(), fileTime, currentTime));
     }
   }
 
@@ -1275,7 +1271,7 @@ public class DataRegion {
     String filePath =
         TsFileNameGenerator.generateNewTsFilePathWithMkdir(
             sequence,
-            storageGroupName,
+            databaseName,
             dataRegionId,
             timePartitionId,
             System.currentTimeMillis(),
@@ -1292,7 +1288,7 @@ public class DataRegion {
     if (sequence) {
       tsFileProcessor =
           new TsFileProcessor(
-              storageGroupName + FILE_NAME_SEPARATOR + dataRegionId,
+              databaseName + FILE_NAME_SEPARATOR + dataRegionId,
               fsFactory.getFileWithParent(filePath),
               dataRegionInfo,
               this::closeUnsealedTsFileProcessorCallBack,
@@ -1301,7 +1297,7 @@ public class DataRegion {
     } else {
       tsFileProcessor =
           new TsFileProcessor(
-              storageGroupName + FILE_NAME_SEPARATOR + dataRegionId,
+              databaseName + FILE_NAME_SEPARATOR + dataRegionId,
               fsFactory.getFileWithParent(filePath),
               dataRegionInfo,
               this::closeUnsealedTsFileProcessorCallBack,
@@ -1354,7 +1350,7 @@ public class DataRegion {
           if (System.currentTimeMillis() - startTime > 60_000) {
             logger.warn(
                 "{} has spent {}s to wait for closing one tsfile.",
-                storageGroupName + "-" + this.dataRegionId,
+                databaseName + "-" + this.dataRegionId,
                 (System.currentTimeMillis() - startTime) / 1000);
           }
         }
@@ -1363,7 +1359,7 @@ public class DataRegion {
         logger.error(
             "syncCloseOneTsFileProcessor error occurs while waiting for closing the storage "
                 + "group {}",
-            storageGroupName + "-" + dataRegionId,
+            databaseName + "-" + dataRegionId,
             e);
       }
     }
@@ -1397,7 +1393,7 @@ public class DataRegion {
       if (!workUnsequenceTsFileProcessors.containsKey(tsFileProcessor.getTimeRangeId())) {
         timePartitionIdVersionControllerMap.remove(tsFileProcessor.getTimeRangeId());
       }
-      logger.info("close a sequence tsfile processor {}", storageGroupName + "-" + dataRegionId);
+      logger.info("close a sequence tsfile processor {}", databaseName + "-" + dataRegionId);
     } else {
       closingUnSequenceTsFileProcessor.add(tsFileProcessor);
       tsFileProcessor.asyncClose();
@@ -1419,13 +1415,13 @@ public class DataRegion {
   public void deleteFolder(String systemDir) {
     logger.info(
         "{} will close all files for deleting data folder {}",
-        storageGroupName + "-" + dataRegionId,
+        databaseName + "-" + dataRegionId,
         systemDir);
     writeLock("deleteFolder");
     try {
       File dataRegionSystemFolder =
           SystemFileFactory.INSTANCE.getFile(
-              systemDir + File.separator + storageGroupName, dataRegionId);
+              systemDir + File.separator + databaseName, dataRegionId);
       org.apache.iotdb.commons.utils.FileUtils.deleteDirectoryAndEmptyParent(
           dataRegionSystemFolder);
     } finally {
@@ -1454,7 +1450,7 @@ public class DataRegion {
   /** delete tsfile */
   public void syncDeleteDataFiles() {
     logger.info(
-        "{} will close all files for deleting data files", storageGroupName + "-" + dataRegionId);
+        "{} will close all files for deleting data files", databaseName + "-" + dataRegionId);
     writeLock("syncDeleteDataFiles");
     try {
 
@@ -1477,7 +1473,7 @@ public class DataRegion {
   private void deleteAllSGFolders(List<String> folder) {
     for (String tsfilePath : folder) {
       File dataRegionDataFolder =
-          fsFactory.getFile(tsfilePath, storageGroupName + File.separator + dataRegionId);
+          fsFactory.getFile(tsfilePath, databaseName + File.separator + dataRegionId);
       if (dataRegionDataFolder.exists()) {
         org.apache.iotdb.commons.utils.FileUtils.deleteDirectoryAndEmptyParent(
             dataRegionDataFolder);
@@ -1488,13 +1484,13 @@ public class DataRegion {
   /** Iterate each TsFile and try to lock and remove those out of TTL. */
   public synchronized void checkFilesTTL() {
     if (dataTTL == Long.MAX_VALUE) {
-      logger.debug("{}: TTL not set, ignore the check", storageGroupName + "-" + dataRegionId);
+      logger.debug("{}: TTL not set, ignore the check", databaseName + "-" + dataRegionId);
       return;
     }
     long ttlLowerBound = DateTimeUtils.currentTime() - dataTTL;
     logger.debug(
         "{}: TTL removing files before {}",
-        storageGroupName + "-" + dataRegionId,
+        databaseName + "-" + dataRegionId,
         new Date(ttlLowerBound));
 
     // copy to avoid concurrent modification of deletion
@@ -1545,7 +1541,7 @@ public class DataRegion {
           logger.info(
               "Exceed sequence memtable flush interval, so flush working memtable of time partition {} in database {}[{}]",
               tsFileProcessor.getTimeRangeId(),
-              storageGroupName,
+              databaseName,
               dataRegionId);
           fileFlushPolicy.apply(this, tsFileProcessor, tsFileProcessor.isSequence());
         }
@@ -1568,7 +1564,7 @@ public class DataRegion {
           logger.info(
               "Exceed unsequence memtable flush interval, so flush working memtable of time partition {} in database {}[{}]",
               tsFileProcessor.getTimeRangeId(),
-              storageGroupName,
+              databaseName,
               dataRegionId);
           fileFlushPolicy.apply(this, tsFileProcessor, tsFileProcessor.isSequence());
         }
@@ -1590,7 +1586,7 @@ public class DataRegion {
           if (System.currentTimeMillis() - startTime > 60_000) {
             logger.warn(
                 "{} has spent {}s to wait for closing all TsFiles.",
-                storageGroupName + "-" + this.dataRegionId,
+                databaseName + "-" + this.dataRegionId,
                 (System.currentTimeMillis() - startTime) / 1000);
           }
         }
@@ -1598,7 +1594,7 @@ public class DataRegion {
         logger.error(
             "CloseFileNodeCondition error occurs while waiting for closing the storage "
                 + "group {}",
-            storageGroupName + "-" + dataRegionId,
+            databaseName + "-" + dataRegionId,
             e);
         Thread.currentThread().interrupt();
       }
@@ -1609,8 +1605,7 @@ public class DataRegion {
   public void asyncCloseAllWorkingTsFileProcessors() {
     writeLock("asyncCloseAllWorkingTsFileProcessors");
     try {
-      logger.info(
-          "async force close all files in database: {}", storageGroupName + "-" + dataRegionId);
+      logger.info("async force close all files in database: {}", databaseName + "-" + dataRegionId);
       // to avoid concurrent modification problem, we need a new array list
       for (TsFileProcessor tsFileProcessor :
           new ArrayList<>(workSequenceTsFileProcessors.values())) {
@@ -1630,8 +1625,7 @@ public class DataRegion {
   public void forceCloseAllWorkingTsFileProcessors() throws TsFileProcessorException {
     writeLock("forceCloseAllWorkingTsFileProcessors");
     try {
-      logger.info(
-          "force close all processors in database: {}", storageGroupName + "-" + dataRegionId);
+      logger.info("force close all processors in database: {}", databaseName + "-" + dataRegionId);
       // to avoid concurrent modification problem, we need a new array list
       for (TsFileProcessor tsFileProcessor :
           new ArrayList<>(workSequenceTsFileProcessors.values())) {
@@ -1701,6 +1695,7 @@ public class DataRegion {
   }
 
   /** used for mpp */
+  @Override
   public QueryDataSource query(
       List<PartialPath> pathList, String singleDeviceId, QueryContext context, Filter timeFilter)
       throws QueryProcessException {
@@ -1732,6 +1727,7 @@ public class DataRegion {
   }
 
   /** lock the read lock of the insert lock */
+  @Override
   public void readLock() {
     // apply read lock for SG insert lock to prevent inconsistent with concurrently writing memtable
     insertLock.readLock().lock();
@@ -1740,6 +1736,7 @@ public class DataRegion {
   }
 
   /** unlock the read lock of insert lock */
+  @Override
   public void readUnlock() {
     tsFileManager.readUnlock();
     insertLock.readLock().unlock();
@@ -1946,7 +1943,7 @@ public class DataRegion {
       if (timePartitionStartId <= entry.getKey()
           && entry.getKey() <= timePartitionEndId
           && (timePartitionFilter == null
-              || timePartitionFilter.satisfy(storageGroupName, entry.getKey()))) {
+              || timePartitionFilter.satisfy(databaseName, entry.getKey()))) {
         WALFlushListener walFlushListener = entry.getValue().logDeleteDataNodeInWAL(deleteDataNode);
         walFlushListeners.add(walFlushListener);
       }
@@ -1955,7 +1952,7 @@ public class DataRegion {
       if (timePartitionStartId <= entry.getKey()
           && entry.getKey() <= timePartitionEndId
           && (timePartitionFilter == null
-              || timePartitionFilter.satisfy(storageGroupName, entry.getKey()))) {
+              || timePartitionFilter.satisfy(databaseName, entry.getKey()))) {
         WALFlushListener walFlushListener = entry.getValue().logDeleteDataNodeInWAL(deleteDataNode);
         walFlushListeners.add(walFlushListener);
       }
@@ -1970,7 +1967,7 @@ public class DataRegion {
       long deleteEnd,
       TimePartitionFilter timePartitionFilter) {
     if (timePartitionFilter != null
-        && !timePartitionFilter.satisfy(storageGroupName, tsFileResource.getTimePartition())) {
+        && !timePartitionFilter.satisfy(databaseName, tsFileResource.getTimePartition())) {
       return true;
     }
 
@@ -2128,7 +2125,7 @@ public class DataRegion {
     synchronized (closeStorageGroupCondition) {
       closeStorageGroupCondition.notifyAll();
     }
-    logger.info("signal closing database condition in {}", storageGroupName + "-" + dataRegionId);
+    logger.info("signal closing database condition in {}", databaseName + "-" + dataRegionId);
   }
 
   private void executeCompaction() {
@@ -2627,7 +2624,7 @@ public class DataRegion {
         targetFile =
             fsFactory.getFile(
                 DirectoryManager.getInstance().getNextFolderForUnSequenceFile(),
-                storageGroupName
+                databaseName
                     + File.separatorChar
                     + dataRegionId
                     + File.separatorChar
@@ -2649,7 +2646,7 @@ public class DataRegion {
         targetFile =
             fsFactory.getFile(
                 DirectoryManager.getInstance().getNextFolderForSequenceFile(),
-                storageGroupName
+                databaseName
                     + File.separatorChar
                     + dataRegionId
                     + File.separatorChar
@@ -2913,7 +2910,7 @@ public class DataRegion {
    * @return data region path, like root.sg1/0
    */
   public String getStorageGroupPath() {
-    return storageGroupName + File.separator + dataRegionId;
+    return databaseName + File.separator + dataRegionId;
   }
 
   /**
@@ -3005,7 +3002,7 @@ public class DataRegion {
   public void abortCompaction() {
     tsFileManager.setAllowCompaction(false);
     List<AbstractCompactionTask> runningTasks =
-        CompactionTaskManager.getInstance().abortCompaction(storageGroupName + "-" + dataRegionId);
+        CompactionTaskManager.getInstance().abortCompaction(databaseName + "-" + dataRegionId);
     while (CompactionTaskManager.getInstance().isAnyTaskInListStillRunning(runningTasks)) {
       try {
         TimeUnit.MILLISECONDS.sleep(10);
@@ -3029,7 +3026,7 @@ public class DataRegion {
       TimePartitionManager.getInstance()
           .removePartition(new DataRegionId(Integer.valueOf(dataRegionId)), partitionId);
       TsFileProcessor processor = longTsFileProcessorEntry.getValue();
-      if (filter.satisfy(storageGroupName, partitionId)) {
+      if (filter.satisfy(databaseName, partitionId)) {
         processor.syncClose();
         iterator.remove();
         processor.getTsFileResource().remove();
@@ -3046,7 +3043,7 @@ public class DataRegion {
       TimePartitionFilter filter, Iterator<TsFileResource> iterator, boolean sequence) {
     while (iterator.hasNext()) {
       TsFileResource tsFileResource = iterator.next();
-      if (filter.satisfy(storageGroupName, tsFileResource.getTimePartition())) {
+      if (filter.satisfy(databaseName, tsFileResource.getTimePartition())) {
         tsFileResource.remove();
         tsFileManager.remove(tsFileResource, sequence);
         lastFlushTimeMap.removePartition(tsFileResource.getTimePartition());
@@ -3337,7 +3334,7 @@ public class DataRegion {
     }
     // identifier should be same with getTsFileProcessor method
     return WALManager.getInstance()
-        .applyForWALNode(storageGroupName + FILE_NAME_SEPARATOR + dataRegionId);
+        .applyForWALNode(databaseName + FILE_NAME_SEPARATOR + dataRegionId);
   }
 
   /** Wait for this data region successfully deleted */
@@ -3374,6 +3371,7 @@ public class DataRegion {
     return dataRegionInfo.getMemCost();
   }
 
+  @Override
   public long getDataTTL() {
     return dataTTL;
   }
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/DataRegionMetrics.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/DataRegionMetrics.java
index 194ea37822..40ab8ffbc8 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/DataRegionMetrics.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/DataRegionMetrics.java
@@ -34,7 +34,7 @@ public class DataRegionMetrics implements IMetricSet {
 
   public DataRegionMetrics(DataRegion dataRegion) {
     this.dataRegion = dataRegion;
-    this.storageGroupName = dataRegion.getStorageGroupName();
+    this.storageGroupName = dataRegion.getDatabaseName();
   }
 
   @Override
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/IDataRegionForQuery.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/IDataRegionForQuery.java
new file mode 100644
index 0000000000..57c3ad436d
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/IDataRegionForQuery.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.db.engine.storagegroup;
+
+import org.apache.iotdb.commons.path.PartialPath;
+import org.apache.iotdb.db.engine.querycontext.QueryDataSource;
+import org.apache.iotdb.db.exception.query.QueryProcessException;
+import org.apache.iotdb.db.query.context.QueryContext;
+import org.apache.iotdb.tsfile.read.filter.basic.Filter;
+
+import java.util.List;
+
+/** It's an interface that storage engine must provide for query engine */
+public interface IDataRegionForQuery {
+
+  /** lock the read lock for thread-safe */
+  void readLock();
+
+  void readUnlock();
+
+  /** Get satisfied QueryDataSource from DataRegion */
+  QueryDataSource query(
+      List<PartialPath> pathList, String singleDeviceId, QueryContext context, Filter timeFilter)
+      throws QueryProcessException;
+
+  /** Get TTL of this DataRegion */
+  long getDataTTL();
+
+  /** Get database name of this DataRegion */
+  String getDatabaseName();
+}
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessorInfo.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessorInfo.java
index 80f61bc86a..93fa8035e7 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessorInfo.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessorInfo.java
@@ -36,7 +36,7 @@ public class TsFileProcessorInfo {
       MetricService.getInstance()
           .addMetricSet(
               new TsFileProcessorInfoMetrics(
-                  dataRegionInfo.getDataRegion().getStorageGroupName(), memCost));
+                  dataRegionInfo.getDataRegion().getDatabaseName(), memCost));
     }
   }
 
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/VirtualDataRegion.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/VirtualDataRegion.java
new file mode 100644
index 0000000000..8aa30e5068
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/VirtualDataRegion.java
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.db.engine.storagegroup;
+
+import org.apache.iotdb.commons.path.PartialPath;
+import org.apache.iotdb.db.engine.querycontext.QueryDataSource;
+import org.apache.iotdb.db.exception.query.QueryProcessException;
+import org.apache.iotdb.db.query.context.QueryContext;
+import org.apache.iotdb.tsfile.read.filter.basic.Filter;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * It's a virtual data region used for query which contains time series that don't belong to any
+ * data region.
+ */
+public class VirtualDataRegion implements IDataRegionForQuery {
+
+  private static final String VIRTUAL_DB_NAME = "root.__virtual";
+
+  private static final QueryDataSource EMPTY_QUERY_DATA_SOURCE =
+      new QueryDataSource(Collections.emptyList(), Collections.emptyList());
+
+  public static VirtualDataRegion getInstance() {
+    return VirtualDataRegion.InstanceHolder.INSTANCE;
+  }
+
+  @Override
+  public void readLock() {
+    // do nothing, because itself is thread-safe already
+  }
+
+  @Override
+  public void readUnlock() {
+    // do nothing, because itself is thread-safe already
+  }
+
+  @Override
+  public QueryDataSource query(
+      List<PartialPath> pathList, String singleDeviceId, QueryContext context, Filter timeFilter)
+      throws QueryProcessException {
+    return EMPTY_QUERY_DATA_SOURCE;
+  }
+
+  @Override
+  public long getDataTTL() {
+    return Long.MAX_VALUE;
+  }
+
+  @Override
+  public String getDatabaseName() {
+    return VIRTUAL_DB_NAME;
+  }
+
+  private static class InstanceHolder {
+
+    private InstanceHolder() {}
+
+    private static final VirtualDataRegion INSTANCE = new VirtualDataRegion();
+  }
+}
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/execution/driver/DataDriver.java b/server/src/main/java/org/apache/iotdb/db/mpp/execution/driver/DataDriver.java
index 340a8f4bcc..3fc0aaa042 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/execution/driver/DataDriver.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/execution/driver/DataDriver.java
@@ -20,7 +20,7 @@ package org.apache.iotdb.db.mpp.execution.driver;
 
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.engine.querycontext.QueryDataSource;
-import org.apache.iotdb.db.engine.storagegroup.DataRegion;
+import org.apache.iotdb.db.engine.storagegroup.IDataRegionForQuery;
 import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.metadata.idtable.IDTable;
@@ -122,7 +122,7 @@ public class DataDriver extends Driver {
    */
   private QueryDataSource initQueryDataSource() throws QueryProcessException {
     DataDriverContext context = (DataDriverContext) driverContext;
-    DataRegion dataRegion = context.getDataRegion();
+    IDataRegionForQuery dataRegion = context.getDataRegion();
     dataRegion.readLock();
     try {
       List<PartialPath> pathList =
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/execution/driver/DataDriverContext.java b/server/src/main/java/org/apache/iotdb/db/mpp/execution/driver/DataDriverContext.java
index f35c0da438..dec4cf656c 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/execution/driver/DataDriverContext.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/execution/driver/DataDriverContext.java
@@ -19,7 +19,7 @@
 package org.apache.iotdb.db.mpp.execution.driver;
 
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.engine.storagegroup.DataRegion;
+import org.apache.iotdb.db.engine.storagegroup.IDataRegionForQuery;
 import org.apache.iotdb.db.mpp.execution.fragment.FragmentInstanceContext;
 import org.apache.iotdb.db.mpp.execution.operator.source.DataSourceOperator;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
@@ -30,14 +30,14 @@ import java.util.List;
 public class DataDriverContext extends DriverContext {
   private final List<PartialPath> paths;
   private final Filter timeFilter;
-  private final DataRegion dataRegion;
+  private final IDataRegionForQuery dataRegion;
   private final List<DataSourceOperator> sourceOperators;
 
   public DataDriverContext(
       FragmentInstanceContext fragmentInstanceContext,
       List<PartialPath> paths,
       Filter timeFilter,
-      DataRegion dataRegion,
+      IDataRegionForQuery dataRegion,
       List<DataSourceOperator> sourceOperators) {
     super(fragmentInstanceContext);
     this.paths = paths;
@@ -54,7 +54,7 @@ public class DataDriverContext extends DriverContext {
     return timeFilter;
   }
 
-  public DataRegion getDataRegion() {
+  public IDataRegionForQuery getDataRegion() {
     return dataRegion;
   }
 
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/execution/fragment/FragmentInstanceManager.java b/server/src/main/java/org/apache/iotdb/db/mpp/execution/fragment/FragmentInstanceManager.java
index f3da54b6c4..5e37ac29aa 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/execution/fragment/FragmentInstanceManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/execution/fragment/FragmentInstanceManager.java
@@ -21,7 +21,7 @@ package org.apache.iotdb.db.mpp.execution.fragment;
 import org.apache.iotdb.commons.concurrent.IoTDBThreadPoolFactory;
 import org.apache.iotdb.commons.concurrent.threadpool.ScheduledExecutorUtil;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
-import org.apache.iotdb.db.engine.storagegroup.DataRegion;
+import org.apache.iotdb.db.engine.storagegroup.IDataRegionForQuery;
 import org.apache.iotdb.db.metadata.schemaregion.ISchemaRegion;
 import org.apache.iotdb.db.mpp.common.FragmentInstanceId;
 import org.apache.iotdb.db.mpp.execution.driver.DataDriver;
@@ -100,7 +100,7 @@ public class FragmentInstanceManager {
   }
 
   public FragmentInstanceInfo execDataQueryFragmentInstance(
-      FragmentInstance instance, DataRegion dataRegion) {
+      FragmentInstance instance, IDataRegionForQuery dataRegion) {
 
     FragmentInstanceId instanceId = instance.getId();
     try (SetThreadName fragmentInstanceName = new SetThreadName(instanceId.getFullId())) {
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/last/AbstractUpdateLastCacheOperator.java b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/last/AbstractUpdateLastCacheOperator.java
index 0b4fad3bda..4850fb45c4 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/last/AbstractUpdateLastCacheOperator.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/last/AbstractUpdateLastCacheOperator.java
@@ -75,7 +75,7 @@ public abstract class AbstractUpdateLastCacheOperator implements ProcessOperator
       databaseName =
           ((DataDriverContext) operatorContext.getInstanceContext().getDriverContext())
               .getDataRegion()
-              .getStorageGroupName();
+              .getDatabaseName();
     }
     return databaseName;
   }
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LocalExecutionPlanner.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LocalExecutionPlanner.java
index a08f9af268..6015e20c71 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LocalExecutionPlanner.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LocalExecutionPlanner.java
@@ -19,7 +19,7 @@
 package org.apache.iotdb.db.mpp.plan.planner;
 
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
-import org.apache.iotdb.db.engine.storagegroup.DataRegion;
+import org.apache.iotdb.db.engine.storagegroup.IDataRegionForQuery;
 import org.apache.iotdb.db.metadata.schemaregion.ISchemaRegion;
 import org.apache.iotdb.db.mpp.exception.MemoryNotEnoughException;
 import org.apache.iotdb.db.mpp.execution.driver.DataDriver;
@@ -61,7 +61,7 @@ public class LocalExecutionPlanner {
       TypeProvider types,
       FragmentInstanceContext instanceContext,
       Filter timeFilter,
-      DataRegion dataRegion)
+      IDataRegionForQuery dataRegion)
       throws MemoryNotEnoughException {
     LocalExecutionPlanContext context =
         new LocalExecutionPlanContext(types, instanceContext, dataRegion.getDataTTL());
diff --git a/server/src/main/java/org/apache/iotdb/db/rescon/SystemInfo.java b/server/src/main/java/org/apache/iotdb/db/rescon/SystemInfo.java
index 0e8f67cd91..fd0214b519 100644
--- a/server/src/main/java/org/apache/iotdb/db/rescon/SystemInfo.java
+++ b/server/src/main/java/org/apache/iotdb/db/rescon/SystemInfo.java
@@ -99,7 +99,7 @@ public class SystemInfo {
     } else {
       logger.info(
           "Change system to reject status. Triggered by: logical SG ({}), mem cost delta ({}), totalSgMemCost ({}), REJECT_THERSHOLD ({})",
-          dataRegionInfo.getDataRegion().getStorageGroupName(),
+          dataRegionInfo.getDataRegion().getDatabaseName(),
           delta,
           totalStorageGroupMemCost,
           REJECT_THERSHOLD);
@@ -140,13 +140,13 @@ public class SystemInfo {
         && totalStorageGroupMemCost < REJECT_THERSHOLD) {
       logger.debug(
           "SG ({}) released memory (delta: {}) but still exceeding flush proportion (totalSgMemCost: {}), call flush.",
-          dataRegionInfo.getDataRegion().getStorageGroupName(),
+          dataRegionInfo.getDataRegion().getDatabaseName(),
           delta,
           totalStorageGroupMemCost);
       if (rejected) {
         logger.info(
             "SG ({}) released memory (delta: {}), set system to normal status (totalSgMemCost: {}).",
-            dataRegionInfo.getDataRegion().getStorageGroupName(),
+            dataRegionInfo.getDataRegion().getDatabaseName(),
             delta,
             totalStorageGroupMemCost);
       }
@@ -155,7 +155,7 @@ public class SystemInfo {
     } else if (totalStorageGroupMemCost >= REJECT_THERSHOLD) {
       logger.warn(
           "SG ({}) released memory (delta: {}), but system is still in reject status (totalSgMemCost: {}).",
-          dataRegionInfo.getDataRegion().getStorageGroupName(),
+          dataRegionInfo.getDataRegion().getDatabaseName(),
           delta,
           totalStorageGroupMemCost);
       logCurrentTotalSGMemory();
@@ -163,7 +163,7 @@ public class SystemInfo {
     } else {
       logger.debug(
           "SG ({}) released memory (delta: {}), system is in normal status (totalSgMemCost: {}).",
-          dataRegionInfo.getDataRegion().getStorageGroupName(),
+          dataRegionInfo.getDataRegion().getDatabaseName(),
           delta,
           totalStorageGroupMemCost);
       logCurrentTotalSGMemory();
diff --git a/server/src/main/java/org/apache/iotdb/db/sync/sender/manager/LocalSyncManager.java b/server/src/main/java/org/apache/iotdb/db/sync/sender/manager/LocalSyncManager.java
index 04e073ac80..a3608e82b6 100644
--- a/server/src/main/java/org/apache/iotdb/db/sync/sender/manager/LocalSyncManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/sync/sender/manager/LocalSyncManager.java
@@ -47,7 +47,7 @@ public class LocalSyncManager implements ISyncManager {
   /** tsfile */
   @Override
   public void syncRealTimeDeletion(Deletion deletion) {
-    syncPipe.collectRealTimeDeletion(deletion, dataRegion.getStorageGroupName(), dataRegionId);
+    syncPipe.collectRealTimeDeletion(deletion, dataRegion.getDatabaseName(), dataRegionId);
   }
 
   @Override
diff --git a/server/src/main/java/org/apache/iotdb/db/sync/sender/pipe/TsFilePipe.java b/server/src/main/java/org/apache/iotdb/db/sync/sender/pipe/TsFilePipe.java
index 4241610473..43a1419aeb 100644
--- a/server/src/main/java/org/apache/iotdb/db/sync/sender/pipe/TsFilePipe.java
+++ b/server/src/main/java/org/apache/iotdb/db/sync/sender/pipe/TsFilePipe.java
@@ -157,7 +157,7 @@ public class TsFilePipe implements Pipe {
       logger.info(
           logFormat(
               "init syncManager for %s-%s",
-              dataRegion.getStorageGroupName(), dataRegion.getDataRegionId()));
+              dataRegion.getDatabaseName(), dataRegion.getDataRegionId()));
       getOrCreateSyncManager(dataRegion.getDataRegionId());
     }
     try {
diff --git a/server/src/main/java/org/apache/iotdb/db/sync/transport/client/SyncClientFactory.java b/server/src/main/java/org/apache/iotdb/db/sync/transport/client/SyncClientFactory.java
index fbf85be9a6..7a7d8903f8 100644
--- a/server/src/main/java/org/apache/iotdb/db/sync/transport/client/SyncClientFactory.java
+++ b/server/src/main/java/org/apache/iotdb/db/sync/transport/client/SyncClientFactory.java
@@ -39,7 +39,7 @@ public class SyncClientFactory {
       case IoTDB:
         IoTDBPipeSink ioTDBPipeSink = (IoTDBPipeSink) pipeSink;
         return new IoTDBSyncClient(
-            pipe, ioTDBPipeSink.getIp(), ioTDBPipeSink.getPort(), dataRegion.getStorageGroupName());
+            pipe, ioTDBPipeSink.getIp(), ioTDBPipeSink.getPort(), dataRegion.getDatabaseName());
       case ExternalPipe:
       default:
         throw new UnsupportedOperationException();
diff --git a/server/src/test/java/org/apache/iotdb/db/engine/snapshot/IoTDBSnapshotTest.java b/server/src/test/java/org/apache/iotdb/db/engine/snapshot/IoTDBSnapshotTest.java
index 9db5350ada..8c9f5f8ff0 100644
--- a/server/src/test/java/org/apache/iotdb/db/engine/snapshot/IoTDBSnapshotTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/engine/snapshot/IoTDBSnapshotTest.java
@@ -207,7 +207,7 @@ public class IoTDBSnapshotTest {
                 + File.separator
                 + "1-1-0-0.tsfile");
     DataRegion region = Mockito.mock(DataRegion.class);
-    Mockito.when(region.getStorageGroupName()).thenReturn("root.test");
+    Mockito.when(region.getDatabaseName()).thenReturn("root.test");
     Mockito.when(region.getDataRegionId()).thenReturn("0");
     File snapshotFile =
         new SnapshotTaker(region).getSnapshotFilePathForTsFile(tsFile, "test-snapshotId");
diff --git a/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/DataRegionTest.java b/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/DataRegionTest.java
index 7e11d6d7a2..5b93a3345f 100644
--- a/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/DataRegionTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/DataRegionTest.java
@@ -824,7 +824,7 @@ public class DataRegionTest {
       List<DataRegion> dataRegions = StorageEngine.getInstance().getAllDataRegions();
       List<DataRegion> regionsToBeDeleted = new ArrayList<>();
       for (DataRegion region : dataRegions) {
-        if (region.getStorageGroupName().equals(storageGroup)) {
+        if (region.getDatabaseName().equals(storageGroup)) {
           regionsToBeDeleted.add(region);
         }
       }
@@ -1012,7 +1012,7 @@ public class DataRegionTest {
     List<DataRegion> dataRegions = StorageEngine.getInstance().getAllDataRegions();
     List<DataRegion> regionsToBeDeleted = new ArrayList<>();
     for (DataRegion region : dataRegions) {
-      if (region.getStorageGroupName().equals(storageGroup)) {
+      if (region.getDatabaseName().equals(storageGroup)) {
         regionsToBeDeleted.add(region);
       }
     }