View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0007119 | 10000-006: Mappings | Api Change | public | 2021-07-19 15:35 | 2021-08-31 16:41 |
Reporter | David Levine | Assigned To | Randy Armstrong | ||
Priority | urgent | Severity | major | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Summary | 0007119: When a server contains DataType definitions using both a DataTypeDictionary (v1.03) and a DataTypeDefinition attribute (v1.04), | ||||
Description | For compatibility with old and new clients, servers will provide definitions using both v1.03 and v1.04 definitions. Even though the mechanics of accessing the definitions are different, the encodings provide the same field information except when a field is a matrix. v1.03 only provided the metadata for a 1 dimension array (length) and v1.04 provides the definition for a matrix (contains the ArrayDimensions). The value is encoded differently for each. There is no API a client stack can use to choose the version it wants the server to use and a default choice is not defined, thus there are no rules a decoder can rely on to determine how it should decode a value other than to use the encoding NodeId that is sent with the value and use the appropriate definition. Even if the stack supports both types of encodings, this requires that the stack store both definitions in its memory. The server could switch between definitions with each value and still be in compliance with the spec. If the stack the client is using makes any assumptions at all about which definition it should use, it may "guess wrong" and either generate decoding errors or (worse) incorrectly decode the value and assume it worked. If the client only supports one type of definition it may be different than what the server is encoding the value as, creating a compatibility issue. Desired outcome: when both versions are supported by the server, the client can choose the version of the encoding the server shall use. 1) A server can report which style encodings it supports: v1.03, v1.04, v1.xx (future) or a combination. This can be done a number of ways, one being to create a node below the Server Capabilities folder which contains the version information. Use case (actual): The values are transmitted using v1.03 encodings (the array dimensions are not sent). The stack tries to decode it using v1.04 definition because that was what it expected. This fails because the length of the transmitted data did not match the expected length (this is good because erroneous data is not forwarded to the application, but bad because it did not work.). End result: client and server are incompatible. Even if the client stack switched to using the v1.03 definition it would still be "wrong" because the client application expects a matrix (i.e. its notation for an element uses matrix notation) but the server sent an array (1D). This is a mismatch between the design-time information and the runtime value. It is possible to convert between the two forms, but this is an additional step that must be taken and which can be done incorrectly. To do the conversion from a flat buffer (i.e. a 1D array) to a matrix the array dimensions must be known. | ||||
Tags | No tags attached. | ||||
Commit Version | |||||
Fix Due Date | |||||
related to | 0007148 | closed | Randy Armstrong | Encoding of multidimensional arrays is not clear |
|
Randy to work on example of a 1.04 Definition that uses the new first-class Matrix concept and how that would look if described by the 1.03 DataTypeDictionary. |
|
Randy is working on a POC to show how to encode a matrix field in v1.03 type definition dictionary. At a high level, applications must be able to interpret the metadata from the type definition as matrix field. Desired outcome: IMO acceptance criteria for a successful POC that demonstrates how to define a matrix field in a v1.03 type dictionary:
This is a high priority for us: Use cases:
|
|
It appears that there is no definition in the specification that explains how to encode an inline Matrix. There is a Matrix that can only be used within a Variant and it could be adapted for inline use but the specification does not say you should do that. This issue cannot be closed until we agree on a binary/XML/JSON representation for an inline matrix. |
|
We discussed Randy’s findings and agreed that Randy will Modify Part 6 to state that the 1.04 inline matrix encoding is incompatible with previous versions and if used the structure shall not be described in the Data Dictionary. If compatibility with previous versions is desired, a Variant should be used instead of the 1.04 inline matrix since a Variant can already contain a matrix and is compatible with all previous versions. |
|
Added inline matrix with explanation of backward compatibility issues. |
|
Agreed to changes in edited 1.05.01 Draft 4. |
Date Modified | Username | Field | Change |
---|---|---|---|
2021-07-19 15:35 | David Levine | New Issue | |
2021-07-20 17:09 | Jim Luth | Assigned To | => Randy Armstrong |
2021-07-20 17:09 | Jim Luth | Status | new => assigned |
2021-07-20 17:11 | Jim Luth | Note Added: 0014696 | |
2021-07-20 17:11 | Jim Luth | Project | Feature Requests => 10000-006: Mappings |
2021-07-20 17:11 | Jim Luth | Category | IOP Problem => Api Change |
2021-08-02 16:20 | David Levine | Note Added: 0014713 | |
2021-08-14 11:17 | Randy Armstrong | Note Added: 0014746 | |
2021-08-17 19:21 | Jim Luth | Note Added: 0014754 | |
2021-08-18 05:08 | Randy Armstrong | Status | assigned => resolved |
2021-08-18 05:08 | Randy Armstrong | Resolution | open => fixed |
2021-08-18 05:08 | Randy Armstrong | Note Added: 0014756 | |
2021-08-18 09:10 | Randy Armstrong | Relationship added | related to 0007148 |
2021-08-31 16:41 | Jim Luth | Status | resolved => closed |
2021-08-31 16:41 | Jim Luth | Note Added: 0014792 |