jt2594838 commented on a change in pull request #2605:
URL: https://github.com/apache/iotdb/pull/2605#discussion_r568278793
##########
File path:
server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessor.java
##########
@@ -1886,13 +1889,9 @@ private void loadUpgradedResources(List<TsFileResource>
resources, boolean isseq
resources.clear();
}
- public void merge(boolean fullMerge) {
- writeLock();
- try {
- this.tsFileManagement.merge(fullMerge,
tsFileManagement.getTsFileList(true),
- tsFileManagement.getTsFileList(false), dataTTL);
- } finally {
- writeUnlock();
+ public void merge(boolean isFullMerge) {
+ for (long timePartitionId : timePartitionIdVersionControllerMap.keySet()) {
+ executeCompaction(timePartitionId, isFullMerge);
}
Review comment:
Unfortunately, a simple if-else is barely enough for concurrency
control, because the condition check and the flag set action are not atomic,
multiple threads may still enter that block concurrently.
##########
File path:
server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessor.java
##########
@@ -1788,6 +1789,7 @@ private void executeCompaction(long timePartition,
boolean fullMerge){
logger.info("{} last compaction merge task is working, skip current
merge",
logicalStorageGroupName + "-" + virtualStorageGroupId);
}
+ writeUnlock();
Review comment:
Always do unlock in a `finally` block.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]