question

Upvotes
Accepted
13 3 4 7

Why am I getting RSSL_RET_INCOMPLETE_DATA from Training Module 5 for UPA Consumer?

Trying to get data back from an item request in module 5 of the UPA Consumer training program. After running the application to try and get data from AAPL.MX I get the following

Successfully loaded field dictionary from (local) file.
Successfully loaded enum type dictionary from (local) file.
UPA Consumer application has successfully loaded both dictionaries from (local) files.
Channel IPC descriptor = 7
Channel 7 In Progress...
Channel In Progress - New FD: 7  Old FD: 7
Channel 7 In Progress...
Channel on fd 7 is now active - reading and writing can begin.
Channel 7 active. Channel Info:
        Max Fragment Size: 6142
        Output Buffers: 50 Max, 50 Guaranteed
        Input Buffers: 10
        Send/Recv Buffer Sizes: 87040/369280
        Ping Timeout: 30
        Connected component version: ads2.4.1.L1.linux.tis 64-bit
Received Login Refresh Msg with Stream Id 1
The refresh msg is a solicited refresh (sent as a response to a request).
        Received Login Response for ApplicationId: 256
        Received Login Response for ApplicationName: ADS
        Received Login Response for Position: 10.135.31.46
Received Login Response for Username: a585657
        State: Open/Ok/None - text: "Login accepted by host vc2c09mmk5076.fmr.com."
Login stream is OK and solicited
UPA Consumer application is granted access and has logged in successfully.
Ping message has been received successfully from the server due to data message ...
Received Source Directory Refresh
Received Source Directory Refresh for Decoded Service Id: 5250
Decoding Service Info Filter ID FilterListEntry
        Received Source Directory Refresh for ServiceName: RDF
        Service name: RDF (5250) is discovered by the OMM consumer.
        Received Source Directory Refresh for Decoded Capabilities[0]: 5
        RSSL_DMT_DICTIONARY domain type is supported.
        Received Source Directory Refresh for Decoded Capabilities[1]: 6
        RSSL_DMT_MARKET_PRICE domain type is supported.
        Received Source Directory Refresh for Decoded Capabilities[2]: 10
        Received Qos: Realtime/TickByTick/Static - timeInfo: 0 - rateInfo: 0
        Received Source Directory Refresh for DictionariesProvided[0]: RWFFld
        Dictionary Provided: RWFFld with filename: RDMFieldDictionary
        Received Source Directory Refresh for DictionariesProvided[1]: RWFEnum
        Dictionary Provided: RWFEnum with filename: enumtype.def
Decoding Source State Filter ID FilterListEntry
        Received Source Directory Refresh for Decoded ServiceState: 1
        Received Source Directory Refresh for Decoded AcceptingRequests: 1
        State: Open/Ok/None - text: ""
UPA Consumer application has successfully received source directory information.
Ping message has been received successfully from the server due to data message ...
Received Item Refresh Msg for stream 5
State: Open/Ok/None - text: "All is well"
AAPL.MX
DOMAIN: RSSL_DMT_MARKET_PRICE
        PROD_PERM           14392
        RDNDISPLAY          13876
        DSPLY_NAME          APPLE INC
        RDN_EXCHID          rsslDecodeEnum() failed with return code: -26
Error RSSL_RET_INCOMPLETE_DATA (-26) encountered with decodeMarketPricePayload. Error Text: Failure: Not enough data was provided.

Then when running the program in gdb I am able to see what data is given right before it fails and get

p *dataDictionary
$2 = {minFid = 1, maxFid = 32766, numberOfEntries = 15045, entriesArray = 0x7ffff7fa8010, isInitialized = 1 '\001',
  enumTables = 0x7ffff7ee7010, enumTableCount = 523, info_DictionaryId = 1, infoField_Version = {length = 7,
    data = 0x8b8d80 "4.20.25"}, infoEnum_RT_Version = {length = 7, data = 0x8b94b0 "4.20.25"}, infoEnum_DT_Version = {length = 5,
    data = 0x8b9680 "16.71"}, infoField_Filename = {length = 7, data = 0x8b8d40 "RWF.DAT"}, infoField_Desc = {length = 19,
    data = 0x8b8d60 "RDF-D RWF field set"}, infoField_Build = {length = 3, data = 0x8b8da0 "001"}, infoField_Date = {length = 11,
    data = 0x8b8dc0 "19-May-2016"}, infoEnum_Filename = {length = 12, data = 0x8b93e0 "ENUMTYPE.001"}, infoEnum_Desc = {
    length = 34, data = 0x8b9480 "IDN Marketstream enumerated tables"}, infoEnum_Date = {length = 11,
    data = 0x8b9950 "30-Aug-2016"}}

I am not sure what data is missing but this is what is returned.

The other issue is then looking for the default symbol of TRI which will give me this response

Successfully loaded field dictionary from (local) file.


Successfully loaded enum type dictionary from (local) file.


UPA Consumer application has successfully loaded both dictionaries from (local) files.




Channel IPC descriptor = 7


Channel 7 In Progress...


Channel In Progress - New FD: 7  Old FD: 7


Channel 7 In Progress...


Channel on fd 7 is now active - reading and writing can begin.
Channel 7 active. Channel Info:
        Max Fragment Size: 6142
        Output Buffers: 50 Max, 50 Guaranteed
        Input Buffers: 10
        Send/Recv Buffer Sizes: 87040/369280
        Ping Timeout: 30
        Connected component version: ads2.4.1.L1.linux.tis 64-bit




Received Login Refresh Msg with Stream Id 1


The refresh msg is a solicited refresh (sent as a response to a request).
        Received Login Response for ApplicationId: 256
        Received Login Response for ApplicationName: ADS
        Received Login Response for Position: 10.135.31.46


Received Login Response for Username: a585657
        State: Open/Ok/None - text: "Login accepted by host vc2c09mmk5076.fmr.com."


Login stream is OK and solicited
UPA Consumer application is granted access and has logged in successfully.


Ping message has been received successfully from the server due to data message ...




Received Source Directory Refresh


Received Source Directory Refresh for Decoded Service Id: 5250
Decoding Service Info Filter ID FilterListEntry
        Received Source Directory Refresh for ServiceName: RDF
        Service name: RDF (5250) is discovered by the OMM consumer.
        Received Source Directory Refresh for Decoded Capabilities[0]: 5
        RSSL_DMT_DICTIONARY domain type is supported.
        Received Source Directory Refresh for Decoded Capabilities[1]: 6
        RSSL_DMT_MARKET_PRICE domain type is supported.
        Received Source Directory Refresh for Decoded Capabilities[2]: 10
        Received Qos: Realtime/TickByTick/Static - timeInfo: 0 - rateInfo: 0
        Received Source Directory Refresh for DictionariesProvided[0]: RWFFld
        Dictionary Provided: RWFFld with filename: RDMFieldDictionary
        Received Source Directory Refresh for DictionariesProvided[1]: RWFEnum
        Dictionary Provided: RWFEnum with filename: enumtype.def


Decoding Source State Filter ID FilterListEntry
        Received Source Directory Refresh for Decoded ServiceState: 1
        Received Source Directory Refresh for Decoded AcceptingRequests: 1
        State: Open/Ok/None - text: ""


UPA Consumer application has successfully received source directory information.


Ping message has been received successfully from the server due to data message ...




Received Item Refresh Msg for stream 5
State: Open/Ok/None - text: "All is well"


TRI
DOMAIN: RSSL_DMT_MARKET_PRICE
        PROD_PERM           909456946
        RDNDISPLAY          13879
        DSPLY_NAME          THOMSON REUTERS
        RDN_EXCHID          TFF(57)
        TRDPRC_1
        TRDPRC_2
        TRDPRC_3            rsslDecodeReal() failed with return code: -29
Error RSSL_RET_INVALID_DATA (-29) encountered with decodeMarketPricePayload. Error Text: Failure: Invalid data provided to function.

I am not sure why this occurs but again when I set a breakpoint right before this occurs I have this data:

p fieldEntry
$4 = {fieldId = 8, dataType = 0 '\000', encData = {length = 5, data = 0xc70b4a "+43.8"}}

As can be seen the data is there from the fieldEntry. So but it does not seem to want to be passed any further. This is also an issue with it printing the data for TRDPRC_1 and TRDPRC_2.

Does anyone know why this is occurring?

elektronrefinitiv-realtimeelektron-sdkrrteta-apielektron-transport-apirssl
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.

Upvotes
Accepted
31.6k 37 11 19

@manning0218

The dictionaries that are loaded from files are used to parse the data received from the infrastructure.

Very likely, the failure to parse happens because the local dictionary files you are successfully loading do not fully match the dictionaries used by the infrastructure you are connecting to.

Would like to try to download the dictionaries from the infrastructure instead.

Example Consumer that is part of SDK examples, both for Java and for C++, will attempt to download the local dictionaries first, and failing that, will request and parse the up-to-date dictionaries from the infrastructure.

Therefore, suggesting to run consumer example from ETA SDK as a quick way to verify this.

Make sure that dictionaries are not present where the app is looking for them.

Then the consumer will issue a dictionary request to the infrastructure to download the dictionaries.

Overall, we like to download the dictionaries from the infrastructure better then loading them from the local files. Both options are available to a custom application developer, but requesting from the infrastructure guarantees that the application's dictionaries are always in-synch with the infrastructure dictionaries, there is no maintenance overhead involved in keeping them the same, and it helps avoid parsing issues.

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.

Upvotes
13k 61 39 63

Hi @manning0218,

Just to add to Zoya's note, I just tried module 5 for the training example and there were no issues. By default, the training example expects to use the dictionary files downloaded from the server when it runs. Perhaps you copied some in to either test or maybe because of the following message when it starts, i.e.

Unable to load field dictionary. Will attempt to download from provider.
        Error Text: Can't open file: 'RDMFieldDictionary'.

Unable to load enum type dictionary. Will attempt to download from provider.
        Error Text: Can't open file: 'enumtype.def'.

These messages are very common among all examples and are simply warnings. As you can see in the message, it will download them when they are not available.

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.