You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ji...@apache.org on 2022/03/17 07:47:27 UTC

[iotdb] 29/45: fix a bug where storage groups could not be created automatically

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

jianyun pushed a commit to branch rocksdb/dev
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 1995926ca69570954bfadec0a4a0c8f29926738e
Author: lisijia <li...@360.cn>
AuthorDate: Fri Mar 11 10:39:12 2022 +0800

    fix a bug where storage groups could not be created automatically
---
 .../iotdb/db/metadata/rocksdb/MRocksDBManager.java | 25 +++++++++++-----------
 1 file changed, 12 insertions(+), 13 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/rocksdb/MRocksDBManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/rocksdb/MRocksDBManager.java
index 6eeb457..19c972d 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/rocksdb/MRocksDBManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/rocksdb/MRocksDBManager.java
@@ -363,7 +363,7 @@ public class MRocksDBManager implements IMetaManager {
     // sg check and create
     String[] nodes = path.getNodes();
     SchemaUtils.checkDataTypeWithEncoding(schema.getType(), schema.getEncodingType());
-    int sgIndex = ensureStorageGroup(path, path.getNodeLength() - 1);
+    int sgIndex = ensureStorageGroup(path);
 
     try {
       createTimeSeriesRecursively(
@@ -535,7 +535,7 @@ public class MRocksDBManager implements IMetaManager {
       MetaFormatUtils.checkNodeName(measurements.get(i));
     }
 
-    int sgIndex = ensureStorageGroup(prefixPath, prefixPath.getNodeLength() - 1);
+    int sgIndex = ensureStorageGroup(prefixPath);
 
     try {
       createEntityRecursively(
@@ -610,6 +610,13 @@ public class MRocksDBManager implements IMetaManager {
           }
         } else {
           if (start == nodes.length) {
+
+            // make sure sg node and entity node are different
+            // eg.,'root.a' is a storage group path, 'root.a.b' can not be a timeseries
+            if (checkResult.getResult(RocksDBMNodeType.STORAGE_GROUP)) {
+              throw new MetadataException("Storage Group Node and Entity Node could not be same!");
+            }
+
             if (!checkResult.getResult(RocksDBMNodeType.ENTITY)) {
               throw new PathAlreadyExistException("Node already exists but not entity");
             }
@@ -765,7 +772,7 @@ public class MRocksDBManager implements IMetaManager {
 
   // region Interfaces and Implementation for StorageGroup and TTL operation
   // including sg set and delete, and ttl set
-  private int ensureStorageGroup(PartialPath path, int entityIndex) throws MetadataException {
+  private int ensureStorageGroup(PartialPath path) throws MetadataException {
     int sgIndex = -1;
     String[] nodes = path.getNodes();
     try {
@@ -776,9 +783,6 @@ public class MRocksDBManager implements IMetaManager {
         }
         PartialPath sgPath =
             MetaUtils.getStorageGroupPathByLevel(path, config.getDefaultStorageGroupLevel());
-        if ((entityIndex - sgPath.getNodeLength()) < 1) {
-          throw new MetadataException("Storage Group Node and Entity Node could not be same!");
-        }
         setStorageGroup(sgPath);
         sgIndex = sgPath.getNodeLength() - 1;
       }
@@ -790,12 +794,6 @@ public class MRocksDBManager implements IMetaManager {
     } catch (RocksDBException e) {
       throw new MetadataException(e);
     }
-
-    // make sure sg node and entity node are different
-    if ((entityIndex - sgIndex) < 1) {
-      throw new MetadataException("Storage Group Node and Entity Node could not be same!");
-    }
-
     return sgIndex;
   }
 
@@ -1834,6 +1832,7 @@ public class MRocksDBManager implements IMetaManager {
   /** Get storage group node by path. the give path don't need to be storage group path. */
   @Override
   public IStorageGroupMNode getStorageGroupNodeByPath(PartialPath path) throws MetadataException {
+    ensureStorageGroup(path);
     IStorageGroupMNode node = null;
     try {
       String[] nodes = path.getNodes();
@@ -2508,7 +2507,7 @@ public class MRocksDBManager implements IMetaManager {
       node = getDeviceNode(devicePath);
       return node;
     } catch (PathNotExistException e) {
-      int sgIndex = ensureStorageGroup(devicePath, devicePath.getNodeLength() - 1);
+      int sgIndex = ensureStorageGroup(devicePath);
       if (!config.isAutoCreateSchemaEnabled()) {
         throw new PathNotExistException(devicePath.getFullPath());
       }