[NO ISSUE][STO] Fix concurrency issue in merge operations
- user model changes: no
- storage format changes: no
- interface changes: no
Details:
- Synchronize on opTracker when entering components for merge
operations.
Change-Id: Ic612afe7bd250dea1a75d6121af437a201636381
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2643
Sonar-Qube: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: Till Westmann <tillw@apache.org>
Contrib: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java
index 2a3e983..53e6a57 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java
@@ -566,7 +566,9 @@
if (LOGGER.isInfoEnabled()) {
LOGGER.info("Started a merge operation for index: {}", lsmIndex);
}
- enterComponents(operation.getAccessor().getOpContext(), LSMOperationType.MERGE);
+ synchronized (opTracker) {
+ enterComponents(operation.getAccessor().getOpContext(), LSMOperationType.MERGE);
+ }
try {
doIo(operation);
} finally {
@@ -577,7 +579,7 @@
operation.getAccessor().getOpContext().getModificationCallback());
}
if (LOGGER.isInfoEnabled()) {
- LOGGER.info("Finished the merge operation for index: {}. Result: ", lsmIndex, operation.getStatus());
+ LOGGER.info("Finished the merge operation for index: {}. Result: {}", lsmIndex, operation.getStatus());
}
}