You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by qi...@apache.org on 2020/01/09 07:26:48 UTC

[incubator-iotdb] 01/01: fix concurrent modification

This is an automated email from the ASF dual-hosted git repository.

qiaojialin pushed a commit to branch fix_remove_resource_bug
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git

commit 381afdcd1319f7f840a939ec060db0af237afb1a
Author: qiaojialin <64...@qq.com>
AuthorDate: Thu Jan 9 15:26:20 2020 +0800

    fix concurrent modification
---
 .../org/apache/iotdb/db/query/control/QueryFileManager.java    | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/query/control/QueryFileManager.java b/server/src/main/java/org/apache/iotdb/db/query/control/QueryFileManager.java
index 5c58351..ad2cfd2 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/control/QueryFileManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/control/QueryFileManager.java
@@ -19,6 +19,7 @@
 package org.apache.iotdb.db.query.control;
 
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -67,17 +68,18 @@ public class QueryFileManager {
   }
 
   private void addUsedFilesForQuery(long queryId, List<TsFileResource> resources) {
-    for (TsFileResource tsFileResource : resources) {
-      // the file may change from open to closed within the few statements, so the initial status
-      // should be recorded to ensure consistency
+    Iterator<TsFileResource> iterator = resources.iterator();
+    while (iterator.hasNext()) {
+      TsFileResource tsFileResource = iterator.next();
       boolean isClosed = tsFileResource.isClosed();
       addFilePathToMap(queryId, tsFileResource, isClosed);
+
       // this file may be deleted just before we lock it
       if (tsFileResource.isDeleted()) {
         Map<Long, Set<TsFileResource>> pathMap = !isClosed ? unsealedFilePathsMap : sealedFilePathsMap;
         pathMap.get(queryId).remove(tsFileResource);
         FileReaderManager.getInstance().decreaseFileReaderReference(tsFileResource, isClosed);
-        resources.remove(tsFileResource);
+        iterator.remove();
       }
     }
   }