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

haonan 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 0698da6  [IOTDB-963] Redo deleteStorageGroupPlan failed when 
recovering (#1880)
0698da6 is described below

commit 0698da6b8b1116e9a74c34fcafeafd508cc32ec3
Author: Potato <[email protected]>
AuthorDate: Wed Oct 28 13:28:00 2020 +0800

    [IOTDB-963] Redo deleteStorageGroupPlan failed when recovering (#1880)
---
 .../org/apache/iotdb/db/metadata/MManager.java     |  6 +-
 .../iotdb/db/metadata/MManagerBasicTest.java       | 68 ++++++++++++++++++++--
 2 files changed, 65 insertions(+), 9 deletions(-)

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 6886259..98fa38b 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
@@ -328,11 +328,7 @@ public class MManager {
         setStorageGroup(new PartialPath(args[1]));
         break;
       case MetadataOperationType.DELETE_STORAGE_GROUP:
-        List<PartialPath> storageGroups = new ArrayList<>();
-        for (int i = 1; i <= args.length; i++) {
-          storageGroups.add(new PartialPath(args[i]));
-        }
-        deleteStorageGroups(storageGroups);
+        deleteStorageGroups(Collections.singletonList(new 
PartialPath(args[1])));
         break;
       case MetadataOperationType.SET_TTL:
         setTTL(new PartialPath(args[1]), Long.parseLong(args[2]));
diff --git 
a/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java 
b/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java
index 60a1cbd..bddeea2 100644
--- a/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java
@@ -18,6 +18,16 @@
  */
 package org.apache.iotdb.db.metadata;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
 import java.util.stream.Collectors;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.exception.metadata.IllegalPathException;
@@ -33,10 +43,6 @@ import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 
-import java.util.*;
-
-import static org.junit.Assert.*;
-
 public class MManagerBasicTest {
 
   private CompressionType compressionType;
@@ -222,6 +228,60 @@ public class MManagerBasicTest {
   }
 
   @Test
+  public void testRecover() {
+
+    MManager manager = IoTDB.metaManager;
+
+    try {
+
+      manager.setStorageGroup(new PartialPath("root.laptop.d1"));
+      manager.setStorageGroup(new PartialPath("root.laptop.d2"));
+      manager.createTimeseries(new PartialPath("root.laptop.d1.s1"), 
TSDataType.INT32, TSEncoding.PLAIN,
+          CompressionType.GZIP, null);
+      manager.createTimeseries(new PartialPath("root.laptop.d2.s1"), 
TSDataType.INT32, TSEncoding.PLAIN,
+          CompressionType.GZIP, null);
+      assertTrue(manager.isStorageGroup(new PartialPath("root.laptop.d1")));
+      assertTrue(manager.isStorageGroup(new PartialPath("root.laptop.d2")));
+      assertFalse(manager.isStorageGroup(new PartialPath("root.laptop.d3")));
+      assertFalse(manager.isStorageGroup(new PartialPath("root.laptop")));
+      Set<String> devices = new TreeSet<String>(){{
+        add("root.laptop.d1");
+        add("root.laptop.d2");
+      }};
+      // prefix with *
+      assertEquals(devices, manager.getDevices(new 
PartialPath("root.*")).stream().map(PartialPath::getFullPath).collect(
+          Collectors.toSet()));
+
+
+      manager.deleteStorageGroups(Collections.singletonList(new 
PartialPath("root.laptop.d2")));
+      assertTrue(manager.isStorageGroup(new PartialPath("root.laptop.d1")));
+      assertFalse(manager.isStorageGroup(new PartialPath("root.laptop.d2")));
+      assertFalse(manager.isStorageGroup(new PartialPath("root.laptop.d3")));
+      assertFalse(manager.isStorageGroup(new PartialPath("root.laptop")));
+      devices.remove("root.laptop.d2");
+      // prefix with *
+      assertEquals(devices, manager.getDevices(new 
PartialPath("root.*")).stream().map(PartialPath::getFullPath).collect(
+          Collectors.toSet()));
+
+      MManager recoverManager = new MManager();
+      recoverManager.init();
+
+      assertTrue(recoverManager.isStorageGroup(new 
PartialPath("root.laptop.d1")));
+      assertFalse(recoverManager.isStorageGroup(new 
PartialPath("root.laptop.d2")));
+      assertFalse(recoverManager.isStorageGroup(new 
PartialPath("root.laptop.d3")));
+      assertFalse(recoverManager.isStorageGroup(new 
PartialPath("root.laptop")));
+      // prefix with *
+      assertEquals(devices, recoverManager.getDevices(new 
PartialPath("root.*")).stream().map(PartialPath::getFullPath).collect(
+          Collectors.toSet()));
+
+      recoverManager.clear();
+    } catch (MetadataException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
   public void testGetAllFileNamesByPath() {
 
     MManager manager = IoTDB.metaManager;

Reply via email to