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.");
+ }
}
}