For a deeper look into our Elektron API, look into:

Overview |  Quickstart |  Documentation |  Downloads |  Tutorials |  Articles

question

Upvotes
Accepted
2 0 2 2

Can't submit updates to RCC following ADS connection break

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

rcc
icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

10 Answers

Upvotes
Accepted
62k 173 45 65

@jon113

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.

<XmlTraceToFile value="1"/>

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

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Please be informed that the issue has been fixed in RTSDK 2.0.5L1.

Upvotes
62k 173 45 65

@jon113

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.


icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes
2 0 2 2

Hi Jirapongse,

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,

Jon

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes
62k 173 45 65

@jon113

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.

trace.txt

You need to share the trace and exception so we can verify the problem.


trace.txt (25.4 KiB)
icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes
2 0 2 2

Hi Jirapongse,

Thanks for that - I'll arrange for the test to be reproduced with tracing on.

Jon

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes
2 0 2 2

Hi Jirapongse,

I've now run it with trace, and there doesn't seem to be any trace produced by the attempts to submit posts, so it looks like the SDK is stopping the submissions from going out. What would you like me to provide you with?

Jon

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes
2 0 2 2

Hi Jirapongse,

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?

Cheers,

Jon

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes
32.2k 40 11 19

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.

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Hi Zoya,


I've checked with the customer and this package is already installed, so that's not the cause of the problem.


Jon

Upvotes
18.9k 37 12 12

Hello @jon113

The issue has been fixed in RTSDK 2.0.5L1. Did you have a change to test it?

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes
2 0 2 2

Yes, the client is now happy that it works. Many thanks, Jon

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.