question

Upvotes
54 5 4 8

Service ID not updated in RFA

During our infra restart, we regulaly have a trouble with a provider service ID:

  • When the provider started, it sent the directory with the service ID 1. The RFA log was:
<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="" dataState="RSSL_DATA_OK" streamState="RSSL_STREAM_OPEN" code="RSSL_SC_NONE" text="Directory"  dataSize="268">
    <key  flags="0x8 (RSSL_MKF_HAS_FILTER)"  filter="255"/>
    <dataBody>
        <map flags="0x8 (RSSL_MPF_HAS_TOTAL_COUNT_HINT)" countHint="0" keyPrimitiveType="RSSL_DT_UINT" containerType="RSSL_DT_FILTER_LIST" >
            <mapEntry flags="0x0" action="RSSL_MPEA_ADD_ENTRY" key="1" >
                <filterList containerType="RSSL_DT_ELEMENT_LIST" countHint="0" flags="0x2 (RSSL_FTF_HAS_TOTAL_COUNT_HINT)">
                  <!-- ... -->
                </filterList>
            </mapEntry>
        </map>
    </dataBody>
</refreshMsg>

with:

<mapEntry flags="0x0" action="RSSL_MPEA_ADD_ENTRY" key="1" >
  • After an infra restart, the provider sent again the directory and RFA updated the service ID from 1 to 0. The RFA log was:
<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="" dataState="RSSL_DATA_OK" streamState="RSSL_STREAM_OPEN" code="RSSL_SC_NONE" text="Directory"  dataSize="268">
   <key  flags="0x8 (RSSL_MKF_HAS_FILTER)"  filter="255"/>
    <dataBody>
        <map flags="0x8 (RSSL_MPF_HAS_TOTAL_COUNT_HINT)" countHint="0" keyPrimitiveType="RSSL_DT_UINT" containerType="RSSL_DT_FILTER_LIST" >
            <mapEntry flags="0x0" action="RSSL_MPEA_UPDATE_ENTRY" key="0" >
                <filterList containerType="RSSL_DT_ELEMENT_LIST" countHint="0" flags="0x2 (RSSL_FTF_HAS_TOTAL_COUNT_HINT)">
                  <!-- ... -->
                </filterList>
            </mapEntry>
        </map>
    </dataBody>
</refreshMsg>

with:

<mapEntry flags="0x0" action="RSSL_MPEA_UPDATE_ENTRY" key="0" >

The issue is that RFA didn't properly updated its map entry internally. The infra used the new service ID 0 (instead of 1) and RFA didn't understand the service 0 because it was still using the service 1. When a consumer tried to connect to the provider with the new service ID, we have a warning message like this:

[WARN ] From component 'Static' with log id '7019': [Sat Aug 04 18:15:48 2018]: (ComponentName) Static: (Severity) Warning: RSSL_Prov_Connection "Connection_SSLEDMP_RMDS" - Client Session Handle 498569344 - Request message received but service name could not be found for given source ID.  It is possible that the source directory has not yet been submitted. Ignoring request.

In the provider the request message didn't contain any service name:

reqMsg.getAttribInfo().getServiceName().c_str() is empty.

Do you know why the service ID is not properly updated within RFA ?

Do we need to implement something in the implementation for telling RFA that the service ID needs to be updated ?

treprfarfa-api
icon clock
10 |1500

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

Upvotes
7.6k 15 6 9

@mathias.montantin-ext

Are you using RFA C++ 8.1.0.L1?

I did a quick test using Provider_Interactive example from RFA C++ 8.1.0.L1 package with ADH in my lab. I have reconfigured the ADH to connecting to the Provider example and wait until it gets data and then kill the ADH process and restart it again but still unable to replicate the error message.

I have reviewed the RSSL tracing log from my test and found that the Provider publishes directory refresh with the same key value which is 1 like below sample.

<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="" dataState="RSSL_DATA_OK" streamState="RSSL_STREAM_OPEN" code="RSSL_SC_NONE" text="RequestCompleted"  dataSize="412">
    <key  flags="0x8 (RSSL_MKF_HAS_FILTER)"  filter="255"/>
    <dataBody>
        <map flags="0x8
(RSSL_MPF_HAS_TOTAL_COUNT_HINT)" countHint="0" keyPrimitiveType="RSSL_DT_UINT" containerType="RSSL_DT_FILTER_LIST" >
            <mapEntry flags="0x0" action="RSSL_MPEA_ADD_ENTRY" key="1" >
                <filterList containerType="RSSL_DT_ELEMENT_LIST" countHint="0" flags="0x2 (RSSL_FTF_HAS_TOTAL_COUNT_HINT)">
                    …
                </filterList>
            </mapEntry>
        </map>
    </dataBody>
</refreshMsg>
  • Are you using the same implementation with our Provider_Interactive example?
  • Is this possible to run the test with Provider_Interactive in your lab?

If you can replicate the issue with our example, can you please open a new support case and provide full RSSL tracing log along with RFA.log and please also provide steps to replicate the issue so that we can investigate the issue further.


But if you are unable to replicate the issue when using our example, you may need to compare your implementation with our Provider example.

icon clock
10 |1500

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

Upvotes
54 5 4 8

Yes I'm using RFA C++ 8.1.0.L1.

OK I will try to replicate with the sample, I'll give you a feedback.

Thanks for your reply.

Regards.

icon clock
10 |1500

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

Click below to post an Idea Post Idea