Skip to content

Commit 0f12dc5

Browse files
authored
[To dev/1.3] Pipe: Added robustness to OPC UA measurement logic (#17325)
* fix * sptls
1 parent 944002a commit 0f12dc5

File tree

1 file changed

+25
-12
lines changed
  • iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/sink/protocol/opcua

1 file changed

+25
-12
lines changed

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/sink/protocol/opcua/OpcUaNameSpace.java

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import org.eclipse.milo.opcua.sdk.server.api.MonitoredItem;
4242
import org.eclipse.milo.opcua.sdk.server.model.nodes.objects.BaseEventTypeNode;
4343
import org.eclipse.milo.opcua.sdk.server.nodes.UaFolderNode;
44+
import org.eclipse.milo.opcua.sdk.server.nodes.UaNode;
4445
import org.eclipse.milo.opcua.sdk.server.nodes.UaVariableNode;
4546
import org.eclipse.milo.opcua.sdk.server.util.SubscriptionModel;
4647
import org.eclipse.milo.opcua.stack.core.Identifiers;
@@ -108,10 +109,10 @@ private void transferTabletForClientServerModel(final Tablet tablet) {
108109
throw new PipeRuntimeCriticalException("The segments of tablets must exist");
109110
}
110111
final StringBuilder currentStr = new StringBuilder();
111-
UaFolderNode folderNode = null;
112+
UaNode folderNode = null;
112113
NodeId folderNodeId;
113114
for (final String segment : segments) {
114-
final UaFolderNode nextFolderNode;
115+
final UaNode nextFolderNode;
115116

116117
currentStr.append(segment);
117118
folderNodeId = newNodeId(currentStr.toString());
@@ -126,7 +127,12 @@ private void transferTabletForClientServerModel(final Tablet tablet) {
126127
LocalizedText.english(segment));
127128
getNodeManager().addNode(nextFolderNode);
128129
if (Objects.nonNull(folderNode)) {
129-
folderNode.addOrganizes(nextFolderNode);
130+
folderNode.addReference(
131+
new Reference(
132+
folderNode.getNodeId(),
133+
Identifiers.Organizes,
134+
nextFolderNode.getNodeId().expanded(),
135+
true));
130136
} else {
131137
nextFolderNode.addReference(
132138
new Reference(
@@ -138,14 +144,13 @@ private void transferTabletForClientServerModel(final Tablet tablet) {
138144
folderNode = nextFolderNode;
139145
} else {
140146
folderNode =
141-
(UaFolderNode)
142-
getNodeManager()
143-
.getNode(folderNodeId)
144-
.orElseThrow(
145-
() ->
146-
new PipeRuntimeCriticalException(
147-
String.format(
148-
"The folder node for %s does not exist.", tablet.deviceId)));
147+
getNodeManager()
148+
.getNode(folderNodeId)
149+
.orElseThrow(
150+
() ->
151+
new PipeRuntimeCriticalException(
152+
String.format(
153+
"The folder node for %s does not exist.", tablet.deviceId)));
149154
}
150155
}
151156

@@ -189,7 +194,15 @@ private void transferTabletForClientServerModel(final Tablet tablet) {
189194
.setValue(value)
190195
.build();
191196
getNodeManager().addNode(measurementNode);
192-
folderNode.addOrganizes(measurementNode);
197+
if (Objects.nonNull(folderNode)) {
198+
folderNode.addReference(
199+
new Reference(
200+
folderNode.getNodeId(), Identifiers.Organizes, nodeId.expanded(), true));
201+
} else {
202+
measurementNode.addReference(
203+
new Reference(
204+
nodeId, Identifiers.Organizes, Identifiers.ObjectsFolder.expanded(), false));
205+
}
193206
} else {
194207
// This must exist
195208
measurementNode =

0 commit comments

Comments
 (0)