EMA C++ error Attempt to submit using a registered handle
During the testing of my new non-interactive code, EMA reports error
“Attempt to submit( const UpdateMsg& ) using a registered handle”
To illustrate my usecase, I instructed application to:
(1) create record RIC
(2) create record RIC1
(3) update RIC
(4) update RIC1
(5) drop RIC
(6) create RIC2
(7) create RIC3
(8) update RIC3
(9) update RIC2
The moment I try to update RIC2, it report the error message and below is XML message trace from EMA Logger
TimeStamp: 14:45:58.949
ClientName: Provider_1_1
Severity: Verbose
Text: Received RefreshMsg with market domain; Handle = 1000000000000, user assigned streamId = 0.
loggerMsgEnd
loggerMsg
TimeStamp: 14:45:58.950
ClientName: Provider_1_1
Severity: Verbose
Text: Received RefreshMsg with market domain; Handle = 1000000000001, user assigned streamId = 0.
loggerMsgEnd
loggerMsg
TimeStamp: 14:46:22.143
ClientName: Provider_1_1
Severity: Verbose
Text: Received UpdateMsg with market domain; Handle = 1000000000000, user assigned streamId = 0.
loggerMsgEnd
loggerMsg
TimeStamp: 14:46:23.951
ClientName: Provider_1_1
Severity: Verbose
Text: Received UpdateMsg with market domain; Handle = 1000000000001, user assigned streamId = 0.
loggerMsgEnd
loggerMsg
TimeStamp: 14:46:35.455
ClientName: Provider_1_1
Severity: Verbose
Text: Received StatusMsg with market domain; Handle = 1000000000000, user assigned streamId = 0.
loggerMsgEnd
loggerMsg
TimeStamp: 14:46:56.079
ClientName: Provider_1_1
Severity: Verbose
Text: Received RefreshMsg with market domain; Handle = 1000000000002, user assigned streamId = 0.
loggerMsgEnd
loggerMsg
TimeStamp: 14:46:56.130
ClientName: ItemCallbackClient
Severity: Error
Text: Received an item event without user specified pointer or stream info
Instance Name Provider_1_1
RsslReactor 0x0xf77930
RsslReactorChannel 0x0xf77930
RsslSocket 14
loggerMsgEnd
loggerMsg
TimeStamp: 14:47:09.647
ClientName: Provider_1_1
Severity: Verbose
Text: Received RefreshMsg with market domain; Handle = 1000000000003, user assigned streamId = 0.
loggerMsgEnd
loggerMsg
TimeStamp: 14:47:23.095
ClientName: Provider_1_1
Severity: Verbose
Text: Received UpdateMsg with market domain; Handle = 1000000000003, user assigned streamId = 0.
loggerMsgEnd
loggerMsg
TimeStamp: 14:47:30.439
ClientName: Provider_1_1
Severity: Error
Text: Attempt to submit( const UpdateMsg& ) using a registered handle.
loggerMsgEnd
Turn on EMA XML trace message and found unexpected stream id as below trace log. It looks like after EMA receive close message for "RIC" and the time I create "RIC2", the stream id is positive value "5" instead of negative value for Non-Interactive. I think this may cause the error when I update "RIC2".
<!-- End Message (Channel IPC descriptor = 14) -->
<!-- Outgoing Message (Channel IPC descriptor = 14) -->
<!-- Time: 14:46:23:951 -->
<!-- rwfMajorVer="14" rwfMinorVer="0" -->
<updateMsg
domainType="RSSL_DMT_MARKET_PRICE" streamId="-6"
containerType="RSSL_DT_FIELD_LIST" flags="0x0" updateType="0
(RDM_UPD_EVENT_TYPE_UNSPECIFIED)" dataSize="35">
<dataBody>
<fieldList flags="0x8 (RSSL_FLF_HAS_STANDARD_DATA)">
<fieldEntry fieldId="-9000" data="476F 2073 6565 206C 6120 6C61 206C 616E 64"/>
<fieldEntry fieldId="22" data="0C11 B6"/>
<fieldEntry fieldId="25" data="0C12 44"/>
</fieldList>
</dataBody>
</updateMsg>
<!-- End Message (Channel IPC descriptor = 14) -->
<!-- Outgoing Message (Channel IPC descriptor = 14) -->
<!-- Time: 14:46:35:455 -->
<!-- rwfMajorVer="14" rwfMinorVer="0" -->
<statusMsg
domainType="RSSL_DMT_MARKET_PRICE" streamId="-5"
containerType="RSSL_DT_NO_DATA" flags="0x28
(RSSL_STMF_HAS_MSG_KEY|RSSL_STMF_HAS_STATE)"
dataState="RSSL_DATA_NO_CHANGE" streamState="RSSL_STREAM_CLOSED"
code="RSSL_SC_NOT_OPEN" text="Closed" dataSize="0">
<key flags="0x3 (RSSL_MKF_HAS_SERVICE_ID|RSSL_MKF_HAS_NAME)" serviceId="1" name="RIC"/>
<dataBody>
</dataBody>
</statusMsg>
<!-- End Message (Channel IPC descriptor = 14) -->
<!-- Outgoing Message (Channel IPC descriptor = 14) -->
<!-- Time: 14:46:56:079 -->
<!-- rwfMajorVer="14" rwfMinorVer="0" -->
<refreshMsg
domainType="RSSL_DMT_MARKET_PRICE" streamId="5"
containerType="RSSL_DT_FIELD_LIST" flags="0x148
(RSSL_RFMF_HAS_MSG_KEY|RSSL_RFMF_REFRESH_COMPLETE|RSSL_RFMF_CLEAR_CACHE)"
groupId="0" dataState="RSSL_DATA_OK" streamState="RSSL_STREAM_OPEN"
code="RSSL_SC_NONE" text="Refresh Completed" dataSize="8">
<key flags="0x3 (RSSL_MKF_HAS_SERVICE_ID|RSSL_MKF_HAS_NAME)" serviceId="1" name="RIC2"/>
<dataBody>
<fieldList flags="0x8 (RSSL_FLF_HAS_STANDARD_DATA)">
<fieldEntry fieldId="22" data="0E03"/>
</fieldList>
</dataBody>
</refreshMsg>
<!-- End Message (Channel IPC descriptor = 14) -->
<!-- Incoming Message (Channel IPC descriptor = 14) -->
<!-- Time: 14:46:56:130 -->
<!-- rwfMajorVer="14" rwfMinorVer="0" -->
<closeMsg domainType="RSSL_DMT_MARKET_PRICE" streamId="5" containerType="RSSL_DT_NO_DATA" flags="0x0" dataSize="0">
<dataBody>
</dataBody>
</closeMsg>
I'm using Elektron-SDK 1.0.8.
Do you know what can cause the error message and how to resolve the issue?
Best Answer
-
This issue has been fixed in the lastest version of Elektron-SDK C++ 1.1.0.
To confirm the issue I have tested the same flow by modifying NIProvider300 from EMA example folder to replicate the error in version 1.0.8 you currently use. Below is the my codes
UInt64 Int64 RICHandle = 1000001;provider.submit(RefreshMsg()
.serviceName("API_ADH_NI_PUB").name("RIC")
.state(OmmState::OpenEnum, OmmState::OkEnum,
OmmState::NoneEnum, "UnSolicited Refresh Completed")
.payload(FieldList()
.addReal(22, 3990, OmmReal::ExponentNeg2Enum)
.addReal(25, 3994, OmmReal::ExponentNeg2Enum)
.addReal(30, 9, OmmReal::Exponent0Enum)
.addReal(31, 19, OmmReal::Exponent0Enum)
.complete())
.complete(), RICHandle);
sleep(1000);
provider.submit(RefreshMsg().serviceName("API_ADH_NI_PUB").name("RIC1")
.state(OmmState::OpenEnum, OmmState::OkEnum, OmmState::NoneEnum, "UnSolicited Refresh Completed")
.payload(FieldList()
.addReal(22, 3990, OmmReal::ExponentNeg2Enum)
.addReal(25, 3994, OmmReal::ExponentNeg2Enum)
.addReal(30, 9, OmmReal::Exponent0Enum)
.addReal(31, 19, OmmReal::Exponent0Enum)
.complete())
.complete(), RICHandle + 1);
sleep(1000);
for (Int32 i = 0; i < 1; i++)
{
provider.submit(UpdateMsg().serviceName("API_ADH_NI_PUB").name("RIC")
.payload(FieldList()
.addReal(22, 3391 + i, OmmReal::ExponentNeg2Enum)
.addReal(30, 10 + i, OmmReal::Exponent0Enum)
.complete()), RICHandle);
provider.submit(UpdateMsg().serviceName("API_ADH_NI_PUB").name("RIC1")
.payload(FieldList()
.addReal(22, 3391 + i, OmmReal::ExponentNeg2Enum)
.addReal(30, 10 + i, OmmReal::Exponent0Enum)
.complete()), RICHandle + 1);
sleep(1000);
}
provider.submit(StatusMsg().serviceName("API_ADH_NI_PUB").name("RIC")
.state(OmmState::ClosedEnum, OmmState::SuspectEnum, OmmState::NotFoundEnum,"Closed by NIPub"), RICHandle);
provider.submit(RefreshMsg().serviceName("API_ADH_NI_PUB").name("RIC2")
.state(OmmState::OpenEnum, OmmState::OkEnum, OmmState::NoneEnum, "UnSolicited Refresh Completed")
.payload(FieldList()
.addReal(22, 3990, OmmReal::ExponentNeg2Enum)
.addReal(25, 3994, OmmReal::ExponentNeg2Enum)
.addReal(30, 9, OmmReal::Exponent0Enum)
.addReal(31, 19, OmmReal::Exponent0Enum)
.complete())
.complete(), RICHandle + 2);
sleep(1000);
provider.submit(RefreshMsg().serviceName("API_ADH_NI_PUB").name("RIC3")
.state(OmmState::OpenEnum, OmmState::OkEnum, OmmState::NoneEnum, "UnSolicited Refresh Completed")
.payload(FieldList()
.addReal(22, 3990, OmmReal::ExponentNeg2Enum)
.addReal(25, 3994, OmmReal::ExponentNeg2Enum)
.addReal(30, 9, OmmReal::Exponent0Enum)
.addReal(31, 19, OmmReal::Exponent0Enum)
.complete())
.complete(), RICHandle + 3);
sleep(1000);
for (Int32 i = 0; i < 1; i++)
{
provider.submit(UpdateMsg().serviceName("API_ADH_NI_PUB").name("RIC2")
.payload(FieldList()
.addReal(22, 3391 + i, OmmReal::ExponentNeg2Enum)
.addReal(30, 10 + i, OmmReal::Exponent0Enum)
.complete()), RICHandle + 2);
provider.submit(UpdateMsg().serviceName("API_ADH_NI_PUB").name("RIC3")
.payload(FieldList()
.addReal(22, 3391 + i, OmmReal::ExponentNeg2Enum)
.addReal(30, 10 + i, OmmReal::Exponent0Enum)
.complete()), RICHandle + 3);
sleep(1000);
}I can replicate the same error in 1.0.8 and it work correctly in 1.1.0. Development has re-implement the codes that manage the non interactive provider stream in the latest version. Please upgrade to the new version of Elektron-SDK 1.1.0 to fix the issue.
0
Answers
-
Just rebuild the app with 1.1.0 and it fixed the issue. Thanks for your help.
0
Categories
- All Categories
- 6 AHS
- 39 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 中文论坛