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

xingtanzjr pushed a commit to branch rel/0.13
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/rel/0.13 by this push:
     new c1aa55d51dc fix always waiting when cannot allocate memory for 
compaction (#10154)
c1aa55d51dc is described below

commit c1aa55d51dc394043318a6d8903577ccd579b305
Author: Liu Xuxin <[email protected]>
AuthorDate: Thu Jun 15 09:59:15 2023 +0800

    fix always waiting when cannot allocate memory for compaction (#10154)
---
 .../cross/rewrite/task/RewriteCrossSpaceCompactionTask.java    |  3 ++-
 .../src/main/java/org/apache/iotdb/db/rescon/SystemInfo.java   | 10 ++++++++++
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/task/RewriteCrossSpaceCompactionTask.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/task/RewriteCrossSpaceCompactionTask.java
index fe79edf8269..6907da9d32e 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/task/RewriteCrossSpaceCompactionTask.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/rewrite/task/RewriteCrossSpaceCompactionTask.java
@@ -89,8 +89,9 @@ public class RewriteCrossSpaceCompactionTask extends 
AbstractCrossSpaceCompactio
   protected void doCompaction() throws Exception {
     try {
       SystemInfo.getInstance().addCompactionMemoryCost(memoryCost);
-    } catch (InterruptedException e) {
+    } catch (Exception e) {
       logger.error("Thread get interrupted when allocating memory for 
compaction", e);
+      releaseAllLock();
       return;
     }
     try {
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 e99a2c36ceb..c9716e36437 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
@@ -282,10 +282,20 @@ public class SystemInfo {
       return;
     }
     long originSize = this.compactionMemoryCost.get();
+    long waittingTime = 0L;
     while (originSize + memoryCost > memorySizeForCompaction
         || !compactionMemoryCost.compareAndSet(originSize, originSize + 
memoryCost)) {
       Thread.sleep(100);
       originSize = this.compactionMemoryCost.get();
+      waittingTime += 100L;
+      if (waittingTime >= 60_000L) {
+        throw new RuntimeException(
+            "Cannot get enough memory for compaction, want "
+                + memoryCost
+                + " bytes but only "
+                + (memorySizeForCompaction - compactionMemoryCost.get())
+                + " bytes left.");
+      }
     }
   }
 

Reply via email to