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 f24f469  fix delete timeseries bug (#2441)
f24f469 is described below

commit f24f469886caaead2606b2147524aaad1d3cad27
Author: Jackie Tien <[email protected]>
AuthorDate: Thu Jan 7 17:55:52 2021 +0800

    fix delete timeseries bug (#2441)
---
 .../java/org/apache/iotdb/db/metadata/MTree.java   |  4 ++--
 .../org/apache/iotdb/db/metadata/MTreeTest.java    | 23 ++++++++++++++++++++++
 2 files changed, 25 insertions(+), 2 deletions(-)

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 a0e62f2..054bff9 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
@@ -411,9 +411,9 @@ public class MTree implements Serializable {
       curNode.getParent().deleteAliasChild(((MeasurementMNode) 
curNode).getAlias());
     }
     curNode = curNode.getParent();
-    // delete all empty ancestors except storage group
+    // delete all empty ancestors except storage group and MeasurementMNode
     while (!IoTDBConstant.PATH_ROOT.equals(curNode.getName())
-        && curNode.getChildren().size() == 0) {
+        && !(curNode instanceof MeasurementMNode) && 
curNode.getChildren().size() == 0) {
       // if current storage group has no time series, return the storage group 
name
       if (curNode instanceof StorageGroupMNode) {
         return new Pair<>(curNode.getPartialPath(), deletedNode);
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 d5b1795..e2a9d5d 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
@@ -504,4 +504,27 @@ public class MTreeTest {
     assertEquals(root.searchAllRelatedStorageGroups(new 
PartialPath("root.vehicle.d1.s1")),
         Collections.singletonList(new PartialPath(sgPath1)));
   }
+
+  @Test
+  public void testDeleteChildOfMeasurementMNode() throws MetadataException {
+    MTree root = new MTree();
+    String sgPath = "root.sg1";
+    root.setStorageGroup(new PartialPath(sgPath));
+    try {
+      root.createTimeseries(new PartialPath("root.sg1.a.b"), TSDataType.INT32, 
TSEncoding.RLE,
+          TSFileDescriptor.getInstance().getConfig().getCompressor(), 
Collections.emptyMap(), null);
+      root.createTimeseries(new PartialPath("root.sg1.a.b.c"), 
TSDataType.INT32, TSEncoding.RLE,
+          TSFileDescriptor.getInstance().getConfig().getCompressor(), 
Collections.emptyMap(), null);
+      assertTrue(root.isPathExist(new PartialPath("root.sg1.a.b")));
+      assertTrue(root.isPathExist(new PartialPath("root.sg1.a.b.c")));
+
+      root.deleteTimeseriesAndReturnEmptyStorageGroup(new 
PartialPath("root.sg1.a.b.c"));
+
+      assertFalse(root.isPathExist(new PartialPath("root.sg1.a.b.c")));
+      assertTrue(root.isPathExist(new PartialPath("root.sg1.a.b")));
+
+    } catch (MetadataException e1) {
+      fail(e1.getMessage());
+    }
+  }
 }

Reply via email to