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 <[email protected]> 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
