From 1aefd4ccddfe0333aee16cdd9d79d906794d5aa7 Mon Sep 17 00:00:00 2001 From: Caideyipi <87789683+Caideyipi@users.noreply.github.com> Date: Fri, 20 Mar 2026 10:38:52 +0800 Subject: [PATCH 1/2] fix --- .../sink/protocol/opcua/OpcUaNameSpace.java | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 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 a8edc941bb4e..0348c930bf8a 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.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 @@ private void transferTabletForClientServerModel(final Tablet tablet) { 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 @@ private void transferTabletForClientServerModel(final Tablet tablet) { 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,7 +144,6 @@ private void transferTabletForClientServerModel(final Tablet tablet) { folderNode = nextFolderNode; } else { folderNode = - (UaFolderNode) getNodeManager() .getNode(folderNodeId) .orElseThrow( @@ -189,7 +194,15 @@ private void transferTabletForClientServerModel(final Tablet tablet) { .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 = From 527fb31a6783f66ea111789b9a2fbb2f11aaf61c Mon Sep 17 00:00:00 2001 From: Caideyipi <87789683+Caideyipi@users.noreply.github.com> Date: Fri, 20 Mar 2026 10:49:59 +0800 Subject: [PATCH 2/2] sptls --- .../pipe/sink/protocol/opcua/OpcUaNameSpace.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 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 0348c930bf8a..465a2f674558 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 @@ -144,13 +144,13 @@ private void transferTabletForClientServerModel(final Tablet tablet) { folderNode = nextFolderNode; } else { folderNode = - 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))); } }