EMA C++ IProvider downloading dictionary from ADH over the login stream - RWFEnum not downloaded
Hi all,
please help me with this issue.
Context: EMA C++ based application, using an OmmProviderClient that downloads the Data dictionary over the Login connection.
Issue: timeout while downloading the dictionary (RWFFld is downloaded, RWFEnum isn't).
In the context of reqMsg for login request, the application starts the dictionary download as follows:
..registerClient(ReqMsg().name("RWFFld").filter(DICTIONARY_NORMAL).domainType(MMT_DICTIONARY), ..);
..registerClient(ReqMsg().name("RWFEnum").filter(DICTIONARY_NORMAL).domainType(MMT_DICTIONARY), ..);
From the EmaTrace logs, I can see that the application downloads all the 17255 entries expected in RWFFld within a single refresh message, but no messages at all are received for the request on RWFEnum.
After 15 seconds, the application is notified of the following event (I'd say by the EMA engine itself, due to RequestTimeout hit?):
StatusMsg
streamId="-2"
domain="Dictionary Domain"
state="Closed, Recoverable / Suspect / None / 'request is timeout'"
name="RWFEnum"
filter="7"
StatusMsgEnd
What could be the reason for this issue? A problem in the code, or something else?
Thanks
Best Regards,
Paolo
Please find an excerpt of the relevant messages exchanged over the connection:
<!-- Incoming Message (Channel IPC descriptor = 19) -->
<!-- Time: 7:22:21:400 -->
<!-- rwfMajorVer="14" rwfMinorVer="1" -->
<requestMsg domainType="RSSL_DMT_LOGIN" streamId="1" containerType="RSSL_DT_NO_DATA" flags="0x4 (RSSL_RQMF_STREAMING)" dataSize="0">
<key flags="0x26 (RSSL_MKF_HAS_NAME|RSSL_MKF_HAS_NAME_TYPE|RSSL_MKF_HAS_ATTRIB)" name="rmds" nameType="1" attribContainerType="RSSL_DT_ELEMENT_LIST">
<attrib>
<elementList flags="0x8 (RSSL_ELF_HAS_STANDARD_DATA)">
<elementEntry name="AllowSuspectData" dataType="RSSL_DT_UINT" data="1"/>
<elementEntry name="ApplicationId" dataType="RSSL_DT_ASCII_STRING" data="256"/>
<elementEntry name="DisableDataConversion" dataType="RSSL_DT_UINT" data="0"/>
<elementEntry name="InstanceId" dataType="RSSL_DT_ASCII_STRING" data="ion"/>
<elementEntry name="ProvidePermissionExpressions" dataType="RSSL_DT_UINT" data="1"/>
<elementEntry name="ProvidePermissionProfile" dataType="RSSL_DT_UINT" data="0"/>
<elementEntry name="Role" dataType="RSSL_DT_UINT" data="0"/>
<elementEntry name="SingleOpen" dataType="RSSL_DT_UINT" data="0"/>
<elementEntry name="SingleOpenRequests" dataType="RSSL_DT_UINT" data="0"/>
<elementEntry name="SupportProviderDictionaryDownload" dataType="RSSL_DT_UINT" data="1"/>
</elementList>
</attrib>
</key>
<dataBody>
</dataBody>
</requestMsg>
<!-- Outgoing Message (Channel IPC descriptor = 19) -->
<!-- Time: 7:22:21:401 -->
<!-- rwfMajorVer="14" rwfMinorVer="1" -->
<refreshMsg domainType="RSSL_DMT_LOGIN" streamId="1" containerType="RSSL_DT_NO_DATA" flags="0x68 (RSSL_RFMF_HAS_MSG_KEY|RSSL_RFMF_SOLICITED|RSSL_RFMF_REFRESH_COMPLETE)" groupId="0" dataState="RSSL_DATA_OK" streamState="RSSL_STREAM_OPEN" code="RSSL_SC_NONE" text="Login accepted" dataSize="0">
<key flags="0x26 (RSSL_MKF_HAS_NAME|RSSL_MKF_HAS_NAME_TYPE|RSSL_MKF_HAS_ATTRIB)" name="rmds" nameType="1" attribContainerType="RSSL_DT_ELEMENT_LIST">
<attrib>
<elementList flags="0x0">
</elementList>
</attrib>
</key>
<dataBody>
</dataBody>
</refreshMsg>
<!-- Outgoing Message (Channel IPC descriptor = 19) -->
<!-- Time: 7:22:21:401 -->
<!-- rwfMajorVer="14" rwfMinorVer="1" -->
<requestMsg domainType="RSSL_DMT_DICTIONARY" streamId="-1" containerType="RSSL_DT_NO_DATA" flags="0xC4 (RSSL_RQMF_STREAMING|RSSL_RQMF_HAS_QOS|RSSL_RQMF_HAS_WORST_QOS)" qosDynamic="0" qosRate="1" qosTimeliness="1" worstQosDynamic="0" worstQosRate="3" worstQosTimeliness="2" worstQosRateInfo="65535" dataSize="0">
<key flags="0xA (RSSL_MKF_HAS_NAME|RSSL_MKF_HAS_FILTER)" name="RWFFld" filter="7"/>
<dataBody>
</dataBody>
</requestMsg>
<!-- Outgoing Message (Channel IPC descriptor = 19) -->
<!-- Time: 7:22:21:401 -->
<!-- rwfMajorVer="14" rwfMinorVer="1" -->
<requestMsg domainType="RSSL_DMT_DICTIONARY" streamId="-2" containerType="RSSL_DT_NO_DATA" flags="0xC4 (RSSL_RQMF_STREAMING|RSSL_RQMF_HAS_QOS|RSSL_RQMF_HAS_WORST_QOS)" qosDynamic="0" qosRate="1" qosTimeliness="1" worstQosDynamic="0" worstQosRate="3" worstQosTimeliness="2" worstQosRateInfo="65535" dataSize="0">
<key flags="0xA (RSSL_MKF_HAS_NAME|RSSL_MKF_HAS_FILTER)" name="RWFEnum" filter="7"/>
<dataBody>
</dataBody>
</requestMsg>
<!-- Incoming Message (Channel IPC descriptor = 19) -->
<!-- Time: 7:22:21:409 -->
<!-- rwfMajorVer="14" rwfMinorVer="1" -->
<refreshMsg domainType="RSSL_DMT_DICTIONARY" streamId="-1" containerType="RSSL_DT_SERIES" flags="0x168 (RSSL_RFMF_HAS_MSG_KEY|RSSL_RFMF_SOLICITED|RSSL_RFMF_REFRESH_COMPLETE|RSSL_RFMF_CLEAR_CACHE)" groupId="0" dataState="RSSL_DATA_OK" streamState="RSSL_STREAM_OPEN" code="RSSL_SC_NONE" text="" dataSize="706983">
<key flags="0xA (RSSL_MKF_HAS_NAME|RSSL_MKF_HAS_FILTER)" name="RWFFld" filter="7"/>
<dataBody>
<series flags="0x7 (RSSL_SRF_HAS_SET_DEFS|RSSL_SRF_HAS_SUMMARY_DATA|RSSL_SRF_HAS_TOTAL_COUNT_HINT)" countHint="17255" containerType="RSSL_DT_ELEMENT_LIST">
<elementSetDefs>
<elementSetDef setId="0">
<elementSetDefEntry name="NAME" dataType="RSSL_DT_ASCII_STRING" />
<elementSetDefEntry name="FID" dataType="RSSL_DT_INT_2" />
<elementSetDefEntry name="RIPPLETO" dataType="RSSL_DT_INT_2" />
<elementSetDefEntry name="TYPE" dataType="RSSL_DT_INT_1" />
<elementSetDefEntry name="LENGTH" dataType="RSSL_DT_UINT_2" />
<elementSetDefEntry name="RWFTYPE" dataType="RSSL_DT_UINT_1" />
<elementSetDefEntry name="RWFLEN" dataType="RSSL_DT_UINT_2" />
<elementSetDefEntry name="ENUMLENGTH" dataType="RSSL_DT_UINT_2" />
<elementSetDefEntry name="LONGNAME" dataType="RSSL_DT_ASCII_STRING" />
</elementSetDef>
</elementSetDefs>
<summaryData>
<elementList flags="0x8 (RSSL_ELF_HAS_STANDARD_DATA)">
<elementEntry name="Type" dataType="RSSL_DT_UINT" data="1"/>
<elementEntry name="DictionaryId" dataType="RSSL_DT_INT" data="1"/>
<elementEntry name="Version" dataType="RSSL_DT_ASCII_STRING" data="4.20.44"/>
</elementList>
</summaryData>
<seriesEntry>
<elementList flags="0x2 (RSSL_ELF_HAS_SET_DATA)">
...
</elementList>
</seriesEntry>
...
</series>
</dataBody>
</refreshMsg>
// No other messages are sent or received on the RSSL_DMT_DICTIONARY domain
<!-- Outgoing Message (Channel IPC descriptor = 19) -->
<!-- Time: 7:22:36:402 -->
<!-- rwfMajorVer="14" rwfMinorVer="1" -->
<closeMsg domainType="RSSL_DMT_DICTIONARY" streamId="-2" containerType="RSSL_DT_NO_DATA" flags="0x0" dataSize="0">
<dataBody>
</dataBody>
</closeMsg>
Best Answer
-
Hi all,
I've just got to know that the missing download of RWFEnum was caused by an incorrect configuration of the infrastructure.
Thank you
Best Regards,
Paolo
0
Answers
-
Hello @Paolo Parlapiano ,
Are you on a recent version of RTSDK?
If this is the case, I would, as a sanity check, run example EMA Consumer 332 = Dictionary_Streaming.
It only does that, connects to infra, and downloads both dictionaries.
So this will allow to verify if both dictionaries are coming back from your infra with this simple example as expected.
Let us know how this works on your side?
0 -
Hello @Paolo Parlapiano
If you can share a small excerpt of code that reproduces the issue, ideally, that can just be applied to one of the simple IProvider examples that come with RTSDK, we can test on our side and try to be of more help.
0 -
You may need to specify a service name in the dictionary requests. For example:
// Open Dictionary streams
UInt64 fldHandle = provider.registerClient(ReqMsg().name("RWFFld").filter(DICTIONARY_NORMAL).serviceName("DIRECT_FEED").domainType(MMT_DICTIONARY), appClient);
UInt64 enumHandle = provider.registerClient(ReqMsg().name("RWFEnum").filter(DICTIONARY_NORMAL).serviceName("DIRECT_FEED").domainType(MMT_DICTIONARY), appClient);I got the following errors when I didn't specify a service name in the dictionary requests.
Service Name: <not set>loggerMsg
TimeStamp: 09:16:27.917
ClientName: DictionaryHandler
Severity: Error
Text: Dictionary message rejected - invalid dictionary domain message.
Stream Id -1
Client handle 2100841332720
Instance Name Provider_1_1
loggerMsgEnd
loggerMsg
TimeStamp: 09:16:28.494
ClientName: DictionaryHandler
Severity: Error
Text: Dictionary message rejected - invalid dictionary domain message.
Stream Id -2
Client handle 2100841332720
Instance Name Provider_1_1
loggerMsgEnd
Handle: 2100922442128 Closure: 0000000000000000
Item Name: RWFFld
Service Name: <not set>
Item State: Closed, Recoverable / Suspect / None / 'request is timeout'
Handle: 2100922443104 Closure: 0000000000000000
Item Name: RWFEnum
Service Name: <not set>
Item State: Closed, Recoverable / Suspect / None / 'request is timeout'1 -
Hi, thanks for your answers.
However, I'm suspecting that the issue could be a bit different.
In this older question https://community.developers.refinitiv.com/questions/48470/iprovider-downloading-dictionary-and-servicenamese.html, I've just asked for info in case a dictionary request must be done, but no serviceName is available in that context, which is exactly this case.
Furthermore, the strange thing is that in this issue, both the requests (RWFFld, RWFenum) are made without any serviceName specified, and one of them (RWFFld) is actually served.
One more point: I don't receive any error message in the provider log (the level should be fine since I can see messages with Success severity..).
Thanks
Best Regards,
Paolo
0 -
What are the versions of EMA and ADH that you are using?
0 -
Hello @Paolo Parlapiano and @Jirapongse ,
I observe the same behavior on my side, as Jirapongse- unable to download the dictionaries without specifying a valid service. The valid service has to be defined on the infra, and only then the two valid dictionaries for it can be downloaded by IProvider successfully .
@Paolo Parlapiano, are you able to download the two dictionaries, from ADH, by specifying a valid service, using example EMA IProvider 350?
If not, are you able to download the two dicts from ADS, via EMA Consumer 332?
Not able to reproduce what you see, on my side.
0 -
Hello,
sorry for the delay in answering.
- the version of ADH is adh3.5.1.L1.linux.rrg 64-bit
- the version of EMA is 3.6.1.L2
Thanks
Best Regards,
Paolo
0 -
I am still unable to replicate this issue with EMA 3.6.1.L2 and ADH3.5.1.L1.
The IProv350 can retrieve the data dictionary properly.
Item Name: RWFFld
Service Name: <not set>
Item State: Open / Ok / None / ''
loggerMsg
TimeStamp: 20:03:06.314
ClientName: DictionaryHandler
Severity: Verbose
Text: Received dictionary refresh message.
Stream Id -2
Client handle 2511766455984
Instance Name Provider_1_1
loggerMsgEnd
Handle: 2511847178928 Closure: 0000000000000000
Item Name: RWFEnum
Service Name: <not set>
Item State: Open / Ok / None / ''
Dictionary download complete
Dictionary Id : 1
Dictionary field version : 4.20.46
Number of dictionary entries : 15595You can try to increase the value in the RequestTimeout configuration in the Provider configuration.
It may help.
If you checked the XML trace file and found that ADH didn't send the dictionary response to the provider application, you need to contact the ADH support team to verify the problem.
0 -
Thanks for the info, I've just asked to make a test using the bigger timeout.
I'll keep you posted.
Best Regards,
Paolo
0
Categories
- All Categories
- 6 AHS
- 37 Alpha
- 161 App Studio
- 4 Block Chain
- 4 Bot Platform
- 16 Connected Risk APIs
- 47 Data Fusion
- 30 Data Model Discovery
- 608 Datastream
- 1.3K DSS
- 577 Eikon COM
- 4.9K Eikon Data APIs
- 7 Electronic Trading
- Generic FIX
- 7 Local Bank Node API
- Trading API
- 2.7K Elektron
- 1.3K EMA
- 236 ETA
- 519 WebSocket API
- 33 FX Venues
- 10 FX Market Data
- 1 FX Post Trade
- 1 FX Trading - Matching
- 12 FX Trading – RFQ Maker
- 5 Intelligent Tagging
- 2 Legal One
- 20 Messenger Bot
- 2 Messenger Side by Side
- 9 ONESOURCE
- 7 Indirect Tax
- 59 Open Calais
- 264 Open PermID
- 39 Entity Search
- 2 Org ID
- PAM
- PAM - Logging
- 8.4K Private Comments
- 6 Product Insight
- Project Tracking
- ProView
- ProView Internal
- 20 RDMS
- 1.4K Refinitiv Data Platform
- 367 Refinitiv Data Platform Libraries
- 3 Refinitiv Due Diligence
- LSEG Due Diligence Portal API
- 3 Refinitiv Due Dilligence Centre
- Rose's Space
- 1.1K Screening
- 18 Qual-ID API
- 13 Screening Deployed
- 23 Screening Online
- 10 World-Check Customer Risk Screener
- 990 World-Check One
- 44 World-Check One Zero Footprint
- 45 Side by Side Integration API
- Test Space
- 3 Thomson One Smart
- 1.2K TR Internal
- Global Hackathon 2015
- 2 Specialists Who Code
- 10 TR Knowledge Graph
- 150 Transactions
- 142 REDI API
- 1.7K TREP APIs
- 4 CAT
- 21 DACS Station
- 117 Open DACS
- 1.1K RFA
- 103 UPA
- 172 TREP Infrastructure
- 224 TRKD
- 886 TRTH
- 5 Velocity Analytics
- 5 Wealth Management Web Services
- 59 Workspace SDK
- 9 Element Framework
- 5 Grid
- 13 World-Check Data File
- Yield Book Analytics
- 46 中文论坛