Skip to content

Commit f7f1465

Browse files
committed
add rate limit
1 parent 8d6ce26 commit f7f1465

File tree

1 file changed

+17
-0
lines changed
  • iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils

1 file changed

+17
-0
lines changed

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/CompactionUtils.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import org.apache.iotdb.metrics.utils.SystemMetric;
5252

5353
import com.google.common.io.BaseEncoding;
54+
import com.google.common.util.concurrent.RateLimiter;
5455
import org.apache.tsfile.common.constant.TsFileConstant;
5556
import org.apache.tsfile.file.metadata.ChunkMetadata;
5657
import org.apache.tsfile.file.metadata.IDeviceID;
@@ -584,6 +585,10 @@ private static void recursiveTTLCheckForTableDir(
584585
if (children == null) {
585586
return;
586587
}
588+
// The rate limit may only work on filesystems like ext4, directory File.length() is
589+
// block-aligned
590+
// and reflects allocated directory entry blocks.
591+
acquireCompactionReadRate(currentFile.length());
587592
for (File child : children) {
588593
recursiveTTLCheckForTableDir(
589594
child, depth + 1, maxObjectFileDepth, canDistinguishDirectoryByFileName, lowerBoundInMS);
@@ -619,4 +624,16 @@ private static void checkTTLAndDeleteExpiredObjectFile(
619624
} catch (Exception ignored) {
620625
}
621626
}
627+
628+
private static void acquireCompactionReadRate(long size) {
629+
if (size <= 0) {
630+
return;
631+
}
632+
RateLimiter rateLimiter = CompactionTaskManager.getInstance().getCompactionReadRateLimiter();
633+
while (size >= Integer.MAX_VALUE) {
634+
size -= Integer.MAX_VALUE;
635+
rateLimiter.acquire(Integer.MAX_VALUE);
636+
}
637+
rateLimiter.acquire((int) size);
638+
}
622639
}

0 commit comments

Comments
 (0)