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 ?