"Domain type does not match existing request." in EMA API C++ Sample code consummer11

We are having issues with EMA API C++ Sample code consummer113. The sample code was found to have this problem today. It used to work ok.



loggerMsg
TimeStamp: 13:42:52.398
ClientName: ChannelCallbackClient
Severity: Success
Text: Received ChannelUp event on channel Channel_3
Instance Name Consumer_3_1
Connected component version: ads3.4.2.L1.linux.tis.rrg 64-bit
loggerMsgEnd

loggerMsg
TimeStamp: 13:42:53.167
ClientName: SingleItem
Severity: Error
Text: Internal error: rsslReactorSubmitMsg() failed in SingleItem::submit( RsslRequestMsg* )
RsslChannel 0x(nil)
Error Id -29
Internal sysError 0
Error Location /r/emalib/Cpp-C/Eta/Impl/Reactor/Watchlist/wlItem.c:697
Error Text Domain type does not match existing request.
loggerMsgEnd

loggerMsg
TimeStamp: 13:42:53.167
ClientName: Consumer_3_1
Severity: Error
Text: Failed to open or modify item request. Reason: RSSL_RET_INVALID_DATA. Error text: Domain type does not match existing request.
loggerMsgEnd

Exception Type='OmmInvalidUsageException', Text='Failed to open or modify item request. Reason: RSSL_RET_INVALID_DATA. Error text: Domain type does not match existing request.', ErrorCode='-29'



Best regards,
Yongguang



Best Answer

  • Jirapongse
    Answer ✓

    @yongguang.wang

    From my checking, I assume that you are using EMA 3.5.0.L1 in Real-Time SDK C/CPP 1.5.0.L1.

    It looks like to be a bug fixed in EMA C++ 3.5.1.L1 in RTSDK C++/C Release 1.5.1.L1.

    - [ESDK-4086] - EMA must check both DictionaryUsed and DictionaryProvided to download dictionary from network 

    The workaround for EMA 3.5.0.L1 is loading the dictionary from the local files by using Dictionary_2 in Consumer_3.

        <Consumer>
          <Name value="Consumer_3"/>

          <!-- ChannelSet specifies an ordered list of Channels to which OmmConsumer will attempt to    -->
          <!-- connect, one at a time, if the previous one fails to connect                            -->
          <ChannelSet value="Channel_3"/>

          <Logger value="Logger_1"/>
          <Dictionary value="Dictionary_2"/>
          <XmlTraceToStdout value="0"/>
        </Consumer>


            <Dictionary>
                <Name value="Dictionary_2"/>
                <DictionaryType value="DictionaryType::FileDictionary"/>

                <!-- dictionary names are optional: defaulted to RDMFieldDictionary and enumtype.def -->
                <RdmFieldDictionaryFileName value="./RDMFieldDictionary"/>
                <EnumTypeDefFileName value="./enumtype.def"/>
            </Dictionary>

    Then, copy the RDMFieldDictionary and enumtype.def files from the Cpp-C\etc to the working directory of the application.

    Otherwise, you can upgrade to the latest version of the Refinitiv Real-Time SDK.