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 2022/04/07 09:12:44 UTC

[iotdb] branch rel/0.13 updated: [To rel/0.13][IOTDB-2826]Unmark storage group among templates when deleted (#5431)

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

qiaojialin pushed a commit to branch rel/0.13
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/rel/0.13 by this push:
     new 1c6b6922c6 [To rel/0.13][IOTDB-2826]Unmark storage group among templates when deleted (#5431)
1c6b6922c6 is described below

commit 1c6b6922c66f32e54c63cde06094dfa4ca13fc4a
Author: ZhaoXin <x_...@163.com>
AuthorDate: Thu Apr 7 17:12:39 2022 +0800

    [To rel/0.13][IOTDB-2826]Unmark storage group among templates when deleted (#5431)
---
 .../java/org/apache/iotdb/db/metadata/MManager.java    |  5 +++++
 .../apache/iotdb/db/metadata/template/Template.java    |  4 ++++
 .../org/apache/iotdb/db/metadata/TemplateTest.java     | 18 ++++++++++++++++++
 3 files changed, 27 insertions(+)

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 99aebb4176..b6c4a6bdb1 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
@@ -869,6 +869,11 @@ public class MManager {
           removeFromTagInvertedIndex(leafMNode);
         }
 
+        // unmark all storage group from related templates
+        for (Template template : templateManager.getTemplateMap().values()) {
+          template.unmarkStorageGroups(storageGroups);
+        }
+
         // drop triggers with no exceptions
         TriggerEngine.drop(leafMNodes);
 
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/template/Template.java b/server/src/main/java/org/apache/iotdb/db/metadata/template/Template.java
index 74f474c3dc..abcf3aa3ab 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/template/Template.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/template/Template.java
@@ -421,6 +421,10 @@ public class Template {
     return relatedStorageGroup.removeAll(getSGPaths(unsetNode));
   }
 
+  public boolean unmarkStorageGroups(Collection<PartialPath> sgPaths) {
+    return relatedStorageGroup.removeAll(sgPaths);
+  }
+
   // endregion
 
   // region inner utils
diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/TemplateTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/TemplateTest.java
index 289e17e82f..ab59cab0ee 100644
--- a/server/src/test/java/org/apache/iotdb/db/metadata/TemplateTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/metadata/TemplateTest.java
@@ -416,6 +416,24 @@ public class TemplateTest {
     manager.dropSchemaTemplate(new DropTemplatePlan("treeTemplate"));
   }
 
+  @Test
+  public void testDropTemplateWithStorageGroupDeleted() throws MetadataException {
+    MManager manager = IoTDB.metaManager;
+    manager.createSchemaTemplate(getTreeTemplatePlan());
+    manager.setSchemaTemplate(new SetTemplatePlan("treeTemplate", "root.sg1.d1"));
+    try {
+      manager.dropSchemaTemplate(new DropTemplatePlan("treeTemplate"));
+      fail();
+    } catch (MetadataException e) {
+      assertEquals(
+          "Template [treeTemplate] has been set on MTree, cannot be dropped now.", e.getMessage());
+    }
+
+    manager.deleteStorageGroups(Arrays.asList(new PartialPath("root.sg1")));
+    manager.dropSchemaTemplate(new DropTemplatePlan("treeTemplate"));
+    assertEquals(0, manager.getAllTemplates().size());
+  }
+
   @Test
   public void testTemplateAlignment() throws MetadataException {
     MManager manager = IoTDB.metaManager;