Caideyipi commented on code in PR #17948:
URL: https://github.com/apache/iotdb/pull/17948#discussion_r3489181690


##########
iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/pipe/agent/task/meta/PipeMetaKeeper.java:
##########
@@ -188,4 +241,98 @@ public long exceptionStoppedPipeCount() {
                     && 
pipeMeta.getRuntimeMeta().getIsStoppedByRuntimeException())
         .count();
   }
+
+  /////////////////////////////////  Tree & Table Isolation  
/////////////////////////////////
+
+  private Optional<PipeMeta> getPipeMetaOptional(String pipeName) {
+    return pipeMetaKeeperKeyOptional(pipeName).map(pipeNameToPipeMetaMap::get);
+  }
+
+  private Optional<PipeMeta> getPipeMetaOptional(String pipeName, boolean 
isTableModel) {
+    return pipeMetaKeeperKeyOptional(pipeName, 
isTableModel).map(pipeNameToPipeMetaMap::get);
+  }
+
+  private Optional<PipeMeta> getPipeMetaOptional(String pipeName, long 
creationTime) {
+    final PipeMeta pipeMeta = pipeNameToPipeMetaMap.get(pipeName);
+    if (Objects.nonNull(pipeMeta) && 
pipeMeta.getStaticMeta().getCreationTime() == creationTime) {
+      return Optional.of(pipeMeta);
+    }
+
+    return pipeNameToPipeMetaMap.values().stream()
+        .filter(
+            meta ->
+                meta.getStaticMeta().getPipeName().equals(pipeName)
+                    && meta.getStaticMeta().getCreationTime() == creationTime)
+        .findFirst();
+  }
+
+  private Optional<String> pipeMetaKeeperKeyOptional(String pipeName, boolean 
isTableModel) {
+    final String modelKey = generatePipeMetaKeeperKey(pipeName, isTableModel);
+    if (pipeNameToPipeMetaMap.containsKey(modelKey)) {
+      return Optional.of(modelKey);
+    }
+
+    final String bothModelKey = 
generatePipeMetaKeeperKeyForVisibility(pipeName, Visibility.BOTH);
+    return pipeNameToPipeMetaMap.containsKey(bothModelKey)
+        ? Optional.of(bothModelKey)
+        : Optional.empty();
+  }
+
+  private Optional<String> pipeMetaKeeperKeyOptional(String pipeName) {
+    final String treeModelKey = generatePipeMetaKeeperKey(pipeName, false);
+    if (pipeNameToPipeMetaMap.containsKey(treeModelKey)) {
+      return Optional.of(treeModelKey);
+    }
+
+    final String bothModelKey = 
generatePipeMetaKeeperKeyForVisibility(pipeName, Visibility.BOTH);
+    if (pipeNameToPipeMetaMap.containsKey(bothModelKey)) {
+      return Optional.of(bothModelKey);
+    }
+
+    final String tableModelKey = generatePipeMetaKeeperKey(pipeName, true);
+    if (pipeNameToPipeMetaMap.containsKey(tableModelKey)) {
+      return Optional.of(tableModelKey);
+    }
+
+    final String noneModelKey = 
generatePipeMetaKeeperKeyForVisibility(pipeName, Visibility.NONE);
+    return pipeNameToPipeMetaMap.containsKey(noneModelKey)
+        ? Optional.of(noneModelKey)
+        : Optional.empty();
+  }
+
+  private static String generatePipeMetaKeeperKey(final PipeStaticMeta 
pipeStaticMeta) {
+    final String pipeName = pipeStaticMeta.getPipeName();
+    final Visibility visibility =
+        
VisibilityUtils.calculateFromExtractorParameters(pipeStaticMeta.getSourceParameters());
+    if (Objects.equals(Visibility.TREE_ONLY, visibility)) {
+      return generatePipeMetaKeeperKey(pipeName, false);
+    }
+    if (Objects.equals(Visibility.TABLE_ONLY, visibility)) {
+      return generatePipeMetaKeeperKey(pipeName, true);
+    }
+    if (Objects.equals(Visibility.NONE, visibility)) {
+      return generatePipeMetaKeeperKeyForVisibility(pipeName, Visibility.NONE);
+    }
+    return generatePipeMetaKeeperKeyForVisibility(pipeName, Visibility.BOTH);
+  }
+
+  private static String generatePipeMetaKeeperKey(
+      final String pipeName, final boolean isTableModel) {
+    return (isTableModel ? "table:" : "tree:") + pipeName.length() + ":" + 
pipeName;
+  }
+
+  private static String generatePipeMetaKeeperKeyForVisibility(
+      final String pipeName, final Visibility visibility) {
+    return visibility.name().toLowerCase() + ":" + pipeName.length() + ":" + 
pipeName;
+  }

Review Comment:
   Removed the length from the key in e5dc1a6. The key is not parsed back, so 
the visibility/model prefix plus the raw pipe name is enough.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to