When requesting a Symbol List with RSSL_RQMF_STREAMING set in the flags, after the initial REFRESH message, UPDATEs will arrive, generally with some number of symbols that have either been added or removed from the symbol list.
Frequently an UPDATE will arrive where there is nothing in the RsslMap in the UPDATE message.
Dumping out the message looks like this:
- msgClass: RSSL_MC_UPDATE (4)
- domainType: RSSL_DMT_SYMBOL_LIST (10)
- containerType: RSSL_DT_MAP (137)
encDataBody: - 8 bytes:
00000000 08 10 00 41 47 D0 00 00
encMsgBuffer: - 23 bytes:
00000000 00 0D 04 0A 00 00 0A 0D 10 09 00 00 00 00 00 08
00000010 10 00 41 47 D0 00 00
Should I just ignore this, or have I missed something in the documentation/examples?
Is the empty map a heartbeat?
Or does it indicate something else?
Having just had this occur and matching the timestamp in my trace to find the correct XML file containing the data for the event that had an empty RsslMap, I see the following:
<!-- End Message (Channel IPC descriptor = 19) --> <!-- Incoming Message (Channel IPC descriptor = 19) --> <!-- Time: 12:49:11:355 --> <!-- rwfMajorVer="14" rwfMinorVer="0" --> <updateMsg domainType="RSSL_DMT_SYMBOL_LIST"Unlike most of the messages, there are no fieldList nor fieldEntry in the dataBody
dataSize="8"> <key flags="0x7 (RSSL_MKF_HAS_SERVICE_ID|RSSL_MKF_HAS_NAME|RSSL_MKF_HAS_NAME_TYPE)" serviceId="257" name="XXX_XXX_XX" nameType="1"/> <dataBody> <map flags="0x8 (RSSL_MPF_HAS_TOTAL_COUNT_HINT)" countHint="84299"
keyPrimitiveType="RSSL_DT_BUFFER" containerType="RSSL_DT_NO_DATA" > </map> </dataBody> </updateMsg>
Seeing the XML now, I suspect the sole purpose of this message with the empty map is to provide the countHint field.
So, in this case, I'm likely answering my own question: the message, while containing no fields, simply contains a value in RsslMap.totalHintCount.
Therefore, the answer to the above question is most likely "it indicates something else"
I doesn't happen every time; it's sporadic.
I'm not using A RIC; I don't thinka RIC would generate an RSSL_MC_UPDATE while processing a message callback with domainType: RSSL_DMT_SYMBOL_LIST
I will attempt to gather an XML trace by either modifying my application to generate one, or by using rsslConsumer with a modified symbol list decoder that will print when the condition occurs
I have modified my application to create an XML trace as detailed in both the developers guide and the sample code referenced above.
I'm just waiting the receipt of an empty RsslMap in a SymbolList Update message.
I've reproduced the condition once so far, generating 90 16M files of collected data.
What should I do with it?