I'm using the Refinitiv Real-Time SDK to publish data via RCC. I've been experimenting with bouncing the ADS during an RCC contribution session and I'm having some problems with submitting updates once the ADS comes back.
This is the sequence of events.
1) At the start of the session, I create an OmmConsumer object and I register a client for MMT_LOGIN with my credentials.
2) This triggers an onRefreshMsg callback. If this is successful, I register a client for MMT_DICTIONARY, specifying the configured consumer service (RCC).
3) This triggers an onRefreshMsg callback. If this is successful, I register a client for MMT_DIRECTORY, specifying the configured consumer service.
4) This triggers another onRefreshMsg callback. I extract the service state from this and if it is good, I start contributing.
5) When the ADS is taken down, I receive a series of onStatusMsg callbacks telling me that the channel is down. The final one of these explicitly says that the service for item RCC was lost. At this point, I suspend contributions.
6) When the ADS comes back, I receive an onStatusMsg callback telling me that the channel is back up. I also receive an onRefreshMsg callback for the MMT_LOGIN stream, which I ignore. Finally, I receive an onUpdateMsg callback for the MMT_DIRECTORY stream, indicating that the service is back up and running. There are no further callbacks.
7) However, when I try to submit any new updates to RCC, my call to OmmConsumer::submit throws an OmmInvalidUsageException with the text "Failed to submit PostMsg on item stream. Reason: Service name of 'RCC' is not found." From this point on, I can't submit anything to RCC unless I stop and restart my app. I have tried various experiments with unregistering and re-registering everything and even deleting and recreating the consumer object, but nothing seems to make any difference.
Can anyone please give me some pointers as to what I may be doing wrong? I am using version 2.0.1.L1 of the Real Time SDK (C/C++) on Red Hat Enterprise Level 7.6. Many thanks in advance, Jon
I assume that you configured RTDS to connect to RCC and then contributed data to RCC through RTDS, as mentioned in this aticle (Contribution through Refinitiv Real-Time Distribution System).
I am not sure how you can use an on-stream posting to contribute data to RCC.
When I subscribed to an item from RCC, I got the following error.
Item State: Closed / Suspect / None / 'F62: Tunnel stream aggregation does not support item requests.'
Therefore, I need to use an off-stream posting instead to contribute data to RCC through RTDS.
I need to wait for the RCC service to be up before sending an off-stream post message. Otherwise, I will get the following error.
Exception Type='OmmInvalidUsageException', Text='Failed to submit PostMsg on login stream. Reason: RSSL_RET_INVALID_DATA. Error text: Message submitted with unknown service name DDS_TRCE.', ErrorCode='-29'
You may need to enable tracing in the Real-Time SDK (C/C++) by using the XmlTraceToStdout configuration.
<Consumer> <Name value="Consumer_1"/> <Channel value="Channel_1"/> <Logger value="Logger_1"/> <Dictionary value="Dictionary_2"/> <XmlTraceToStdout value="1"/> </Consumer>
We also need to know the time when the OmmInvalidUsageException occurred. Therefore, we can verify if the exception occurred before or after the retrieval of the source directory mesage.
Yes, I'm using off-stream posting as described in that article. It works fine normally. However, the problem arises when the ADS gets bounced. I wait until I get the notification (via an onUpdateMsg with domain type MMT_DIRECTORY) that the RCC service is back up before I try submitting any new posts, but I still get the OmmInvalidUsageException as I described above.
So in summary:
1) I connect to RCC and submit posts without any problem.
2) ADS is taken down and started up again.
3) I wait until I know that RCC is available again.
4) I can no longer submit posts. Every time I do this, I get an OmmInvalidUsageException.
Let me know what else you need to know,
I am unable to replicate the problem.
I configured ADS to connect to RCC.
When the service is up, the example can connect to ADS and send a post message to RCC through ADS properly.
Then, I killed ADS. The example reported the following error.
loggerMsg TimeStamp: 13:57:08.152 ClientName: ChannelCallbackClient Severity: Warning Text: Received ChannelDownReconnecting event on channel Channel_1 Instance Name Consumer_1_1 RsslReactor 0x0000019C94EA04E0 RsslChannel 0x0000019C94EA04E0 Error Id -1 Internal sysError 10057 Error Location D:\Jenkins\workspace\ESDKCore_RCDEV\OS\VS141-64\rcdev\source\rtsdk\Cpp-C\Eta\Impl\Reactor\rsslReactorWorker.c:1241 Error Text <D:\Jenkins\workspace\ESDKCore_RCDEV\OS\VS141-64\rcdev\source\rtsdk\Cpp-C\Eta\Impl\Transport\rsslSocketTransportImpl.c:6068> Error: 1002 ipcConnecting() client connect() failed. System errno: (10057) loggerMsgEnd
Next, I restarted ADS.
The example can reconnect to ADS and contribute data when the service is up.
Please see the attached trace file.
You need to share the trace and exception so we can verify the problem.
I would like to see raw messages sent and received between the application and ADS. I need to verify the format of the source directory message retrieved by the application after the application reconnected to the server.
We can see this after enable tracing. It looks like this.
<refreshMsg domainType="RSSL_DMT_SOURCE" streamId="2" containerType="RSSL_DT_MAP" 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="5"> <key flags="0x8 (RSSL_MKF_HAS_FILTER)" filter="63"/> <dataBody> <map flags="0x0" countHint="0" keyPrimitiveType="RSSL_DT_UINT" containerType="RSSL_DT_FILTER_LIST" > </map> </dataBody> </refreshMsg> <!-- End Message (Channel IPC descriptor = 672) --> <!-- Incoming Message (Channel IPC descriptor = 672) --> <!-- Time: 13:57:23:217 --> <!-- rwfMajorVer="14" rwfMinorVer="1" --> <updateMsg domainType="RSSL_DMT_SOURCE" streamId="2" containerType="RSSL_DT_MAP" flags="0x80 (RSSL_UPMF_DO_NOT_CONFLATE)" updateType="0 (RDM_UPD_EVENT_TYPE_UNSPECIFIED)" dataSize="315"> <dataBody> <map flags="0x0" countHint="0" keyPrimitiveType="RSSL_DT_UINT" containerType="RSSL_DT_FILTER_LIST" > <mapEntry flags="0x0" action="RSSL_MPEA_ADD_ENTRY" key="10000" > <filterList containerType="RSSL_DT_ELEMENT_LIST" countHint="0" flags="0x0"> <filterEntry id="1" action="RSSL_FTEA_SET_ENTRY" flags="0x0" containerType="RSSL_DT_ELEMENT_LIST"> <elementList flags="0x8 (RSSL_ELF_HAS_STANDARD_DATA)"> <elementEntry name="Name" dataType="RSSL_DT_ASCII_STRING" data="DDS_TRCE"/> <elementEntry name="SupportsQoSRange" dataType="RSSL_DT_UINT" data="0"/> <elementEntry name="QoS" dataType="RSSL_DT_ARRAY"> <array itemLength="0" primitiveType="RSSL_DT_QOS"> <arrayEntry qosDynamic="0" qosRate="1" qosTimeliness="1"/> </array> </elementEntry> <elementEntry name="Capabilities" dataType="RSSL_DT_ARRAY"> <array itemLength="1" primitiveType="RSSL_DT_UINT"> <arrayEntry data="5"/> <arrayEntry data="6"/> <arrayEntry data="10"/> <arrayEntry data="127"/> </array>
Please make sure that you set the XmlTraceToStdout configuration in the correct consumer. Moreover, if your application doesn't use the standard output, you can use the XmlTraceToFile configuration instead.
With this configuration, the EmaTrace_xxx.xml file will be created.
I found that you are an RDC subscriber so you can contact the RDC support team via Contact Premium Support at Refinitiv Real-Time SDK - C/C++.
I've uploaded the XML trace files from the time of the ADS break. The ADS went down at 09:17:42 GMT and came back up at 09:18:09. Let me know if you need anything else.
UPDATE: I can't upload the XML files as they are not permitted. Where can I send them to?
Hello @jon113 and all,
Conveying the resolution from the investigation case:
"According to the error below, it seems that the machine lacks of redhat-lsb-core.x86_64 package, please install the package. Then, follow all steps again."
was successful. Awaiting the confirmation from the customer on no further issues.