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?

Best Answer

  • @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.

Answers

  • 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.