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

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


The following commit(s) were added to refs/heads/dev/1.3 by this push:
     new 0f12dc5ab59 [To dev/1.3] Pipe: Added robustness to OPC UA measurement 
logic (#17325)
0f12dc5ab59 is described below

commit 0f12dc5ab59d053ec93df9d9beffcc4245e353d9
Author: Caideyipi <[email protected]>
AuthorDate: Fri Mar 20 12:49:45 2026 +0800

    [To dev/1.3] Pipe: Added robustness to OPC UA measurement logic (#17325)
    
    * fix
    
    * sptls
---
 .../pipe/sink/protocol/opcua/OpcUaNameSpace.java   | 37 +++++++++++++++-------
 1 file changed, 25 insertions(+), 12 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/sink/protocol/opcua/OpcUaNameSpace.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/sink/protocol/opcua/OpcUaNameSpace.java
index a8edc941bb4..465a2f67455 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/sink/protocol/opcua/OpcUaNameSpace.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/sink/protocol/opcua/OpcUaNameSpace.java
@@ -41,6 +41,7 @@ import 
org.eclipse.milo.opcua.sdk.server.api.ManagedNamespaceWithLifecycle;
 import org.eclipse.milo.opcua.sdk.server.api.MonitoredItem;
 import org.eclipse.milo.opcua.sdk.server.model.nodes.objects.BaseEventTypeNode;
 import org.eclipse.milo.opcua.sdk.server.nodes.UaFolderNode;
+import org.eclipse.milo.opcua.sdk.server.nodes.UaNode;
 import org.eclipse.milo.opcua.sdk.server.nodes.UaVariableNode;
 import org.eclipse.milo.opcua.sdk.server.util.SubscriptionModel;
 import org.eclipse.milo.opcua.stack.core.Identifiers;
@@ -108,10 +109,10 @@ public class OpcUaNameSpace extends 
ManagedNamespaceWithLifecycle {
       throw new PipeRuntimeCriticalException("The segments of tablets must 
exist");
     }
     final StringBuilder currentStr = new StringBuilder();
-    UaFolderNode folderNode = null;
+    UaNode folderNode = null;
     NodeId folderNodeId;
     for (final String segment : segments) {
-      final UaFolderNode nextFolderNode;
+      final UaNode nextFolderNode;
 
       currentStr.append(segment);
       folderNodeId = newNodeId(currentStr.toString());
@@ -126,7 +127,12 @@ public class OpcUaNameSpace extends 
ManagedNamespaceWithLifecycle {
                 LocalizedText.english(segment));
         getNodeManager().addNode(nextFolderNode);
         if (Objects.nonNull(folderNode)) {
-          folderNode.addOrganizes(nextFolderNode);
+          folderNode.addReference(
+              new Reference(
+                  folderNode.getNodeId(),
+                  Identifiers.Organizes,
+                  nextFolderNode.getNodeId().expanded(),
+                  true));
         } else {
           nextFolderNode.addReference(
               new Reference(
@@ -138,14 +144,13 @@ public class OpcUaNameSpace extends 
ManagedNamespaceWithLifecycle {
         folderNode = nextFolderNode;
       } else {
         folderNode =
-            (UaFolderNode)
-                getNodeManager()
-                    .getNode(folderNodeId)
-                    .orElseThrow(
-                        () ->
-                            new PipeRuntimeCriticalException(
-                                String.format(
-                                    "The folder node for %s does not exist.", 
tablet.deviceId)));
+            getNodeManager()
+                .getNode(folderNodeId)
+                .orElseThrow(
+                    () ->
+                        new PipeRuntimeCriticalException(
+                            String.format(
+                                "The folder node for %s does not exist.", 
tablet.deviceId)));
       }
     }
 
@@ -189,7 +194,15 @@ public class OpcUaNameSpace extends 
ManagedNamespaceWithLifecycle {
                 .setValue(value)
                 .build();
         getNodeManager().addNode(measurementNode);
-        folderNode.addOrganizes(measurementNode);
+        if (Objects.nonNull(folderNode)) {
+          folderNode.addReference(
+              new Reference(
+                  folderNode.getNodeId(), Identifiers.Organizes, 
nodeId.expanded(), true));
+        } else {
+          measurementNode.addReference(
+              new Reference(
+                  nodeId, Identifiers.Organizes, 
Identifiers.ObjectsFolder.expanded(), false));
+        }
       } else {
         // This must exist
         measurementNode =

Reply via email to