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;