RMDS Subscription Issue

Hi We currently have a process which subscriber to ric based on user request. Request goes as below

Step 1 : User request for RIC : ABC FID : 1 -> Process would place a view requesting for RIC and FID 1 in response

Step 2 : User request for RIC : ABC FID : 2 -> Process would place a view requesting for RIC and FID 1 and 2 in response

Step 3 : User is not actively looking at the RIC : ABC anymore. Our process would deregister the subscription as there is no active interest.

Step 4 :User at later point expresses interest to look at RIC : ABC. We would then create a new Subscription requesting for FID 1, followed by FID 1 and 2.

We observed when we resubscribe for the ric in step 4, we dont get responses certain time.

Below is how we frame the request in both the cases

private static Triple<OMMPool, OMMEncoder ,OMMMsg> buildRecordSubMsg(RmdsRecordKey recordKey, Set<RField> keys) {
OMMEncoder encoder = subscriptionPool.acquireEncoder();
OMMMsg ricSubMsg = subscriptionPool.acquireMsg();
ricSubMsg.setMsgType(OMMMsg.MsgType.REQUEST);
ricSubMsg.setMsgModelType(RDMMsgTypes.MARKET_PRICE);
ricSubMsg.setPriority((byte) 1, 1);
ricSubMsg.setAttribInfo(recordKey.serviceName, recordKey.ric, RDMInstrument.NameType.RIC);
ricSubMsg = addView(ricSubMsg, keys, encoder);
return Triple.of(subscriptionPool, encoder, ricSubMsg);
}

private static OMMMsg addView(OMMMsg msg, Set<RField> keys, OMMEncoder encoder) {
return addView(msg, keys, encoder, null);
}
private static OMMMsg addView(OMMMsg msg, Set<RField> keys, OMMEncoder encoder, Integer indicationFlags) {
if (indicationFlags == null) {
msg.setIndicationFlags(OMMMsg.Indication.VIEW);
} else {
msg.setIndicationFlags(indicationFlags | OMMMsg.Indication.VIEW);
}
// @formatter:off
encoder.initialize(OMMTypes.MSG, 2000);
encoder.encodeMsgInit(msg, OMMTypes.NO_DATA, OMMTypes.ELEMENT_LIST);
encoder.encodeElementListInit(OMMElementList.HAS_STANDARD_DATA, (short) 0, (short) 0);
encoder.encodeElementEntryInit(RDMUser.View.ViewType, OMMTypes.UINT);
encoder.encodeUInt(RDMUser.View.FIELD_ID_LIST);
encoder.encodeElementEntryInit(RDMUser.View.ViewData, OMMTypes.ARRAY);
encoder.encodeArrayInit(OMMTypes.INT, 0);
Object[] rmdsKeys = keys.toArray();
for(Object key : rmdsKeys){
encoder.encodeArrayEntryInit();
encoder.encodeInt(((RField)key).id);
}
encoder.encodeAggregateComplete();
encoder.encodeAggregateComplete();
// @formatter:on
OMMMsg viewSubMsg = (OMMMsg) encoder.getEncodedObject();
return viewSubMsg;
}

Tagged:

Best Answer

  • prakash.chellappa
    Answer ✓

    Hi
    There was problem with the code on our side. Managed to resolve it on my side

    Thanks
    Prakash

Answers

  • Hi @prakash.chellappa

    What is the RFA Java version that encounters the problem?

    Can you replicate the issue on demand? If so, could you please enable the RFA trace file, replicate the issue and give us the RFA trace file when the problem occurs? The RFA trace file contains incoming/outgoing
    messages between the API and TREP server which will let us verify this issue in detail.

    You
    can configure the following RFA Java configurations to enable the log file

    • <namespace>/Connections/<Connection
      Name>/ipcTraceFlags = 7
    • <namespace>/
      Connections/<Connection Name>/mountTrace = True
    • <namespace>/
      Connections/<Connection Name>/logFileName=<path to log file>

    Example:

    <node name="rsslConnection">
    <map>
    <entry key="connectionType" value="RSSL"/>
    <entry key="serverList" value="localhost"/>
    <entry key="portNumber" value="14002"/>
    <entry key="ipcTraceFlags" value="7"/>
    <entry key="mountTrace " value="True"/>
    <entry key="logFileName" value=".\logs\RSSL_%U.log"/>
    </map>
    </node>