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);
+  }
 }

Reply via email to