Skip to content

Commit

Permalink
Fix estimating compaction memory without acquire read lock (apache#11972
Browse files Browse the repository at this point in the history
)
  • Loading branch information
shuwenwei authored Jan 26, 2024
1 parent 40fc15b commit 6c15634
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.concurrent.TimeUnit;

import static org.apache.iotdb.db.utils.constant.TestConstant.TIMESTAMP_STR;
import static org.junit.Assert.assertNotNull;
Expand Down Expand Up @@ -81,6 +82,7 @@ public void testRepairData() {
if (sorted) {
return;
}
Thread.sleep(TimeUnit.SECONDS.toMillis(1));
}
Assert.fail();
} catch (Exception e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.storageengine.dataregion.flush.CompressionRatio;
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResourceStatus;
import org.apache.iotdb.db.storageengine.dataregion.tsfile.timeindex.DeviceTimeIndex;
import org.apache.iotdb.db.storageengine.dataregion.tsfile.timeindex.FileTimeIndex;
import org.apache.iotdb.db.storageengine.dataregion.tsfile.timeindex.ITimeIndex;
Expand Down Expand Up @@ -63,6 +64,15 @@ public abstract class AbstractCompactionEstimator {

protected abstract long calculatingDataMemoryCost(CompactionTaskInfo taskInfo) throws IOException;

protected boolean isAllSourceFileExist(List<TsFileResource> resources) {
for (TsFileResource resource : resources) {
if (resource.getStatus() == TsFileResourceStatus.DELETED) {
return false;
}
}
return true;
}

protected CompactionTaskInfo calculatingCompactionTaskInfo(List<TsFileResource> resources)
throws IOException {
List<FileInfo> fileInfoList = new ArrayList<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,9 @@ public long estimateCrossCompactionMemory(

long cost = 0;
try {
if (!isAllSourceFileExist(resources)) {
return -1L;
}
CompactionTaskInfo taskInfo = calculatingCompactionTaskInfo(resources);
cost += calculatingMetadataMemoryCost(taskInfo);
cost += calculatingDataMemoryCost(taskInfo);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,22 @@ public long estimateInnerCompactionMemory(List<TsFileResource> resources) throws
if (!config.isEnableCompactionMemControl()) {
return 0;
}
CompactionTaskInfo taskInfo = calculatingCompactionTaskInfo(resources);
long cost = calculatingMetadataMemoryCost(taskInfo);
cost += calculatingDataMemoryCost(taskInfo);

if (!CompactionEstimateUtils.addReadLock(resources)) {
return -1L;
}
long cost = 0;
try {
if (!isAllSourceFileExist(resources)) {
return -1L;
}

CompactionTaskInfo taskInfo = calculatingCompactionTaskInfo(resources);
cost = calculatingMetadataMemoryCost(taskInfo);
cost += calculatingDataMemoryCost(taskInfo);
} finally {
CompactionEstimateUtils.releaseReadLock(resources);
}
return cost;
}
}

0 comments on commit 6c15634

Please sign in to comment.