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/04/16 13:29:51 UTC

[incubator-iotdb] branch master updated: fix concurrent auto set storage group bug (#1061)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 8b96ae3  fix concurrent auto set storage group bug (#1061)
8b96ae3 is described below

commit 8b96ae38efdec9cf0f6ce0c61865f2cc6745ed05
Author: Jialin Qiao <qj...@mails.tsinghua.edu.cn>
AuthorDate: Thu Apr 16 21:29:43 2020 +0800

    fix concurrent auto set storage group bug (#1061)
---
 .../java/org/apache/iotdb/db/metadata/MManager.java     | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
index f4d8fd9..4e3c410 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
@@ -46,6 +46,7 @@ import org.apache.iotdb.db.exception.ConfigAdjusterException;
 import org.apache.iotdb.db.exception.metadata.IllegalPathException;
 import org.apache.iotdb.db.exception.metadata.MetadataException;
 import org.apache.iotdb.db.exception.metadata.PathNotExistException;
+import org.apache.iotdb.db.exception.metadata.StorageGroupAlreadySetException;
 import org.apache.iotdb.db.exception.metadata.StorageGroupNotSetException;
 import org.apache.iotdb.db.metadata.mnode.InternalMNode;
 import org.apache.iotdb.db.metadata.mnode.LeafMNode;
@@ -763,12 +764,20 @@ public class MManager {
       }
     } finally {
       lock.readLock().unlock();
-      if (autoCreateSchema) {
-        if (shouldSetStorageGroup) {
-          String storageGroupName = MetaUtils.getStorageGroupNameByLevel(path, sgLevel);
-          setStorageGroup(storageGroupName);
+      lock.writeLock().lock();
+      try {
+        if (autoCreateSchema) {
+          if (shouldSetStorageGroup) {
+            String storageGroupName = MetaUtils.getStorageGroupNameByLevel(path, sgLevel);
+            setStorageGroup(storageGroupName);
+          }
+          node = mtree.getDeviceNodeWithAutoCreating(path);
         }
+      } catch (StorageGroupAlreadySetException e) {
+        // ignore set storage group concurrently
         node = mtree.getDeviceNodeWithAutoCreating(path);
+      } finally {
+        lock.writeLock().unlock();
       }
     }
     return node;