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();