You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by sp...@apache.org on 2023/09/05 08:56:54 UTC

[iotdb] branch feature/metric-detail created (now 32133de04e2)

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

spricoder pushed a change to branch feature/metric-detail
in repository https://gitbox.apache.org/repos/asf/iotdb.git


      at 32133de04e2 Add database into memtable and split quantity of pointsIn into database level

This branch includes the following new commits:

     new 67a2b339966 fix typo
     new 32133de04e2 Add database into memtable and split quantity of pointsIn into database level

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[iotdb] 01/02: fix typo

Posted by sp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

spricoder pushed a commit to branch feature/metric-detail
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 67a2b339966e8ce1ce55e5dfc4c4f3e5f9a751b5
Author: spricoder <sp...@qq.com>
AuthorDate: Tue Sep 5 16:11:54 2023 +0800

    fix typo
---
 .../iotdb/db/storageengine/dataregion/memtable/AbstractMemTable.java    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AbstractMemTable.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AbstractMemTable.java
index bdba167c5bb..3eab70464fc 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AbstractMemTable.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AbstractMemTable.java
@@ -65,7 +65,7 @@ public abstract class AbstractMemTable implements IMemTable {
   private final Map<IDeviceID, IWritableMemChunkGroup> memTableMap;
 
   /**
-   * The initial value is true because we want calculate the text data size when recover memTable.
+   * The initial value is true because we want to calculate the text data size when recover memTable.
    */
   protected boolean disableMemControl = true;
 


[iotdb] 02/02: Add database into memtable and split quantity of pointsIn into database level

Posted by sp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

spricoder pushed a commit to branch feature/metric-detail
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 32133de04e246b2c464bd86500ebce14c45a27ad
Author: spricoder <sp...@qq.com>
AuthorDate: Tue Sep 5 16:56:42 2023 +0800

    Add database into memtable and split quantity of pointsIn into database level
---
 .../schemaengine/metric/SchemaEngineMemMetric.java | 19 ++++++--
 .../db/storageengine/dataregion/DataRegion.java    |  3 +-
 .../dataregion/memtable/AbstractMemTable.java      | 50 +++++++++++++++++++---
 .../dataregion/memtable/IMemTable.java             |  2 +
 .../dataregion/memtable/PrimitiveMemTable.java     | 13 +++---
 .../wal/recover/file/TsFilePlanRedoer.java         |  5 ++-
 .../file/UnsealedTsFileRecoverPerformer.java       |  5 ++-
 .../rescon/memory/MemTableManager.java             |  6 +--
 .../dataregion/memtable/MemTableFlushTaskTest.java |  2 +-
 .../dataregion/memtable/MemtableBenchmark.java     |  3 +-
 .../dataregion/memtable/PrimitiveMemTableTest.java | 15 ++++---
 .../wal/checkpoint/CheckpointManagerTest.java      |  6 ++-
 .../dataregion/wal/io/CheckpointFileTest.java      |  7 ++-
 .../dataregion/wal/node/WALEntryHandlerTest.java   | 19 ++++----
 .../dataregion/wal/node/WALNodeTest.java           |  9 ++--
 .../wal/recover/WALRecoverManagerTest.java         | 15 ++++---
 .../wal/recover/file/TsFilePlanRedoerTest.java     | 16 +++----
 .../file/UnsealedTsFileRecoverPerformerTest.java   |  6 +--
 .../wal/utils/WALInsertNodeCacheTest.java          |  9 ++--
 19 files changed, 139 insertions(+), 71 deletions(-)

diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/metric/SchemaEngineMemMetric.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/metric/SchemaEngineMemMetric.java
index 3f5c6ec7211..4c8704dda35 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/metric/SchemaEngineMemMetric.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/metric/SchemaEngineMemMetric.java
@@ -58,14 +58,18 @@ public class SchemaEngineMemMetric implements ISchemaEngineMetric {
         engineStatistics,
         ISchemaEngineStatistics::getTotalSeriesNumber,
         Tag.NAME.toString(),
-        TIME_SERES_CNT);
+        TIME_SERES_CNT,
+        Tag.DATABASE.toString(),
+        "total");
     metricService.createAutoGauge(
         Metric.QUANTITY.toString(),
         MetricLevel.IMPORTANT,
         engineStatistics,
         ISchemaEngineStatistics::getTemplateSeriesNumber,
         Tag.NAME.toString(),
-        TEMPLATE_SERIES_CNT);
+        TEMPLATE_SERIES_CNT,
+        Tag.DATABASE.toString(),
+        "total");
     metricService.createAutoGauge(
         Metric.MEM.toString(),
         MetricLevel.IMPORTANT,
@@ -112,12 +116,19 @@ public class SchemaEngineMemMetric implements ISchemaEngineMetric {
   @Override
   public void unbindFrom(AbstractMetricService metricService) {
     metricService.remove(
-        MetricType.AUTO_GAUGE, Metric.QUANTITY.toString(), Tag.NAME.toString(), TIME_SERES_CNT);
+        MetricType.AUTO_GAUGE,
+        Metric.QUANTITY.toString(),
+        Tag.NAME.toString(),
+        TIME_SERES_CNT,
+        Tag.DATABASE.toString(),
+        "total");
     metricService.remove(
         MetricType.AUTO_GAUGE,
         Metric.QUANTITY.toString(),
         Tag.NAME.toString(),
-        TEMPLATE_SERIES_CNT);
+        TEMPLATE_SERIES_CNT,
+        Tag.DATABASE.toString(),
+        "total");
     metricService.remove(
         MetricType.AUTO_GAUGE,
         Metric.MEM.toString(),
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
index 75609c20f93..e0e639773bc 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
@@ -678,7 +678,8 @@ public class DataRegion implements IDataRegionForQuery {
   private WALRecoverListener recoverUnsealedTsFile(
       TsFileResource unsealedTsFile, DataRegionRecoveryContext context, boolean isSeq) {
     UnsealedTsFileRecoverPerformer recoverPerformer =
-        new UnsealedTsFileRecoverPerformer(unsealedTsFile, isSeq, context.recoverPerformers::add);
+        new UnsealedTsFileRecoverPerformer(
+            unsealedTsFile, isSeq, context.recoverPerformers::add, databaseName);
     // remember to close UnsealedTsFileRecoverPerformer
     return WALRecoverManager.getInstance().addRecoverPerformer(recoverPerformer);
   }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AbstractMemTable.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AbstractMemTable.java
index 3eab70464fc..f7a5dbda063 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AbstractMemTable.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AbstractMemTable.java
@@ -65,7 +65,8 @@ public abstract class AbstractMemTable implements IMemTable {
   private final Map<IDeviceID, IWritableMemChunkGroup> memTableMap;
 
   /**
-   * The initial value is true because we want to calculate the text data size when recover memTable.
+   * The initial value is true because we want to calculate the text data size when recover
+   * memTable.
    */
   protected boolean disableMemControl = true;
 
@@ -95,13 +96,22 @@ public abstract class AbstractMemTable implements IMemTable {
 
   private final long createdTime = System.currentTimeMillis();
 
+  private String database;
+
   private static final String METRIC_POINT_IN = "pointsIn";
 
   protected AbstractMemTable() {
+    this.database = null;
     this.memTableMap = new HashMap<>();
   }
 
-  protected AbstractMemTable(Map<IDeviceID, IWritableMemChunkGroup> memTableMap) {
+  protected AbstractMemTable(String database) {
+    this.database = database;
+    this.memTableMap = new HashMap<>();
+  }
+
+  protected AbstractMemTable(String database, Map<IDeviceID, IWritableMemChunkGroup> memTableMap) {
+    this.database = database;
     this.memTableMap = memTableMap;
   }
 
@@ -194,7 +204,9 @@ public abstract class AbstractMemTable implements IMemTable {
             Metric.QUANTITY.toString(),
             MetricLevel.CORE,
             Tag.NAME.toString(),
-            METRIC_POINT_IN);
+            METRIC_POINT_IN,
+            Tag.DATABASE.toString(),
+            database);
   }
 
   @Override
@@ -233,7 +245,9 @@ public abstract class AbstractMemTable implements IMemTable {
             Metric.QUANTITY.toString(),
             MetricLevel.CORE,
             Tag.NAME.toString(),
-            METRIC_POINT_IN);
+            METRIC_POINT_IN,
+            Tag.DATABASE.toString(),
+            database);
   }
 
   @Override
@@ -252,7 +266,9 @@ public abstract class AbstractMemTable implements IMemTable {
               Metric.QUANTITY.toString(),
               MetricLevel.CORE,
               Tag.NAME.toString(),
-              METRIC_POINT_IN);
+              METRIC_POINT_IN,
+              Tag.DATABASE.toString(),
+              database);
     } catch (RuntimeException e) {
       throw new WriteProcessException(e);
     }
@@ -274,7 +290,9 @@ public abstract class AbstractMemTable implements IMemTable {
               Metric.QUANTITY.toString(),
               MetricLevel.CORE,
               Tag.NAME.toString(),
-              METRIC_POINT_IN);
+              METRIC_POINT_IN,
+              Tag.DATABASE.toString(),
+              database);
     } catch (RuntimeException e) {
       throw new WriteProcessException(e);
     }
@@ -590,6 +608,12 @@ public abstract class AbstractMemTable implements IMemTable {
     buffer.putLong(totalPointsNumThreshold);
     buffer.putLong(maxPlanIndex);
     buffer.putLong(minPlanIndex);
+    if (database == null || database.isEmpty()) {
+      buffer.putInt(0);
+    } else {
+      buffer.putInt(database.length());
+      buffer.put(database.getBytes());
+    }
 
     buffer.putInt(memTableMap.size());
     for (Map.Entry<IDeviceID, IWritableMemChunkGroup> entry : memTableMap.entrySet()) {
@@ -609,6 +633,12 @@ public abstract class AbstractMemTable implements IMemTable {
     totalPointsNumThreshold = stream.readLong();
     maxPlanIndex = stream.readLong();
     minPlanIndex = stream.readLong();
+    int databaseLength = stream.readInt();
+    if (databaseLength != 0) {
+      byte[] bytes = new byte[databaseLength];
+      stream.read(bytes);
+      database = new String(bytes);
+    }
 
     int memTableMapSize = stream.readInt();
     for (int i = 0; i < memTableMapSize; ++i) {
@@ -645,11 +675,17 @@ public abstract class AbstractMemTable implements IMemTable {
       if (isSignal) {
         memTable = new NotifyFlushMemTable();
       } else {
-        PrimitiveMemTable primitiveMemTable = new PrimitiveMemTable();
+        // database will be updated when deserialize
+        PrimitiveMemTable primitiveMemTable = new PrimitiveMemTable(null);
         primitiveMemTable.deserialize(stream);
         memTable = primitiveMemTable;
       }
       return memTable;
     }
   }
+
+  @Override
+  public String getDatabase() {
+    return database;
+  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/IMemTable.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/IMemTable.java
index b4b0204080d..7ed96e7a8cf 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/IMemTable.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/IMemTable.java
@@ -169,4 +169,6 @@ public interface IMemTable extends WALEntryValue {
   void setFlushStatus(FlushStatus flushStatus);
 
   Map<String, Long> getMaxTime();
+
+  String getDatabase();
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/PrimitiveMemTable.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/PrimitiveMemTable.java
index d4bf9c18743..bf88c5de627 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/PrimitiveMemTable.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/PrimitiveMemTable.java
@@ -24,21 +24,24 @@ import java.util.Map;
 
 public class PrimitiveMemTable extends AbstractMemTable {
 
-  public PrimitiveMemTable() {}
+  public PrimitiveMemTable(String database) {
+    super(database);
+  }
 
-  public PrimitiveMemTable(boolean enableMemControl) {
+  public PrimitiveMemTable(String database, boolean enableMemControl) {
+    super(database);
     this.disableMemControl = !enableMemControl;
   }
 
-  public PrimitiveMemTable(Map<IDeviceID, IWritableMemChunkGroup> memTableMap) {
-    super(memTableMap);
+  public PrimitiveMemTable(String database, Map<IDeviceID, IWritableMemChunkGroup> memTableMap) {
+    super(database, memTableMap);
   }
 
   @Override
   public IMemTable copy() {
     Map<IDeviceID, IWritableMemChunkGroup> newMap = new HashMap<>(getMemTableMap());
 
-    return new PrimitiveMemTable(newMap);
+    return new PrimitiveMemTable(getDatabase(), newMap);
   }
 
   @Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/TsFilePlanRedoer.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/TsFilePlanRedoer.java
index d7a292cf36c..2a384ed2517 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/TsFilePlanRedoer.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/TsFilePlanRedoer.java
@@ -45,11 +45,12 @@ public class TsFilePlanRedoer {
   private final boolean sequence;
 
   // store data when redoing logs
-  private IMemTable recoveryMemTable = new PrimitiveMemTable();
+  private IMemTable recoveryMemTable;
 
-  public TsFilePlanRedoer(TsFileResource tsFileResource, boolean sequence) {
+  public TsFilePlanRedoer(TsFileResource tsFileResource, boolean sequence, String database) {
     this.tsFileResource = tsFileResource;
     this.sequence = sequence;
+    this.recoveryMemTable = new PrimitiveMemTable(database);
   }
 
   void redoDelete(DeleteDataNode deleteDataNode) throws IOException {
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/UnsealedTsFileRecoverPerformer.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/UnsealedTsFileRecoverPerformer.java
index 742e996fd03..f50062004f2 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/UnsealedTsFileRecoverPerformer.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/UnsealedTsFileRecoverPerformer.java
@@ -73,11 +73,12 @@ public class UnsealedTsFileRecoverPerformer extends AbstractTsFileRecoverPerform
   public UnsealedTsFileRecoverPerformer(
       TsFileResource tsFileResource,
       boolean sequence,
-      Consumer<UnsealedTsFileRecoverPerformer> callbackAfterUnsealedTsFileRecovered) {
+      Consumer<UnsealedTsFileRecoverPerformer> callbackAfterUnsealedTsFileRecovered,
+      String database) {
     super(tsFileResource);
     this.sequence = sequence;
     this.callbackAfterUnsealedTsFileRecovered = callbackAfterUnsealedTsFileRecovered;
-    this.walRedoer = new TsFilePlanRedoer(tsFileResource, sequence);
+    this.walRedoer = new TsFilePlanRedoer(tsFileResource, sequence, database);
     this.recoverListener = new WALRecoverListener(tsFileResource.getTsFilePath());
   }
 
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/memory/MemTableManager.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/memory/MemTableManager.java
index 0359aec79a1..5646a48326c 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/memory/MemTableManager.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/memory/MemTableManager.java
@@ -47,12 +47,12 @@ public class MemTableManager {
       throws WriteProcessException {
     if (CONFIG.isEnableMemControl()) {
       currentMemtableNumber++;
-      return new PrimitiveMemTable(CONFIG.isEnableMemControl());
+      return new PrimitiveMemTable(storageGroup, CONFIG.isEnableMemControl());
     }
 
     if (!reachMaxMemtableNumber()) {
       currentMemtableNumber++;
-      return new PrimitiveMemTable();
+      return new PrimitiveMemTable(storageGroup);
     }
 
     // wait until the total number of memtable is less than the system capacity
@@ -60,7 +60,7 @@ public class MemTableManager {
     while (true) {
       if (!reachMaxMemtableNumber()) {
         currentMemtableNumber++;
-        return new PrimitiveMemTable();
+        return new PrimitiveMemTable(storageGroup);
       }
       try {
         wait(WAIT_TIME);
diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/memtable/MemTableFlushTaskTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/memtable/MemTableFlushTaskTest.java
index 907ff94319d..dd758ef2683 100644
--- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/memtable/MemTableFlushTaskTest.java
+++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/memtable/MemTableFlushTaskTest.java
@@ -52,7 +52,7 @@ public class MemTableFlushTaskTest {
   public void setUp() throws Exception {
     EnvironmentUtils.envSetUp();
     writer = new RestorableTsFileIOWriter(FSFactoryProducer.getFSFactory().getFile(filePath));
-    memTable = new PrimitiveMemTable();
+    memTable = new PrimitiveMemTable(storageGroup);
   }
 
   @After
diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/memtable/MemtableBenchmark.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/memtable/MemtableBenchmark.java
index ca697b3257c..18f2c470a58 100644
--- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/memtable/MemtableBenchmark.java
+++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/memtable/MemtableBenchmark.java
@@ -29,6 +29,7 @@ import java.util.Collections;
 /** Memtable insert benchmark. Bench the Memtable and get its performance. */
 public class MemtableBenchmark {
 
+  private static String database = "root.test";
   private static String deviceId = "d0";
   private static int numOfMeasurement = 10000;
   private static int numOfPoint = 1000;
@@ -43,7 +44,7 @@ public class MemtableBenchmark {
   }
 
   public static void main(String[] args) throws IllegalPathException {
-    IMemTable memTable = new PrimitiveMemTable();
+    IMemTable memTable = new PrimitiveMemTable(database);
     final long startTime = System.currentTimeMillis();
     // cpu not locality
     for (int i = 0; i < numOfPoint; i++) {
diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/memtable/PrimitiveMemTableTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/memtable/PrimitiveMemTableTest.java
index 86d55cc771c..99734bcc023 100644
--- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/memtable/PrimitiveMemTableTest.java
+++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/memtable/PrimitiveMemTableTest.java
@@ -60,6 +60,7 @@ import static org.junit.Assert.assertEquals;
 
 public class PrimitiveMemTableTest {
 
+  String database = "root.test";
   double delta;
 
   @Before
@@ -114,7 +115,7 @@ public class PrimitiveMemTableTest {
 
   @Test
   public void simpleTest() throws IOException, QueryProcessException, MetadataException {
-    IMemTable memTable = new PrimitiveMemTable();
+    IMemTable memTable = new PrimitiveMemTable(database);
     int count = 10;
     String deviceId = "d1";
     String[] measurementId = new String[count];
@@ -161,7 +162,7 @@ public class PrimitiveMemTableTest {
 
   @Test
   public void totalSeriesNumberTest() throws IOException, QueryProcessException, MetadataException {
-    IMemTable memTable = new PrimitiveMemTable();
+    IMemTable memTable = new PrimitiveMemTable(database);
     int count = 10;
     String deviceId = "d1";
     String[] measurementId = new String[count];
@@ -211,7 +212,7 @@ public class PrimitiveMemTableTest {
 
   @Test
   public void queryWithDeletionTest() throws IOException, QueryProcessException, MetadataException {
-    IMemTable memTable = new PrimitiveMemTable();
+    IMemTable memTable = new PrimitiveMemTable(database);
     int count = 10;
     String deviceId = "d1";
     String[] measurementId = new String[count];
@@ -265,7 +266,7 @@ public class PrimitiveMemTableTest {
   @Test
   public void queryAlignChuckWithDeletionTest()
       throws IOException, QueryProcessException, MetadataException {
-    IMemTable memTable = new PrimitiveMemTable();
+    IMemTable memTable = new PrimitiveMemTable(database);
     int count = 10;
     String deviceId = "d1";
     String[] measurementId = new String[count];
@@ -426,7 +427,7 @@ public class PrimitiveMemTableTest {
 
   @Test
   public void testFloatType() throws IOException, QueryProcessException, MetadataException {
-    IMemTable memTable = new PrimitiveMemTable();
+    IMemTable memTable = new PrimitiveMemTable(database);
     String deviceId = "d1";
     int size = 100;
     write(memTable, deviceId, "s1", TSDataType.FLOAT, TSEncoding.RLE, size);
@@ -435,7 +436,7 @@ public class PrimitiveMemTableTest {
   @Test
   public void testAllType()
       throws IOException, QueryProcessException, MetadataException, WriteProcessException {
-    IMemTable memTable = new PrimitiveMemTable();
+    IMemTable memTable = new PrimitiveMemTable(database);
     int count = 10;
     String deviceId = "d1";
     String[] measurementId = new String[count];
@@ -539,7 +540,7 @@ public class PrimitiveMemTableTest {
   @Test
   public void testSerializeSize()
       throws IOException, QueryProcessException, MetadataException, WriteProcessException {
-    IMemTable memTable = new PrimitiveMemTable();
+    IMemTable memTable = new PrimitiveMemTable(database);
     int count = 10;
     String deviceId = "d1";
     String[] measurementId = new String[count];
diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/checkpoint/CheckpointManagerTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/checkpoint/CheckpointManagerTest.java
index a5039fd4d07..6b34810e7c5 100644
--- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/checkpoint/CheckpointManagerTest.java
+++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/checkpoint/CheckpointManagerTest.java
@@ -48,6 +48,7 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 public class CheckpointManagerTest {
+  private static final String database = "root.test";
   private static final IoTDBConfig config = IoTDBDescriptor.getInstance().getConfig();
   private static final String identifier = String.valueOf(Integer.MAX_VALUE);
   private static final String logDirectory = TestConstant.BASE_OUTPUT_PATH.concat("wal-test");
@@ -97,7 +98,7 @@ public class CheckpointManagerTest {
           () -> {
             String tsFilePath = logDirectory + File.separator + versionId + ".tsfile";
             MemTableInfo memTableInfo =
-                new MemTableInfo(new PrimitiveMemTable(), tsFilePath, versionId);
+                new MemTableInfo(new PrimitiveMemTable(database), tsFilePath, versionId);
             versionId2memTableId.put(versionId, memTableInfo.getMemTableId());
             checkpointManager.makeCreateMemTableCP(memTableInfo);
             if (versionId < memTablesNum / 2) {
@@ -133,7 +134,8 @@ public class CheckpointManagerTest {
     while (size < config.getCheckpointFileSizeThresholdInByte()) {
       ++versionId;
       String tsFilePath = logDirectory + File.separator + versionId + ".tsfile";
-      MemTableInfo memTableInfo = new MemTableInfo(new PrimitiveMemTable(), tsFilePath, versionId);
+      MemTableInfo memTableInfo =
+          new MemTableInfo(new PrimitiveMemTable(database), tsFilePath, versionId);
       versionId2memTableId.put(versionId, memTableInfo.getMemTableId());
       Checkpoint checkpoint =
           new Checkpoint(
diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/io/CheckpointFileTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/io/CheckpointFileTest.java
index 78e898c08c2..b3a28a2e52d 100644
--- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/io/CheckpointFileTest.java
+++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/io/CheckpointFileTest.java
@@ -41,6 +41,7 @@ import static org.junit.Assert.assertEquals;
 public class CheckpointFileTest {
   private final File checkpointFile =
       new File(TestConstant.BASE_OUTPUT_PATH.concat("_0.checkpoint"));
+  private static final String database = "root.test";
 
   @Before
   public void setUp() throws Exception {
@@ -58,7 +59,8 @@ public class CheckpointFileTest {
 
   @Test
   public void testReadNormalFile() throws IOException {
-    MemTableInfo fakeMemTableInfo = new MemTableInfo(new PrimitiveMemTable(), "fake.tsfile", 0);
+    MemTableInfo fakeMemTableInfo =
+        new MemTableInfo(new PrimitiveMemTable(database), "fake.tsfile", 0);
     List<Checkpoint> expectedCheckpoints = new ArrayList<>();
     expectedCheckpoints.add(
         new Checkpoint(CheckpointType.GLOBAL_MEMORY_TABLE_INFO, Collections.emptyList()));
@@ -101,7 +103,8 @@ public class CheckpointFileTest {
 
   @Test
   public void testReadBrokenFile() throws IOException {
-    MemTableInfo fakeMemTableInfo = new MemTableInfo(new PrimitiveMemTable(), "fake.tsfile", 0);
+    MemTableInfo fakeMemTableInfo =
+        new MemTableInfo(new PrimitiveMemTable(database), "fake.tsfile", 0);
     List<Checkpoint> expectedCheckpoints = new ArrayList<>();
     expectedCheckpoints.add(
         new Checkpoint(CheckpointType.GLOBAL_MEMORY_TABLE_INFO, Collections.emptyList()));
diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/node/WALEntryHandlerTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/node/WALEntryHandlerTest.java
index 39dda5f68c4..55835c7697e 100644
--- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/node/WALEntryHandlerTest.java
+++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/node/WALEntryHandlerTest.java
@@ -67,7 +67,8 @@ public class WALEntryHandlerTest {
   private static final String logDirectory2 =
       TestConstant.BASE_OUTPUT_PATH.concat("wal-test" + identifier2);
 
-  private static final String devicePath = "root.test_sg.test_d";
+  private static final String databasePath = "root.test_sg";
+  private static final String devicePath = databasePath + ".test_d";
   private WALMode prevMode;
   private boolean prevIsClusterMode;
   private WALNode walNode1;
@@ -98,7 +99,7 @@ public class WALEntryHandlerTest {
 
   @Test(expected = MemTablePinException.class)
   public void pinDeletedMemTable() throws Exception {
-    IMemTable memTable = new PrimitiveMemTable();
+    IMemTable memTable = new PrimitiveMemTable(databasePath);
     walNode1.onMemTableCreated(memTable, logDirectory1 + "/" + "fake.tsfile");
     WALFlushListener flushListener =
         walNode1.log(
@@ -111,7 +112,7 @@ public class WALEntryHandlerTest {
 
   @Test
   public void pinMemTable() throws Exception {
-    IMemTable memTable = new PrimitiveMemTable();
+    IMemTable memTable = new PrimitiveMemTable(databasePath);
     walNode1.onMemTableCreated(memTable, logDirectory1 + "/" + "fake.tsfile");
     InsertRowNode node1 = getInsertRowNode(devicePath, System.currentTimeMillis());
     node1.setSearchIndex(1);
@@ -141,7 +142,7 @@ public class WALEntryHandlerTest {
 
   @Test(expected = MemTablePinException.class)
   public void unpinDeletedMemTable() throws Exception {
-    IMemTable memTable = new PrimitiveMemTable();
+    IMemTable memTable = new PrimitiveMemTable(databasePath);
     walNode1.onMemTableCreated(memTable, logDirectory1 + "/" + "fake.tsfile");
     WALFlushListener flushListener =
         walNode1.log(
@@ -154,7 +155,7 @@ public class WALEntryHandlerTest {
 
   @Test
   public void unpinFlushedMemTable() throws Exception {
-    IMemTable memTable = new PrimitiveMemTable();
+    IMemTable memTable = new PrimitiveMemTable(databasePath);
     walNode1.onMemTableCreated(memTable, logDirectory1 + "/" + "fake.tsfile");
     WALFlushListener flushListener =
         walNode1.log(
@@ -178,7 +179,7 @@ public class WALEntryHandlerTest {
 
   @Test
   public void unpinMemTable() throws Exception {
-    IMemTable memTable = new PrimitiveMemTable();
+    IMemTable memTable = new PrimitiveMemTable(databasePath);
     walNode1.onMemTableCreated(memTable, logDirectory1 + "/" + "fake.tsfile");
     InsertRowNode node1 = getInsertRowNode(devicePath, System.currentTimeMillis());
     node1.setSearchIndex(1);
@@ -207,7 +208,7 @@ public class WALEntryHandlerTest {
 
   @Test
   public void getUnFlushedValue() throws Exception {
-    IMemTable memTable = new PrimitiveMemTable();
+    IMemTable memTable = new PrimitiveMemTable(databasePath);
     walNode1.onMemTableCreated(memTable, logDirectory1 + "/" + "fake.tsfile");
     InsertRowNode node1 = getInsertRowNode(devicePath, System.currentTimeMillis());
     node1.setSearchIndex(1);
@@ -221,7 +222,7 @@ public class WALEntryHandlerTest {
 
   @Test
   public void getFlushedValue() throws Exception {
-    IMemTable memTable = new PrimitiveMemTable();
+    IMemTable memTable = new PrimitiveMemTable(databasePath);
     walNode1.onMemTableCreated(memTable, logDirectory1 + "/" + "fake.tsfile");
     InsertRowNode node1 = getInsertRowNode(devicePath, System.currentTimeMillis());
     node1.setSearchIndex(1);
@@ -247,7 +248,7 @@ public class WALEntryHandlerTest {
       String logDirectory = i % 2 == 0 ? logDirectory1 : logDirectory2;
       Callable<Void> writeTask =
           () -> {
-            IMemTable memTable = new PrimitiveMemTable();
+            IMemTable memTable = new PrimitiveMemTable(databasePath);
             walNode.onMemTableCreated(memTable, logDirectory + "/" + "fake.tsfile");
 
             List<WALFlushListener> walFlushListeners = new ArrayList<>();
diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/node/WALNodeTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/node/WALNodeTest.java
index 4d6d30883fe..0f19d3b48f8 100644
--- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/node/WALNodeTest.java
+++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/node/WALNodeTest.java
@@ -68,7 +68,8 @@ public class WALNodeTest {
   private static final IoTDBConfig config = IoTDBDescriptor.getInstance().getConfig();
   private static final String identifier = String.valueOf(Integer.MAX_VALUE);
   private static final String logDirectory = TestConstant.BASE_OUTPUT_PATH.concat("wal-test");
-  private static final String devicePath = "root.test_sg.test_d";
+  private static final String databasePath = "root.test_sg";
+  private static final String devicePath = databasePath + ".test_d";
   private WALMode prevMode;
   private boolean prevIsClusterMode;
   private WALNode walNode;
@@ -226,7 +227,7 @@ public class WALNodeTest {
     for (int i = 0; i < memTablesNum; ++i) {
       Callable<Void> writeTask =
           () -> {
-            IMemTable memTable = new PrimitiveMemTable();
+            IMemTable memTable = new PrimitiveMemTable(databasePath);
             long memTableId = memTable.getMemTableId();
             String tsFilePath = logDirectory + File.separator + memTableId + ".tsfile";
             long firstFileVersionId = walNode.getCurrentLogVersion();
@@ -260,7 +261,7 @@ public class WALNodeTest {
     List<WALFlushListener> walFlushListeners = new ArrayList<>();
     // write until log is rolled
     long time = 0;
-    IMemTable memTable = new PrimitiveMemTable();
+    IMemTable memTable = new PrimitiveMemTable(databasePath);
     long memTableId = memTable.getMemTableId();
     String tsFilePath = logDirectory + File.separator + memTableId + ".tsfile";
     walNode.onMemTableCreated(memTable, tsFilePath);
@@ -273,7 +274,7 @@ public class WALNodeTest {
       walFlushListeners.add(walFlushListener);
     }
     walNode.onMemTableFlushed(memTable);
-    walNode.onMemTableCreated(new PrimitiveMemTable(), tsFilePath);
+    walNode.onMemTableCreated(new PrimitiveMemTable(databasePath), tsFilePath);
     // check existence of _0-0-0.wal file and _1-0-1.wal file
     assertTrue(
         new File(
diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/WALRecoverManagerTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/WALRecoverManagerTest.java
index 1a0d3a07d8c..500fb2df1da 100644
--- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/WALRecoverManagerTest.java
+++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/WALRecoverManagerTest.java
@@ -151,7 +151,7 @@ public class WALRecoverManagerTest {
     List<Future<Void>> futures = new ArrayList<>();
     long firstWALVersionId = walBuffer.getCurrentWALFileVersion();
     for (int i = 0; i < threadsNum; ++i) {
-      IMemTable fakeMemTable = new PrimitiveMemTable();
+      IMemTable fakeMemTable = new PrimitiveMemTable(SG_NAME);
       long memTableId = fakeMemTable.getMemTableId();
       Callable<Void> writeTask =
           () -> {
@@ -185,7 +185,7 @@ public class WALRecoverManagerTest {
     Thread.sleep(1_000);
     // write normal .wal files
     long firstValidVersionId = walBuffer.getCurrentWALFileVersion();
-    IMemTable targetMemTable = new PrimitiveMemTable();
+    IMemTable targetMemTable = new PrimitiveMemTable(SG_NAME);
     WALEntry walEntry =
         new WALInfoEntry(targetMemTable.getMemTableId(), getInsertRowNode(DEVICE2_NAME, 4L), true);
     walBuffer.write(walEntry);
@@ -210,7 +210,7 @@ public class WALRecoverManagerTest {
     List<Future<Void>> futures = new ArrayList<>();
     long firstWALVersionId = walBuffer.getCurrentWALFileVersion();
     for (int i = 0; i < threadsNum; ++i) {
-      IMemTable fakeMemTable = new PrimitiveMemTable();
+      IMemTable fakeMemTable = new PrimitiveMemTable(SG_NAME);
       long memTableId = fakeMemTable.getMemTableId();
       Callable<Void> writeTask =
           () -> {
@@ -244,7 +244,7 @@ public class WALRecoverManagerTest {
     Thread.sleep(1_000);
     // write normal .wal files
     long firstValidVersionId = walBuffer.getCurrentWALFileVersion();
-    IMemTable targetMemTable = new PrimitiveMemTable();
+    IMemTable targetMemTable = new PrimitiveMemTable(SG_NAME);
     InsertRowNode insertRowNode = getInsertRowNode(DEVICE2_NAME, 4L);
     targetMemTable.insert(insertRowNode);
 
@@ -415,7 +415,7 @@ public class WALRecoverManagerTest {
     tsFileWithWALResource = new TsFileResource(fileWithWAL);
     UnsealedTsFileRecoverPerformer recoverPerformer =
         new UnsealedTsFileRecoverPerformer(
-            tsFileWithWALResource, true, performer -> assertFalse(performer.canWrite()));
+            tsFileWithWALResource, true, performer -> assertFalse(performer.canWrite()), SG_NAME);
     recoverManager.addRecoverPerformer(recoverPerformer);
     recoverListeners.add(recoverPerformer.getRecoverListener());
 
@@ -425,7 +425,10 @@ public class WALRecoverManagerTest {
     tsFileWithoutWALResource = new TsFileResource(fileWithoutWAL);
     recoverPerformer =
         new UnsealedTsFileRecoverPerformer(
-            tsFileWithoutWALResource, true, performer -> assertFalse(performer.canWrite()));
+            tsFileWithoutWALResource,
+            true,
+            performer -> assertFalse(performer.canWrite()),
+            SG_NAME);
     recoverManager.addRecoverPerformer(recoverPerformer);
     recoverListeners.add(recoverPerformer.getRecoverListener());
 
diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/TsFilePlanRedoerTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/TsFilePlanRedoerTest.java
index 5c440b16165..2c18ebf9902 100644
--- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/TsFilePlanRedoerTest.java
+++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/TsFilePlanRedoerTest.java
@@ -145,7 +145,7 @@ public class TsFilePlanRedoerTest {
         });
 
     // redo InsertTabletPlan, vsg processor is used to test IdTable, don't test IdTable here
-    TsFilePlanRedoer planRedoer = new TsFilePlanRedoer(tsFileResource, true);
+    TsFilePlanRedoer planRedoer = new TsFilePlanRedoer(tsFileResource, true, SG_NAME);
     planRedoer.redoInsert(insertRowNode);
 
     // check data in memTable
@@ -217,7 +217,7 @@ public class TsFilePlanRedoerTest {
         });
 
     // redo InsertTabletPlan, vsg processor is used to test IdTable, don't test IdTable here
-    TsFilePlanRedoer planRedoer = new TsFilePlanRedoer(tsFileResource, true);
+    TsFilePlanRedoer planRedoer = new TsFilePlanRedoer(tsFileResource, true, SG_NAME);
     planRedoer.redoInsert(insertRowNode);
 
     // check data in memTable
@@ -303,7 +303,7 @@ public class TsFilePlanRedoerTest {
         });
 
     // redo InsertTabletPlan, vsg processor is used to test IdTable, don't test IdTable here
-    TsFilePlanRedoer planRedoer = new TsFilePlanRedoer(tsFileResource, true);
+    TsFilePlanRedoer planRedoer = new TsFilePlanRedoer(tsFileResource, true, SG_NAME);
     planRedoer.redoInsert(insertTabletNode);
 
     // check data in memTable
@@ -408,7 +408,7 @@ public class TsFilePlanRedoerTest {
         });
 
     // redo InsertTabletPlan, vsg processor is used to test IdTable, don't test IdTable here
-    TsFilePlanRedoer planRedoer = new TsFilePlanRedoer(tsFileResource, true);
+    TsFilePlanRedoer planRedoer = new TsFilePlanRedoer(tsFileResource, true, SG_NAME);
     planRedoer.redoInsert(insertTabletNode);
 
     // check data in memTable
@@ -485,7 +485,7 @@ public class TsFilePlanRedoerTest {
             times.length);
 
     // redo InsertTabletPlan, vsg processor is used to test IdTable, don't test IdTable here
-    TsFilePlanRedoer planRedoer = new TsFilePlanRedoer(tsFileResource, true);
+    TsFilePlanRedoer planRedoer = new TsFilePlanRedoer(tsFileResource, true, SG_NAME);
     planRedoer.redoInsert(insertTabletNode);
 
     // check data in memTable
@@ -536,7 +536,7 @@ public class TsFilePlanRedoerTest {
             times.length);
 
     // redo InsertTabletPlan, vsg processor is used to test IdTable, don't test IdTable here
-    TsFilePlanRedoer planRedoer = new TsFilePlanRedoer(tsFileResource, false);
+    TsFilePlanRedoer planRedoer = new TsFilePlanRedoer(tsFileResource, false, SG_NAME);
     planRedoer.redoInsert(insertTabletNode);
 
     // check data in memTable
@@ -593,7 +593,7 @@ public class TsFilePlanRedoerTest {
     // redo DeleteDataNode, vsg processor is used to test IdTable, don't test IdTable here
     File modsFile = new File(FILE_NAME.concat(ModificationFile.FILE_SUFFIX));
     assertFalse(modsFile.exists());
-    TsFilePlanRedoer planRedoer = new TsFilePlanRedoer(tsFileResource, false);
+    TsFilePlanRedoer planRedoer = new TsFilePlanRedoer(tsFileResource, false, SG_NAME);
     planRedoer.redoDelete(deleteDataNode);
     assertTrue(modsFile.exists());
   }
@@ -666,7 +666,7 @@ public class TsFilePlanRedoerTest {
             columns,
             times.length);
     // redo InsertTabletPlan, data region is used to test IdTable, don't test IdTable here
-    TsFilePlanRedoer planRedoer = new TsFilePlanRedoer(tsFileResource, true);
+    TsFilePlanRedoer planRedoer = new TsFilePlanRedoer(tsFileResource, true, SG_NAME);
     insertTabletNode.setMeasurementSchemas(schemas);
     planRedoer.redoInsert(insertTabletNode);
 
diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/UnsealedTsFileRecoverPerformerTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/UnsealedTsFileRecoverPerformerTest.java
index f96f79955f4..e87c031f60b 100644
--- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/UnsealedTsFileRecoverPerformerTest.java
+++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/UnsealedTsFileRecoverPerformerTest.java
@@ -126,7 +126,7 @@ public class UnsealedTsFileRecoverPerformerTest {
     // vsg processor is used to test IdTable, don't test IdTable here
     try (UnsealedTsFileRecoverPerformer recoverPerformer =
         new UnsealedTsFileRecoverPerformer(
-            tsFileResource, true, performer -> assertFalse(performer.canWrite()))) {
+            tsFileResource, true, performer -> assertFalse(performer.canWrite()), SG_NAME)) {
       recoverPerformer.startRecovery();
       assertTrue(recoverPerformer.hasCrashed());
       assertTrue(recoverPerformer.canWrite());
@@ -185,7 +185,7 @@ public class UnsealedTsFileRecoverPerformerTest {
     // vsg processor is used to test IdTable, don't test IdTable here
     try (UnsealedTsFileRecoverPerformer recoverPerformer =
         new UnsealedTsFileRecoverPerformer(
-            tsFileResource, true, performer -> assertFalse(performer.canWrite()))) {
+            tsFileResource, true, performer -> assertFalse(performer.canWrite()), SG_NAME)) {
       recoverPerformer.startRecovery();
       assertTrue(recoverPerformer.hasCrashed());
       assertTrue(recoverPerformer.canWrite());
@@ -312,7 +312,7 @@ public class UnsealedTsFileRecoverPerformerTest {
     // vsg processor is used to test IdTable, don't test IdTable here
     try (UnsealedTsFileRecoverPerformer recoverPerformer =
         new UnsealedTsFileRecoverPerformer(
-            tsFileResource, true, performer -> assertFalse(performer.canWrite()))) {
+            tsFileResource, true, performer -> assertFalse(performer.canWrite()), SG_NAME)) {
       recoverPerformer.startRecovery();
       assertTrue(recoverPerformer.hasCrashed());
       assertTrue(recoverPerformer.canWrite());
diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/utils/WALInsertNodeCacheTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/utils/WALInsertNodeCacheTest.java
index 1518ffc4dcf..cd277191691 100644
--- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/utils/WALInsertNodeCacheTest.java
+++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/utils/WALInsertNodeCacheTest.java
@@ -46,7 +46,8 @@ public class WALInsertNodeCacheTest {
   private static final IoTDBConfig config = IoTDBDescriptor.getInstance().getConfig();
   private static final String identifier = String.valueOf(Integer.MAX_VALUE);
   private static final String logDirectory = TestConstant.BASE_OUTPUT_PATH.concat("wal-test");
-  private static final String devicePath = "root.test_sg.test_d";
+  private static final String databasePath = "root.test_sg";
+  private static final String devicePath = databasePath + ".test_d";
   private static final WALInsertNodeCache cache = WALInsertNodeCache.getInstance();
   private WALMode prevMode;
   private boolean prevIsClusterMode;
@@ -74,7 +75,7 @@ public class WALInsertNodeCacheTest {
 
   @Test
   public void testLoadUnsealedWALFile() throws Exception {
-    IMemTable memTable = new PrimitiveMemTable();
+    IMemTable memTable = new PrimitiveMemTable(databasePath);
     walNode.onMemTableCreated(memTable, logDirectory + "/" + "fake.tsfile");
     InsertRowNode node1 = getInsertRowNode(devicePath, System.currentTimeMillis());
     node1.setSearchIndex(1);
@@ -91,7 +92,7 @@ public class WALInsertNodeCacheTest {
   @Test
   public void testBatchLoad() throws Exception {
     // write memTable1
-    IMemTable memTable1 = new PrimitiveMemTable();
+    IMemTable memTable1 = new PrimitiveMemTable(databasePath);
     walNode.onMemTableCreated(memTable1, logDirectory + "/" + "fake1.tsfile");
     InsertRowNode node1 = getInsertRowNode(devicePath, System.currentTimeMillis());
     node1.setSearchIndex(1);
@@ -102,7 +103,7 @@ public class WALInsertNodeCacheTest {
     WALFlushListener flushListener2 = walNode.log(memTable1.getMemTableId(), node2);
     WALEntryPosition position2 = flushListener2.getWalEntryHandler().getWalEntryPosition();
     // write memTable2
-    IMemTable memTable2 = new PrimitiveMemTable();
+    IMemTable memTable2 = new PrimitiveMemTable(databasePath);
     walNode.onMemTableCreated(memTable2, logDirectory + "/" + "fake2.tsfile");
     InsertRowNode node3 = getInsertRowNode(devicePath, System.currentTimeMillis());
     node1.setSearchIndex(3);