You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ju...@apache.org on 2026/03/18 02:56:06 UTC
(iotdb) 02/02: fix
This is an automated email from the ASF dual-hosted git repository.
justinchen pushed a commit to branch opc-13
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 97728bbc96138aff8fc610c21368e1a5c76c9ddd
Author: Caideyipi <87...@users.noreply.github.com>
AuthorDate: Wed Mar 18 10:55:54 2026 +0800
fix
---
.../pipe/sink/protocol/opcua/OpcUaNameSpace.java | 50 +++++++++++++---------
1 file changed, 30 insertions(+), 20 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 f9fbb2d2ad4..a8edc941bb4 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
@@ -156,6 +156,26 @@ public class OpcUaNameSpace extends ManagedNamespaceWithLifecycle {
final TSDataType type = measurementSchema.getType();
final NodeId nodeId = newNodeId(currentFolder + name);
final UaVariableNode measurementNode;
+
+ int lastNonnullIndex = -1;
+ for (int j = tablet.rowSize - 1; j >= 0; --j) {
+ if (!tablet.bitMaps[i].isMarked(j)) {
+ lastNonnullIndex = j;
+ break;
+ }
+ }
+
+ if (lastNonnullIndex == -1) {
+ continue;
+ }
+
+ final long utcTimestamp = timestampToUtc(tablet.timestamps[lastNonnullIndex]);
+ final DataValue value =
+ new DataValue(
+ new Variant(getTabletObjectValue4Opc(tablet.values[i], lastNonnullIndex, type)),
+ StatusCode.GOOD,
+ new DateTime(utcTimestamp),
+ new DateTime());
if (!getNodeManager().containsNode(nodeId)) {
measurementNode =
new UaVariableNode.UaVariableNodeBuilder(getNodeContext())
@@ -166,6 +186,7 @@ public class OpcUaNameSpace extends ManagedNamespaceWithLifecycle {
.setDisplayName(LocalizedText.english(name))
.setDataType(convertToOpcDataType(type))
.setTypeDefinition(Identifiers.BaseDataVariableType)
+ .setValue(value)
.build();
getNodeManager().addNode(measurementNode);
folderNode.addOrganizes(measurementNode);
@@ -181,26 +202,15 @@ public class OpcUaNameSpace extends ManagedNamespaceWithLifecycle {
String.format("The Node %s does not exist.", nodeId)));
}
- int lastNonnullIndex = -1;
- for (int j = tablet.rowSize - 1; j >= 0; --j) {
- if (!tablet.bitMaps[i].isMarked(j)) {
- lastNonnullIndex = j;
- break;
- }
- }
-
- if (lastNonnullIndex != -1) {
- final long utcTimestamp = timestampToUtc(tablet.timestamps[lastNonnullIndex]);
- if (Objects.isNull(measurementNode.getValue())
- || Objects.requireNonNull(measurementNode.getValue().getSourceTime()).getUtcTime()
- < utcTimestamp) {
- measurementNode.setValue(
- new DataValue(
- new Variant(getTabletObjectValue4Opc(tablet.values[i], lastNonnullIndex, type)),
- StatusCode.GOOD,
- new DateTime(utcTimestamp),
- new DateTime()));
- }
+ if (Objects.isNull(measurementNode.getValue())
+ || Objects.isNull(measurementNode.getValue().getSourceTime())
+ || measurementNode.getValue().getSourceTime().getUtcTime() < utcTimestamp) {
+ measurementNode.setValue(
+ new DataValue(
+ new Variant(getTabletObjectValue4Opc(tablet.values[i], lastNonnullIndex, type)),
+ StatusCode.GOOD,
+ new DateTime(utcTimestamp),
+ new DateTime()));
}
}
}