You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by zy...@apache.org on 2023/05/09 00:57:07 UTC

[iotdb] branch master updated: [IOTDB-5740] Fix drop database does not delete its template (#9792)

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

zyk 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 db8849fce1 [IOTDB-5740] Fix drop database does not delete its template (#9792)
db8849fce1 is described below

commit db8849fce1966aa6e6ec44e4d8a2d16e072ba052
Author: Chen YZ <43...@users.noreply.github.com>
AuthorDate: Tue May 9 08:56:59 2023 +0800

    [IOTDB-5740] Fix drop database does not delete its template (#9792)
---
 .../org/apache/iotdb/commons/path/PartialPath.java |  4 +--
 .../metadata/template/ClusterTemplateManager.java  | 36 ++++++++++++++++++++++
 .../impl/DataNodeInternalRPCServiceImpl.java       |  1 +
 3 files changed, 39 insertions(+), 2 deletions(-)

diff --git a/node-commons/src/main/java/org/apache/iotdb/commons/path/PartialPath.java b/node-commons/src/main/java/org/apache/iotdb/commons/path/PartialPath.java
index d9318996de..a266b1f79e 100644
--- a/node-commons/src/main/java/org/apache/iotdb/commons/path/PartialPath.java
+++ b/node-commons/src/main/java/org/apache/iotdb/commons/path/PartialPath.java
@@ -663,8 +663,8 @@ public class PartialPath extends Path implements Comparable<Path>, Cloneable {
     return true;
   }
 
-  public boolean startWith(String otherNode) {
-    return nodes[0].equals(otherNode);
+  public boolean startsWith(String prefix) {
+    return getFullPath().startsWith(prefix);
   }
 
   public boolean containNode(String otherNode) {
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/template/ClusterTemplateManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/template/ClusterTemplateManager.java
index 94898c97ab..e7e6871d70 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/template/ClusterTemplateManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/template/ClusterTemplateManager.java
@@ -602,6 +602,42 @@ public class ClusterTemplateManager implements ITemplateManager {
     }
   }
 
+  public void invalid(String database) {
+    readWriteLock.writeLock().lock();
+    try {
+      for (PartialPath fullPath : pathSetTemplateMap.keySet()) {
+        if (fullPath.startsWith(database)) {
+          int templateId = pathSetTemplateMap.remove(fullPath);
+          templateSetOnPathsMap.get(templateId).remove(fullPath);
+          if (templateSetOnPathsMap.get(templateId).size() == 0
+              && (!templatePreSetOnPathsMap.containsKey(templateId)
+                  || templatePreSetOnPathsMap.get(templateId).size() == 0)) {
+            templateSetOnPathsMap.remove(templateId);
+            templatePreSetOnPathsMap.remove(templateId);
+            Template template = templateIdMap.remove(templateId);
+            templateNameMap.remove(template.getName());
+          }
+        }
+      }
+      for (PartialPath fullPath : pathPreSetTemplateMap.keySet()) {
+        if (fullPath.startsWith(database)) {
+          int templateId = pathPreSetTemplateMap.remove(fullPath);
+          templatePreSetOnPathsMap.get(templateId).remove(fullPath);
+          if ((!templateSetOnPathsMap.containsKey(templateId)
+                  || templateSetOnPathsMap.get(templateId).size() == 0)
+              && templatePreSetOnPathsMap.get(templateId).size() == 0) {
+            templateSetOnPathsMap.remove(templateId);
+            templatePreSetOnPathsMap.remove(templateId);
+            Template template = templateIdMap.remove(templateId);
+            templateNameMap.remove(template.getName());
+          }
+        }
+      }
+    } finally {
+      readWriteLock.writeLock().unlock();
+    }
+  }
+
   @TestOnly
   public void putTemplate(Template template) {
     templateIdMap.put(template.getId(), template);
diff --git a/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/DataNodeInternalRPCServiceImpl.java b/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/DataNodeInternalRPCServiceImpl.java
index a0675c0fb6..0b517624ee 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/DataNodeInternalRPCServiceImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/DataNodeInternalRPCServiceImpl.java
@@ -422,6 +422,7 @@ public class DataNodeInternalRPCServiceImpl implements IDataNodeRPCService.Iface
     DataNodeSchemaCache.getInstance().takeWriteLock();
     try {
       DataNodeSchemaCache.getInstance().invalidateAll();
+      ClusterTemplateManager.getInstance().invalid(req.getFullPath());
       return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
     } finally {
       DataNodeSchemaCache.getInstance().releaseWriteLock();