This is an automated email from the ASF dual-hosted git repository. ejttianyu pushed a commit to branch fix_merge_stuck_bug in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git
commit c598cb32b0635a9200c27e393ed4f7b1370821e5 Author: EJTTianyu <[email protected]> AuthorDate: Thu Apr 30 13:10:15 2020 +0800 fix merge stuck bug --- .../db/engine/storagegroup/StorageGroupProcessor.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessor.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessor.java index 4a6037b..1f226ac 100755 --- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessor.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessor.java @@ -1383,7 +1383,6 @@ public class StorageGroupProcessor { @SuppressWarnings("squid:S1141") private void updateMergeModification(TsFileResource seqFile) { - seqFile.getWriteQueryLock().writeLock().lock(); try { // remove old modifications and write modifications generated during merge seqFile.removeModFile(); @@ -1401,8 +1400,6 @@ public class StorageGroupProcessor { } catch (IOException e) { logger.error("{} cannot clean the ModificationFile of {} after merge", storageGroupName, seqFile.getFile(), e); - } finally { - seqFile.getWriteQueryLock().writeLock().unlock(); } } @@ -1432,7 +1429,15 @@ public class StorageGroupProcessor { for (int i = 0; i < seqFiles.size(); i++) { TsFileResource seqFile = seqFiles.get(i); - mergeLock.writeLock().lock(); + while (!seqFile.getWriteQueryLock().writeLock().tryLock() || !mergeLock.writeLock() + .tryLock()) { + if (seqFile.getWriteQueryLock().writeLock().isHeldByCurrentThread()) { + seqFile.getWriteQueryLock().writeLock().unlock(); + } + if(mergeLock.writeLock().isHeldByCurrentThread()) { + mergeLock.writeLock().unlock(); + } + } try { updateMergeModification(seqFile); if (i == seqFiles.size() - 1) { @@ -1443,6 +1448,7 @@ public class StorageGroupProcessor { } } finally { mergeLock.writeLock().unlock(); + seqFile.getWriteQueryLock().writeLock().unlock(); } } logger.info("{} a merge task ends", storageGroupName);
