Refinitiv / Real-Time-SDK

Other
180 stars 128 forks source link

EMA C#: Issues with custom domain and ARRAY #269

Closed lubomir-benus closed 2 months ago

lubomir-benus commented 5 months ago

Hi guys,

We have 3 consumer implementations in our app: RFA C#, EMA C++ (CLI), and EMA C#.

EMA C# should be the final implementation, and overall it looks OK. Except for one thing - which is a showstopper for us. We are getting incomplete data when using custom domain and arrays.

The dictionary of the custom domain looks like this:

!ACRONYM    DDE ACRONYM         FID     RIPPLES TO  FIELD TYPE      LENGTH      RWF TYPE        RWF LEN
!-------    ------------------  -----   ----------  ------------    -------     ------------    -------
!
! Arrays A
!
ARRAYA_0       "ARRAYA_0"   -4100   NULL        NONE            0           ARRAY           0
ARRAYA_1       "ARRAYA_1"   -4101   NULL        NONE            0           ARRAY           0
!
! Arrays B
!
ARRAYB_0     "ARRAYB_0"   -4110   NULL        NONE            0           ARRAY           0
ARRAYB_1     "ARRAYB_1"   -4111   NULL        NONE            0           ARRAY           0
  1. The issue is we don't get all data from TREP (there is a non-interactive feed behind) in EMA C# version. Message is split into 2 RefreshMsg. Second RefreshMsg don't get ARRAYB_0 IDs.

This is from EMA C#

SimpleEmaConsumerClient - Handle:1 Msg:RefreshMsg
    streamId="5"
    domain="Unknown RDM Domain. Value='128'"
    solicited
    state="Open / Ok / None / ''"
    itemGroup="0x00 0x24"
    name="ItemA"
    nameType="1"
    serviceId="996"
    serviceName="CUSTOM_DOMAIN"
    Payload dataType="FieldList"
        FieldList
            FieldEntry fid="-4100" name="ARRAYA_0" dataType="OmmArray"
                OmmArray with entries of dataType="Rmtes"
                    value=""90005289"
                    value=""40602455"
                    value=""41999850"
                    value=""41999825"
                    value=""41999854"
                    value=""41999820"
                    value=""41999849"
                    .. followed by 500 items
                OmmArrayEnd
            FieldEntryEnd
            FieldEntry fid="-4101" name="ARRAYA_1" dataType="OmmArray"
                OmmArray
                    blank array
                OmmArrayEnd
            FieldEntryEnd
        FieldListEnd
    PayloadEnd
RefreshMsgEnd

SimpleEmaConsumerClient - Handle:1 Msg:RefreshMsg
    streamId="5"
    domain="Unknown RDM Domain. Value='128'"
    solicited
    RefreshComplete
    state="Open / Ok / None / ''"
    itemGroup="0x00 0x24"
    name="ItemA"
    nameType="1"
    serviceId="996"
    serviceName="CUSTOM_DOMAIN"
    Payload dataType="FieldList"
        FieldList
            FieldEntry fid="-4110" name="ARRAYB_0" dataType="OmmArray"
                OmmArray
                    blank array
                OmmArrayEnd
            FieldEntryEnd
            FieldEntry fid="-4111" name="ARRAYB_1" dataType="OmmArray"
                OmmArray
                    blank array
                OmmArrayEnd
            FieldEntryEnd
        FieldListEnd
    PayloadEnd
RefreshMsgEnd

This is for EMA C++

SimpleEmaConsumerClient - Handle:2388998474288 Msg:RefreshMsg
    streamId="5"
    domain="Unknown RDM Domain. Value='128'"
    Solicited
    ClearCache
    state="Open / Ok / None / ''"
    itemGroup="00 24"
    qos="RealTime/TickByTick"
    partNum="0"
    name="ItemA"
    nameType="1"
    serviceId="996"
    serviceName="CUSTOM_DOMAIN"
    Payload dataType="FieldList"
        FieldList
            FieldEntry fid="-4100" name="ARRAYA_0" dataType="OmmArray"
                OmmArray with entries of dataType="Rmtes"
                    value=""90005289"
                    value=""40602455"
                    value=""41999850"
                    value=""41999825"
                    value=""41999854"
                    value=""41999820"
                    value=""41999849"
                    .. followed by 500 items
                OmmArrayEnd
            FieldEntryEnd
            FieldEntry fid="-4101" name="ARRAYA_1" dataType="OmmArray"
                OmmArray
                    blank array
                OmmArrayEnd
            FieldEntryEnd
        FieldListEnd

    PayloadEnd
RefreshMsgEnd

SimpleEmaConsumerClient - Handle:2388998474288 Msg:RefreshMsg
    streamId="5"
    domain="Unknown RDM Domain. Value='128'"
    Solicited
    RefreshComplete
    state="Open / Ok / None / ''"
    itemGroup="00 24"
    qos="RealTime/TickByTick"
    partNum="1"
    name="ItemA"
    nameType="1"
    serviceId="996"
    serviceName="CUSTOM_DOMAIN"
    Payload dataType="FieldList"
        FieldList
            FieldEntry fid="-4110" name="ARRAYB_0" dataType="OmmArray"
                OmmArray with entries of dataType="Rmtes"
                    value="206631"
                    value="133"
                    value="174"
                    value="240"
                    value="273"
                    value="281"
                    .. followed by 500 items
                OmmArrayEnd
            FieldEntryEnd
            FieldEntry fid="-4111" name="ARRAYB_1" dataType="OmmArray"
                OmmArray
                    blank array
                OmmArrayEnd
            FieldEntryEnd
        FieldListEnd

    PayloadEnd
RefreshMsgEnd
  1. Issue with EMA C#. If I call ToString() method twice I also lose some data of ARRAY. This is the same scenario as above. But I call ToString() twice on each message. in this case, first RefreshMessage lost ARRAYA_0 IDs. But I guess it's not related to ToString() method but rather to the examination of the object. First visit to the object change it or something like that.
SimpleEmaConsumerClient - Handle:1 Msg:RefreshMsg
    streamId="5"
    domain="Unknown RDM Domain. Value='128'"
    solicited
    state="Open / Ok / None / ''"
    itemGroup="0x00 0x24"
    name="ItemA"
    nameType="1"
    serviceId="996"
    serviceName="CUSTOM_DOMAIN"
    Payload dataType="FieldList"
        FieldList
            FieldEntry fid="-4100" name="ARRAYA_0" dataType="OmmArray"
                OmmArray
                    blank array
                OmmArrayEnd
            FieldEntryEnd
            FieldEntry fid="-4101" name="ARRAYA_1" dataType="OmmArray"
                OmmArray
                    blank array
                OmmArrayEnd
            FieldEntryEnd
        FieldListEnd
    PayloadEnd
RefreshMsgEnd

Notes: I was trying to do some tests with Default MMT_MARKET_PRICE = 6 domain, but wasn't successful in reading an array. We have been using our custom domain for years and we never saw the issue until EMA C# testing.

soranat commented 5 months ago

@lubomir-benus Thank you for bringing up this issue! We created an internal Jira to investigate it.

vlevendel commented 2 months ago

RTSDK 2.2.0.L1 addresses this issue. Please let us know if you have further concerns. Closing.