You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ma...@apache.org on 2022/07/21 10:16:49 UTC

[iotdb] branch IOTDB-3164 updated: remove bug in chooseMemtableToFlush

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

marklau99 pushed a commit to branch IOTDB-3164
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/IOTDB-3164 by this push:
     new 7364451bd8 remove bug in chooseMemtableToFlush
7364451bd8 is described below

commit 7364451bd8da78c52c72d51bdd467e885b0f13e8
Author: Liu Xuxin <li...@outlook.com>
AuthorDate: Thu Jul 21 18:16:38 2022 +0800

    remove bug in chooseMemtableToFlush
---
 .../src/main/java/org/apache/iotdb/db/engine/StorageEngine.java  | 2 +-
 .../org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java | 3 ---
 .../java/org/apache/iotdb/db/rescon/memory/MemoryController.java | 2 +-
 .../org/apache/iotdb/db/rescon/memory/WriteMemoryController.java | 9 ++++++++-
 4 files changed, 10 insertions(+), 6 deletions(-)

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 701e5acc96..5ea98f43a8 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
@@ -195,7 +195,7 @@ public class StorageEngine implements IService {
   public static void blockInsertionIfReject(TsFileProcessor tsFileProcessor)
       throws WriteProcessRejectException {
     long startTime = System.currentTimeMillis();
-    while (WriteMemoryController.getInstance().isRejected()) {
+    while (WriteMemoryController.getInstance().checkRejected()) {
       if (tsFileProcessor != null && tsFileProcessor.shouldFlush()) {
         break;
       }
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java
index 156b640caf..1f041b8285 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java
@@ -786,7 +786,6 @@ public class TsFileProcessor {
     tsFileProcessorInfo.addTSPMemCost(chunkMetadataIncrement);
     WriteMemoryController controller = WriteMemoryController.getInstance();
     boolean allocateSuccess = false;
-    long startTime = System.nanoTime();
     try {
       while (workMemTable.needToAllocate(memTableIncrement)) {
         allocateSuccess =
@@ -796,8 +795,6 @@ public class TsFileProcessor {
         } else {
           storageGroupInfo.addAllocateSize(WriteMemoryController.FRAME_SIZE);
           workMemTable.addAllocatedMemSize(WriteMemoryController.FRAME_SIZE);
-          logger.error(
-              "Allocation time for {} is {} ns", storageGroupName, System.nanoTime() - startTime);
         }
       }
     } catch (WriteProcessRejectException e) {
diff --git a/server/src/main/java/org/apache/iotdb/db/rescon/memory/MemoryController.java b/server/src/main/java/org/apache/iotdb/db/rescon/memory/MemoryController.java
index b6fa801547..71e7b4d96f 100644
--- a/server/src/main/java/org/apache/iotdb/db/rescon/memory/MemoryController.java
+++ b/server/src/main/java/org/apache/iotdb/db/rescon/memory/MemoryController.java
@@ -137,7 +137,7 @@ public class MemoryController<T> {
     }
   }
 
-  private void checkTrigger(long newUsage, T triggerParam) {
+  protected void checkTrigger(long newUsage, T triggerParam) {
     if (newUsage >= triggerThreshold && trigger != null) {
       if (triggerRunning.compareAndSet(false, true)) {
         try {
diff --git a/server/src/main/java/org/apache/iotdb/db/rescon/memory/WriteMemoryController.java b/server/src/main/java/org/apache/iotdb/db/rescon/memory/WriteMemoryController.java
index 1581ecd7ac..bb4bb32c0c 100644
--- a/server/src/main/java/org/apache/iotdb/db/rescon/memory/WriteMemoryController.java
+++ b/server/src/main/java/org/apache/iotdb/db/rescon/memory/WriteMemoryController.java
@@ -56,6 +56,9 @@ public class WriteMemoryController extends MemoryController<TsFileProcessor> {
 
   public boolean tryAllocateMemory(long size, StorageGroupInfo info, TsFileProcessor processor) {
     boolean success = super.tryAllocateMemory(size, processor);
+    if (!success) {
+      checkTrigger(memoryUsage.get(), processor);
+    }
     if (memoryUsage.get() > REJECT_THRESHOLD && !rejected) {
       logger.info(
           "Change system to reject status. Triggered by: logical SG ({}), mem cost delta ({}), totalSgMemCost ({}).",
@@ -112,7 +115,10 @@ public class WriteMemoryController extends MemoryController<TsFileProcessor> {
         ((double) memoryUsage.get()) / 1024.0d / 1024.0d);
   }
 
-  public boolean isRejected() {
+  public boolean checkRejected() {
+    if (rejected) {
+      checkTrigger(memoryUsage.get(), null);
+    }
     return rejected;
   }
 
@@ -168,6 +174,7 @@ public class WriteMemoryController extends MemoryController<TsFileProcessor> {
       }
       if (selectedTsFileProcessor.getWorkMemTable() == null
           || selectedTsFileProcessor.getWorkMemTable().shouldFlush()) {
+        allTsFileProcessors.poll();
         continue;
       }
       long memUsageForThisMemTable = selectedTsFileProcessor.getWorkMemTableAllocateSize();