question

Upvote
Accepted
93 3 1 7

Fragmenting Fields across messages

If I have a message with a fieldlist payload how should I encode a map or vector field that is larger than the message buffer?

Can I assume that the following sequence will work?

First message contains a fieldList ending with the first fragment of the map field

Second message contains a fieldList with the first field being the mapField, if a mapentry is fragmented then the encoding continues the mapentry with an update action, and encoding continues until the buffer is full or the message is completed.

Also if I am sending update messages, although they cannot be fragmented will a sequence of updates give me the desired effect?

How can I 'clear' a Map or Vector Field in an update?

What I really want to achieve here is a field level clear cache.

could I send the field twice in the same message, firstly as an empty field, which will clear the cached field data, followed by an encoded map/vector field adding all the map/vector entries?

elektronelektron-sdkrrteta-apielektron-transport-apiencoding
icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvote
Accepted
1.2k 23 29 44

One approach available today will be to decompose the data object you are publishing so that the embedded object is available as an independent item stream. That stream can then be split across multiple messages using the multi-part message paradigm. Where you previously wanted to place the container object now replace with a string with the new item name.

Rssl Container entries can be removed individually with appropriate "action" values, e.g. RSSL_MPEA_DELETE_ENTRY for a RsslMap. The entire container can be reset by sending out a REFRESH with the RSSL_RFMF_CLEAR_CACHE flag set.

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvote
56.1k 145 45 65

I think that you can fragment map or vector field in the field list because both map and vector support actions. Map supports RSLSL_MPEA_ADD_ENTRY action while vector supports RSSL_VTEA_SET_ENTRY action.

Refer to UPA Developers Guide in section 11.3 Container Types, it mentions that "If the field entry contains another container type, action values associated with that type specify how to update the information."

For examples:

1. The first refresh message must contains all fields. Map's fields may contain some map entries with RSSL_MPEA_ADD_ENTRY action

2. The subsequent update messages contains updated fields. In update messages, you can add new map entries in the map's fields by using RSSL_MPEA_ADD_ENTRY action. To update or delete map entries in the map's fields, you can use RSSL_MPEA_UPDATE_ENTRY and RSSL_MPEA_DELETE_ENTRY respectively.

For more information regarding the usage and rules of map and vector actions, please refer to UPA Developers Guide.

Regarding field level clear cache, you should avoid sending the field twice in the same message because it can cause unexpected behaviour in consuming applications.

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.