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 =