View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0009110 | 10000-014: PubSub | Spec | public | 2023-08-17 14:43 | 2023-12-13 10:57 |
Reporter | Thilo Bellinger | Assigned To | Matthias Damm | ||
Priority | normal | Severity | minor | Reproducibility | have not tried |
Status | assigned | Resolution | open | ||
Product Version | 1.05.02 | ||||
Summary | 0009110: treatment for null DataSetMessages | ||||
Description | For JSON encoding it is theoretically possible that an entire DataSetMessage is null.
Should a NetworkMessage omit all null DataSetMessages or should it send a null element? This may even cause the entire Messages array of the NetworkMessage to be empty (or filled with nulls). For a NetworkMessage without header (JsonNetworkMessageContentMask_NetworkMessageHeader) the single DataSetMessage is encoded flat. My proposal: | ||||
Tags | No tags attached. | ||||
Commit Version | |||||
Fix Due Date | |||||
|
First of all, you cannot omit messages, else the reader might observe a MessageReceiveTimeout. There is a difference between a null value and an empty object (I know UA treats it in some cases the same). A KeepAlive message is not null but, empty. In my opinion a KeepAlive DataSetMessage in a SingleDataSetNetworkMessage with all header off, should be simply encoded as '{}'. You cannot encode it as 'null' because 'null' is not a valid JSON document. |
|
I agree, a NetworkMessage cannot be null but has to be at least an empt JSON document when something shall be sent.
A null KeepAlive DataSetMessage message is still ambiguous if the related group has multiple writers (using delta frame messages) and I assume different subscriber implementations will handle this differently.
|
|
There are many configuration combinations that lead to ambiguous messages. And a large proportion of these are in fact not tragic and even wanted, as the recipient is a client with no knowledge of OPC UA (the whole cloud use case). Therefore, I think it would be better not to define which combinations are not useful for an OPC UA reader, but to create one or two profiles that are explicitly optimized for the two-way OPC UA communication case. If you then configure a writer/writer group that is intend to be used by a OPC UA reader, you would simply choose that profile, and you know that there are no problems for the subscriber to understand the content of the messages. While we're at it, this is what such a profile could look like: JsonNetworkMessageContentMask Bit 0: NetworkMessageHeader disabled JsonDataSetMessageContentMask Bit 0: DataSetWriterId disabled DataSetFieldContentMask configurable The DataSetWriter's QueueName is following the recommandation of 1.05.03 I intentionally disabled the DataSetWriterId because the DataSetWriter is sending its messages to a distinct queue. I think it is better to let the broker filter instead of the reader/reader group, because this will reduce the used bandwidth. Without using the topic feature it cannot work anyway, because there is no way to decide the right recipent reader from the network message alone, due to the missing WriterGroupId. While there is a WriterGroupName you cannot configure the WriterGroupName on the Reader, only the WriterGroupId is available. |
Date Modified | Username | Field | Change |
---|---|---|---|
2023-08-17 14:43 | Thilo Bellinger | New Issue | |
2023-11-30 14:35 | Peter Wehrfritz | Note Added: 0020464 | |
2023-11-30 16:25 | Thilo Bellinger | Note Added: 0020466 | |
2023-12-05 20:42 | Jim Luth | Assigned To | => Matthias Damm |
2023-12-05 20:42 | Jim Luth | Status | new => assigned |
2023-12-13 10:57 | Peter Wehrfritz | Note Added: 0020528 |