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 2021/03/01 11:23:57 UTC

[iotdb] branch master updated: [IOTDB-1159] set storage group exception message more clear (#2726)

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/iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 8c27729  [IOTDB-1159] set storage group exception message more clear (#2726)
8c27729 is described below

commit 8c2772932bde87cb915f9cf8ccdbe57b4ddf8e6a
Author: lvshuang <un...@gmail.com>
AuthorDate: Mon Mar 1 19:23:38 2021 +0800

    [IOTDB-1159] set storage group exception message more clear (#2726)
---
 .../metadata/StorageGroupAlreadySetException.java  | 16 +++++++++---
 .../java/org/apache/iotdb/db/metadata/MTree.java   |  6 ++++-
 .../iotdb/db/metadata/MManagerBasicTest.java       |  3 ++-
 .../org/apache/iotdb/db/metadata/MTreeTest.java    | 29 +++++++++++++++++++++-
 4 files changed, 48 insertions(+), 6 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/exception/metadata/StorageGroupAlreadySetException.java b/server/src/main/java/org/apache/iotdb/db/exception/metadata/StorageGroupAlreadySetException.java
index 2d52d21..4222489 100644
--- a/server/src/main/java/org/apache/iotdb/db/exception/metadata/StorageGroupAlreadySetException.java
+++ b/server/src/main/java/org/apache/iotdb/db/exception/metadata/StorageGroupAlreadySetException.java
@@ -26,8 +26,18 @@ public class StorageGroupAlreadySetException extends MetadataException {
   private static final long serialVersionUID = 9110669164701929779L;
 
   public StorageGroupAlreadySetException(String path) {
-    super(
-        String.format("%s has already been set to storage group", path),
-        TSStatusCode.PATH_ALREADY_EXIST_ERROR.getStatusCode());
+    super(getMessage(path, false), TSStatusCode.PATH_ALREADY_EXIST_ERROR.getStatusCode());
+  }
+
+  public StorageGroupAlreadySetException(String path, boolean hasChild) {
+    super(getMessage(path, hasChild), TSStatusCode.PATH_ALREADY_EXIST_ERROR.getStatusCode());
+  }
+
+  private static String getMessage(String path, boolean hasChild) {
+    if (hasChild) {
+      return String.format("some children of %s have already been set to storage group", path);
+    } else {
+      return String.format("%s has already been set to storage group", path);
+    }
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java b/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java
index 1693866..39a5088 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java
@@ -374,7 +374,11 @@ public class MTree implements Serializable {
     }
     if (cur.hasChild(nodeNames[i])) {
       // node b has child sg
-      throw new StorageGroupAlreadySetException(path.getFullPath());
+      if (cur.getChild(nodeNames[i]) instanceof StorageGroupMNode) {
+        throw new StorageGroupAlreadySetException(path.getFullPath());
+      } else {
+        throw new StorageGroupAlreadySetException(path.getFullPath(), true);
+      }
     } else {
       StorageGroupMNode storageGroupMNode =
           new StorageGroupMNode(
diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java
index 670ef94..624f441 100644
--- a/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java
@@ -83,7 +83,8 @@ public class MManagerBasicTest {
     try {
       manager.setStorageGroup(new PartialPath("root.laptop"));
     } catch (MetadataException e) {
-      Assert.assertEquals("root.laptop has already been set to storage group", e.getMessage());
+      Assert.assertEquals(
+          "some children of root.laptop have already been set to storage group", e.getMessage());
     }
 
     try {
diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/MTreeTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/MTreeTest.java
index ff7895f..66cba27 100644
--- a/server/src/test/java/org/apache/iotdb/db/metadata/MTreeTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/metadata/MTreeTest.java
@@ -59,6 +59,32 @@ public class MTreeTest {
   }
 
   @Test
+  public void testSetStorageGroupExceptionMessage() throws IllegalPathException {
+    MTree root = new MTree();
+    try {
+      root.setStorageGroup(new PartialPath("root.edge1.access"));
+      root.setStorageGroup(new PartialPath("root.edge1"));
+      fail("Expected exception");
+    } catch (MetadataException e) {
+      assertEquals(
+          "some children of root.edge1 have already been set to storage group", e.getMessage());
+    }
+    try {
+      root.setStorageGroup(new PartialPath("root.edge2"));
+      root.setStorageGroup(new PartialPath("root.edge2.access"));
+      fail("Expected exception");
+    } catch (MetadataException e) {
+      assertEquals("root.edge2 has already been set to storage group", e.getMessage());
+    }
+    try {
+      root.setStorageGroup(new PartialPath("root.edge1.access"));
+      fail("Expected exception");
+    } catch (MetadataException e) {
+      assertEquals("root.edge1.access has already been set to storage group", e.getMessage());
+    }
+  }
+
+  @Test
   public void testAddLeftNodePathWithAlias() throws MetadataException {
     MTree root = new MTree();
     root.setStorageGroup(new PartialPath("root.laptop"));
@@ -446,7 +472,8 @@ public class MTreeTest {
     try {
       root.setStorageGroup(new PartialPath("root.laptop"));
     } catch (MetadataException e) {
-      Assert.assertEquals("root.laptop has already been set to storage group", e.getMessage());
+      Assert.assertEquals(
+          "some children of root.laptop have already been set to storage group", e.getMessage());
     }
     // check timeseries
     assertFalse(root.isPathExist(new PartialPath("root.laptop.d1.s0")));