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 311ad3619b9f29afd7c79d7ba4939e1be18573a3 Author: lisijia <[email protected]> AuthorDate: Wed Mar 9 19:11:45 2022 +0800 fix incorrect storagegroup name in show timeseries --- .../iotdb/db/metadata/rocksdb/MRocksDBManager.java | 46 ++++++++++++++++++---- .../iotdb/db/metadata/rocksdb/RocksDBUtils.java | 8 ++++ 2 files changed, 47 insertions(+), 7 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 3161903..7ae7e50 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 @@ -86,6 +86,7 @@ import org.apache.iotdb.tsfile.write.schema.MeasurementSchema; import org.apache.iotdb.tsfile.write.schema.TimeseriesSchema; import com.google.common.collect.MapMaker; +import io.netty.util.internal.StringUtil; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.rocksdb.Holder; @@ -814,11 +815,8 @@ public class MRocksDBManager implements IMetaManager { } } else { boolean hasChild = !keyCheckResult.getResult(RocksDBMNodeType.STORAGE_GROUP); - StringBuilder stringBuilder = new StringBuilder(); - for (int j = 0; j <= i; j++) { - stringBuilder.append(RockDBConstants.PATH_SEPARATOR).append(nodes[j]); - } - throw new StorageGroupAlreadySetException(stringBuilder.substring(1), hasChild); + throw new StorageGroupAlreadySetException( + RocksDBUtils.concatNodesName(nodes, 0, i), hasChild); } } finally { lock.unlock(); @@ -1534,13 +1532,42 @@ public class MRocksDBManager implements IMetaManager { BiFunction<byte[], byte[], Boolean> function = (a, b) -> { String fullPath = RocksDBUtils.getPathByInnerName(new String(a)); - res.add(new ShowDevicesResult(fullPath, RocksDBUtils.isAligned(b))); + try { + res.add( + new ShowDevicesResult( + fullPath, + RocksDBUtils.isAligned(b), + getBelongedToSG(plan.getPath().getNodes()))); + } catch (MetadataException e) { + logger.error(e.getMessage()); + return false; + } return true; }; traverseOutcomeBasins( plan.getPath().getNodes(), MAX_PATH_DEPTH, function, new Character[] {NODE_TYPE_ENTITY}); return res; } + + private String getBelongedToSG(String[] nodes) throws MetadataException { + List<String> contextNodeName = new ArrayList<>(); + for (int idx = 1; idx < nodes.length; idx++) { + contextNodeName.add(nodes[idx]); + String innerName = + RocksDBUtils.convertPartialPathToInnerByNodes( + contextNodeName.toArray(new String[0]), contextNodeName.size(), NODE_TYPE_SG); + byte[] queryResult; + try { + queryResult = readWriteHandler.get(null, innerName.getBytes()); + } catch (RocksDBException e) { + throw new MetadataException(e); + } + if (queryResult != null) { + return RocksDBUtils.concatNodesName(nodes, 0, idx); + } + } + return StringUtil.EMPTY_STRING; + } // endregion // region Interfaces for timeseries, measurement and schema info Query @@ -1658,7 +1685,12 @@ public class MRocksDBManager implements IMetaManager { // todo need update these properties tsRow[0] = measurementPath.getMeasurementAlias(); // sg name - tsRow[1] = measurementPath.getFullPath(); + try { + tsRow[1] = getBelongedToSG(measurementPath.getNodes()); + } catch (MetadataException e) { + logger.error(e.getMessage()); + tsRow[1] = StringUtil.EMPTY_STRING; + } tsRow[2] = measurementPath.getMeasurementSchema().getType().toString(); tsRow[3] = measurementPath.getMeasurementSchema().getEncodingType().toString(); tsRow[4] = measurementPath.getMeasurementSchema().getCompressor().toString(); 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 ee0c29b..8ac3467 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 @@ -555,4 +555,12 @@ public class RocksDBUtils { } return allNodesArray; } + + public static String concatNodesName(String[] nodes, int startIdx, int endIdx) { + StringBuilder stringBuilder = new StringBuilder(); + for (int i = startIdx; i <= endIdx; i++) { + stringBuilder.append(PATH_SEPARATOR).append(nodes[i]); + } + return stringBuilder.substring(1); + } }
