You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ji...@apache.org on 2022/03/17 07:47:04 UTC

[iotdb] 06/45: fix bug of full path query

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

jianyun pushed a commit to branch rocksdb/dev
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 482137224a29b477e7a8a8ccf83e93145375f9e3
Author: lisijia <li...@360.cn>
AuthorDate: Fri Mar 4 12:14:35 2022 +0800

    fix bug of full path query
---
 .../iotdb/db/metadata/rocksdb/MRocksDBManager.java | 23 +++++++++++++++++-----
 .../iotdb/db/metadata/rocksdb/RocksDBUtils.java    |  7 +++++--
 .../db/metadata/rocksdb/MRocksDBUnitTest.java      | 23 +++++++++++-----------
 3 files changed, 35 insertions(+), 18 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/rocksdb/MRocksDBManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/rocksdb/MRocksDBManager.java
index 0896d34..ec2bd73 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/rocksdb/MRocksDBManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/rocksdb/MRocksDBManager.java
@@ -973,11 +973,24 @@ public class MRocksDBManager implements IMetaManager {
 
     int indexOfPrefix = indexOfFirstWildcard(nodes, startIndex);
     if (indexOfPrefix >= nodes.length) {
-      StringBuilder stringBuilder = new StringBuilder();
-      for (int i = 0; i < nodes.length; i++) {
-        stringBuilder.append(RockDBConstants.PATH_SEPARATOR).append(nodes[i]);
-      }
-      consumer.accept(stringBuilder.substring(1));
+      Arrays.stream(nodeTypeArray)
+          .parallel()
+          .forEach(
+              x -> {
+                String levelPrefix =
+                    RocksDBUtils.convertPartialPathToInnerByNodes(nodes, nodes.length - 1, x);
+                try {
+                  if (readWriteHandler.keyExist(levelPrefix.getBytes())) {
+                    StringBuilder stringBuilder = new StringBuilder();
+                    for (String node : nodes) {
+                      stringBuilder.append(RockDBConstants.PATH_SEPARATOR).append(node);
+                    }
+                    consumer.accept(stringBuilder.substring(1));
+                  }
+                } catch (RocksDBException e) {
+                  logger.error(e.getMessage());
+                }
+              });
       return;
     }
 
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/rocksdb/RocksDBUtils.java b/server/src/main/java/org/apache/iotdb/db/metadata/rocksdb/RocksDBUtils.java
index c4f4e17..2bf01f5 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/rocksdb/RocksDBUtils.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/rocksdb/RocksDBUtils.java
@@ -365,8 +365,11 @@ public class RocksDBUtils {
   public static String convertPartialPathToInnerByNodes(String[] nodes, int level, char nodeType) {
     StringBuilder stringBuilder = new StringBuilder();
     stringBuilder.append(nodeType).append(ROOT);
-    for (String str : nodes) {
-      stringBuilder.append(SPLIT_FLAG).append(level).append(str);
+    for (int i = 0; i < nodes.length; i++) {
+      if (i == 0 && nodes[i].equals(ROOT_STRING)) {
+        continue;
+      }
+      stringBuilder.append(SPLIT_FLAG).append(level).append(nodes[i]);
     }
     return stringBuilder.toString();
   }
diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/rocksdb/MRocksDBUnitTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/rocksdb/MRocksDBUnitTest.java
index a0ce63f..1d37cf8 100644
--- a/server/src/test/java/org/apache/iotdb/db/metadata/rocksdb/MRocksDBUnitTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/metadata/rocksdb/MRocksDBUnitTest.java
@@ -7,15 +7,14 @@ import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
 
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
 
 import static org.apache.iotdb.db.metadata.rocksdb.RocksDBReadWriteHandler.ROCKSDB_PATH;
 
@@ -177,20 +176,22 @@ public class MRocksDBUnitTest {
     Assert.assertEquals(
         1,
         mRocksDBManager.getStorageGroupNum(new PartialPath("root.inner1.inner2.inner3.sg"), false));
-    Assert.assertEquals(2, mRocksDBManager.getStorageGroupNum(new PartialPath("root.inner"), true));
-    Assert.assertEquals(6, mRocksDBManager.getStorageGroupNum(new PartialPath("root"), true));
+    Assert.assertEquals(
+        2, mRocksDBManager.getStorageGroupNum(new PartialPath("root.inner.**"), false));
+    Assert.assertEquals(6, mRocksDBManager.getStorageGroupNum(new PartialPath("root.**"), false));
 
     // test all timeseries number
     Assert.assertEquals(
         1, mRocksDBManager.getAllTimeseriesCount(new PartialPath("root.tt.sg.dd.m1")));
-    Assert.assertEquals(2, mRocksDBManager.getAllTimeseriesCount(new PartialPath("root"), true));
+    Assert.assertEquals(
+        2, mRocksDBManager.getAllTimeseriesCount(new PartialPath("root.**"), false));
 
     // test device number
     Assert.assertEquals(0, mRocksDBManager.getDevicesNum(new PartialPath("root.inner1.inner2")));
     Assert.assertEquals(
-        0, mRocksDBManager.getDevicesNum(new PartialPath("root.inner1.inner2"), true));
-    Assert.assertEquals(2, mRocksDBManager.getDevicesNum(new PartialPath("root.tt.sg"), true));
-    Assert.assertEquals(1, mRocksDBManager.getDevicesNum(new PartialPath("root.tt.sg.dd"), true));
+        0, mRocksDBManager.getDevicesNum(new PartialPath("root.inner1.inner2.**"), false));
+    Assert.assertEquals(2, mRocksDBManager.getDevicesNum(new PartialPath("root.tt.sg.**"), false));
+    Assert.assertEquals(1, mRocksDBManager.getDevicesNum(new PartialPath("root.tt.sg.dd"), false));
 
     // todo wildcard