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/06 07:20:07 UTC

[iotdb] branch master updated: When a storage group is deleted, every related template will unmark it now. (#5380)

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 8f553e98c3 When a storage group is deleted, every related template will unmark it now. (#5380)
8f553e98c3 is described below

commit 8f553e98c3e33269eb415ee30779236cc0dec3f0
Author: ZhaoXin <x_...@163.com>
AuthorDate: Wed Apr 6 15:20:02 2022 +0800

    When a storage group is deleted, every related template will unmark it now. (#5380)
---
 .../apache/iotdb/db/metadata/LocalConfigManager.java   |  4 ++++
 .../apache/iotdb/db/metadata/template/Template.java    |  4 ++++
 .../iotdb/db/metadata/template/TemplateManager.java    |  7 +++++++
 .../org/apache/iotdb/db/metadata/TemplateTest.java     | 18 ++++++++++++++++++
 4 files changed, 33 insertions(+)

diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/LocalConfigManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/LocalConfigManager.java
index 0318593ee6..7c53f8eef5 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/LocalConfigManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/LocalConfigManager.java
@@ -245,6 +245,10 @@ public class LocalConfigManager {
     deleteSchemaRegionsInStorageGroup(
         storageGroup, partitionTable.deleteStorageGroup(storageGroup));
 
+    for (Template template : templateManager.getTemplateMap().values()) {
+      templateManager.unmarkStorageGroup(template, storageGroup.getFullPath());
+    }
+
     if (!config.isEnableMemControl()) {
       MemTableManager.getInstance().addOrDeleteStorageGroup(-1);
     }
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 e1d4f168d7..a1b2fda58e 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
@@ -438,6 +438,10 @@ public class Template {
     }
   }
 
+  public void unmarkStorageGroup(String storageGroup) {
+    relatedSchemaRegion.remove(storageGroup);
+  }
+
   // endregion
 
   // region inner utils
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/template/TemplateManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/template/TemplateManager.java
index 7cd826cae1..e5362a6159 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/template/TemplateManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/template/TemplateManager.java
@@ -330,6 +330,13 @@ public class TemplateManager {
     template.unmarkSchemaRegion(storageGroup, schemaRegionId);
   }
 
+  public void unmarkStorageGroup(Template template, String storageGroup) {
+    synchronized (templateUsageInStorageGroup) {
+      templateUsageInStorageGroup.remove(storageGroup);
+    }
+    template.unmarkStorageGroup(storageGroup);
+  }
+
   public void forceLog() {
     try {
       logWriter.force();
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 e118eafa6b..00bad773b0 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
@@ -421,6 +421,24 @@ public class TemplateTest {
     schemaProcessor.dropSchemaTemplate(new DropTemplatePlan("treeTemplate"));
   }
 
+  @Test
+  public void testDropTemplateWithStorageGroupDeleted() throws MetadataException {
+    LocalSchemaProcessor schemaProcessor = IoTDB.schemaProcessor;
+    schemaProcessor.createSchemaTemplate(getTreeTemplatePlan());
+    schemaProcessor.setSchemaTemplate(new SetTemplatePlan("treeTemplate", "root.sg1.d1"));
+    try {
+      schemaProcessor.dropSchemaTemplate(new DropTemplatePlan("treeTemplate"));
+      fail();
+    } catch (MetadataException e) {
+      assertEquals(
+          "Template [treeTemplate] has been set on MTree, cannot be dropped now.", e.getMessage());
+    }
+
+    schemaProcessor.deleteStorageGroups(Arrays.asList(new PartialPath("root.sg1")));
+    schemaProcessor.dropSchemaTemplate(new DropTemplatePlan("treeTemplate"));
+    assertEquals(0, schemaProcessor.getAllTemplates().size());
+  }
+
   @Test
   public void testTemplateAlignment() throws MetadataException {
     LocalSchemaProcessor schemaProcessor = IoTDB.schemaProcessor;