We have a Linux consumer application based on RFA SDK version 8.2.5.L3 running at customer site. The application has an RFA session configured with multiple connections, where each connection provides a different set of services.
In section 3.4.6 Login to Session with Multiple Connections of RFA C++ RDM Usage Guide, it details how the login response is aggregated for multiple connections. But there is no documentation on how directory responses should work across multiple connections, and this is where the issue is occurring.
I set up a test environment to replicate what is occurring at our customer site. I have set up the three providers using the testServer application 3.9.0.L1 connected to our consumer application using a single session.
\Sessions\ConsumerSession\connectionList = "Connection_1,Connection_2,Connection_3"
\Connections\Connection_1\connectionType = "RSSL"
\Connections\Connection_1\serverList = "10.0.0.5:14001"
\Connections\Connection_2\connectionType = "RSSL"
\Connections\Connection_2\serverList = "10.0.0.5:14002"
\Connections\Connection_3\connectionType = "RSSL"
\Connections\Connection_3\serverList = "10.0.0.5:14003"
Below is an extract of the logs from our consumer application with comments:
Send MMT_LOGIN request
OMMConsumerClient::requestLogin: User:guest, Position:10.49.88.152/net, ApplicationName:ITR64-OMM, ApplicationId:<None>, InstanceId:<None>. Subscription for login request returned handle [00000214DC59CD80]
Processing aggregated MMT_LOGIN response
processLoginResp: MsgModel:'Login'(1), RespType:Refresh(1), IndicationMask:'RefreshCompleteFlag '(0x8), HintMask:'RespTypeNum RespStatus AttribInfo '(0xb), Closure:0000000000000000, EventStreamClosed:N
processLoginResp: AttribInfo: dMask=0x0, hMask='NameFlag NameTypeFlag ' (0x26), Name='gust', NameType=1, ServiceName='<NotPresent>', ServiceID=<NotPresent>
processLoginResp: RespTypeNum:Refresh_Solicited(0)
processLoginResp: RespStatus: dataState='Suspect', streamState='Open', statusCode='None', statusText='All connections Pending', eventStreamClosed=N
Login stream is open/suspect
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Information: Config Tree for the RSSL_Cons_Adapter is not found, using default configuration (6000)
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Information: The RSSL_Cons_Adapter initialization succeeded (6001)
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Information: Using the following configuration for RSSL_Cons_Connection_Manager "Default::Connection_1": requestQueueReadThreshold = 1, watchListTableSize = 10007, requestTimeout = 45000, itemPostTimeout = 15000, payloadCacheEnabled = False, payloadCacheLoadFileDictionary = True, payloadCacheDictionaryName = RDMFieldDictionary, payloadCacheDictionaryPerService = False, serverList = { 10.0.0.5:14001 }, Connection capabilities: OMMM
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Warning: Batch request size may be limited due to throttling on RSSL_Cons_Connection "Default::Connection_1 10.0.0.5:14001" (6034)
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Information: Using the following configuration for RSSL_Cons_Connection "Default::Connection_1 10.0.0.5:14001": hostName = "10.0.0.5", rsslPort = "14001", interfaceName = "localhost", compressionType = 0, channelBlocking = false, recvBufSize = 65535, sendBufSize = 65535, writeBufferMaxFragmentLength = 6144, connectionWaitTimeout = 30000, connectionPingTimeout = 30000, guaranteedOutputBuffers = 400, numInputBuffers = 20, tcp_nodela
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Information: Using the following configuration for RSSL_Cons_Connection_Manager "Default::Connection_2": requestQueueReadThreshold = 1, watchListTableSize = 10007, requestTimeout = 45000, itemPostTimeout = 15000, payloadCacheEnabled = False, payloadCacheLoadFileDictionary = True, payloadCacheDictionaryName = RDMFieldDictionary, payloadCacheDictionaryPerService = False, serverList = { 10.0.0.5:14002 }, Connection capabilities: OMMMs
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Warning: Batch request size may be limited due to throttling on RSSL_Cons_Connection "Default::Connection_2 10.0.0.5:14002" (6034)
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Information: Using the following configuration for RSSL_Cons_Connection "Default::Connection_2 10.0.0.5:14002": hostName = "10.0.0.5", rsslPort = "14002", interfaceName = "localhost", compressionType = 0, channelBlocking = false, recvBufSize = 65535, sendBufSize = 65535, writeBufferMaxFragmentLength = 6144, connectionWaitTimeout = 30000, connectionPingTimeout = 30000, guaranteedOutputBuffers = 400, numInputBuffers = 20, tcp_nodelay
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Information: Using the following configuration for RSSL_Cons_Connection_Manager "Default::Connection_3": requestQueueReadThreshold = 1, watchListTableSize = 10007, requestTimeout = 45000, itemPostTimeout = 15000, payloadCacheEnabled = False, payloadCacheLoadFileDictionary = True, payloadCacheDictionaryName = RDMFieldDictionary, payloadCacheDictionaryPerService = False, serverList = { 10.0.0.5:14003 }, Connection capabilities: OMMMs
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Warning: Batch request size may be limited due to throttling on RSSL_Cons_Connection "Default::Connection_3 10.0.0.5:14003" (6034)
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Information: Using the following configuration for RSSL_Cons_Connection "Default::Connection_3 10.0.0.5:14003": hostName = "10.0.0.5", rsslPort = "14003", interfaceName = "localhost", compressionType = 0, channelBlocking = false, recvBufSize = 65535, sendBufSize = 65535, writeBufferMaxFragmentLength = 6144, connectionWaitTimeout = 30000, connectionPingTimeout = 30000, guaranteedOutputBuffers = 400, numInputBuffers = 20, tcp_nodelay
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Information: RSSL channel init in progress for connection "Default::Connection_1 10.0.0.5:14001". (10125)
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Information: RSSL channel init in progress for connection "Default::Connection_2 10.0.0.5:14002". (10125)
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Information: RSSL channel init in progress for connection "Default::Connection_3 10.0.0.5:14003". (10125)
RFA API connected to Connection_2
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Information: RSSL channel connected for connection "Default::Connection_2 10.0.0.5:14002". (10102)
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Information: RSSL channel connected with "Requested version: 14.1, Connected version: 14.1" for connection "Default::Connection_2 10.0.0.5:14002". (10134)
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Information: RSSL channel on connection "Default::Connection_2 10.0.0.5:14002" has negotiated ping timeout set to: 30000 (10104)
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Information: Connection Status Changed, RSSL_Cons_Connection "Default::Connection_2 10.0.0.5:14002" State: "Up" StatusCode: "None" StatusText: Connection up (6015)
RFA API connected to Connection_3
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Information: RSSL channel connected for connection "Default::Connection_3 10.0.0.5:14003". (10102)
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Information: RSSL channel connected with "Requested version: 14.1, Connected version: 14.1" for connection "Default::Connection_3 10.0.0.5:14003". (10134)
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Information: RSSL channel on connection "Default::Connection_3 10.0.0.5:14003" has negotiated ping timeout set to: 30000 (10104)
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Information: Connection Status Changed, RSSL_Cons_Connection "Default::Connection_3 10.0.0.5:14003" State: "Up" StatusCode: "None" StatusText: Connection up (6015)
Connection event received for Connection_2
processOMMConnectionEvent: ConnectionName:'Connection_2' Host:10.0.0.5, Port:14002, ComponentVersion:'testserver3.9.0.L1.linux.rrg 64-bit', State:Up(1), StatusCode:None(1), StatusText:'Connection up'
processOMMConnectionEvent: Connection is UP
RFA API receives MMT_LOGIN response for Connection_2
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Warning: Login Response AppID and Position do not match Login request AppID and Position (1011)
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Warning: Connection "Connection_2" does not support views. View requests will be converted to full item requests for this connection. (1013)
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Warning: Connection "Connection_2" does not support Pause/Resume. Pause and Resume requests for this connection will be ignored. (1015)
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Warning: Connection "Connection_2" does not support optimized Pause/Resume. Optimized Pause/Resume requests will be converted to individual item Pause/Resume requests for this connection. (1016)
Processing aggregated MMT_LOGIN response
processLoginResp: MsgModel:'Login'(1), RespType:Status(2), IndicationMask:''(0x0), HintMask:'RespStatus '(0x2), Closure:0000000000000000, EventStreamClosed:N
processLoginResp: RespStatus: dataState='Ok', streamState='Open', statusCode='None', statusText='Login accepted by host krypton.'
processLoginResp: RespStatus: dataState='Ok', streamState='Open', statusCode='None', statusText='Login accepted by host krypton.', eventStreamClosed=N
processLoginResp: Login accepted
Send MMT_DIRECTORY request
requestDirectory: Request for directory returned handle [00000214DC59DD70]
RFA API connected to Connection_1
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Information: RSSL channel connected for connection "Default::Connection_1 10.0.0.5:14001". (10102)
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Information: RSSL channel connected with "Requested version: 14.1, Connected version: 14.1" for connection "Default::Connection_1 10.0.0.5:14001". (10134)
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Information: RSSL channel on connection "Default::Connection_1 10.0.0.5:14001" has negotiated ping timeout set to: 30000 (10104)
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Information: Connection Status Changed, RSSL_Cons_Connection "Default::Connection_1 10.0.0.5:14001" State: "Up" StatusCode: "None" StatusText: Connection up (6015)
Connection event received for Connection_3
processOMMConnectionEvent: ConnectionName:'Connection_3' Host:10.0.0.5, Port:14003, ComponentVersion:'testserver3.9.0.L1.linux.rrg 64-bit', State:Up(1), StatusCode:None(1), StatusText:'Connection up'
RFA API receives MMT_LOGIN response for Connection_3
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Warning: Login Response AppID and Position do not match Login request AppID and Position (1011)
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Warning: Connection "Connection_3" does not support views. View requests will be converted to full item requests for this connection. (1013)
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Warning: Connection "Connection_3" does not support Pause/Resume. Pause and Resume requests for this connection will be ignored. (1015)
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Warning: Connection "Connection_3" does not support optimized Pause/Resume. Optimized Pause/Resume requests will be converted to individual item Pause/Resume requests for this connection. (1016)
Process MMT_DIRECTORY Refresh response
processDirectoryResp: MsgModel:'Directory'(4), RespType:Refresh(1), IndicationMask:'ClearCache RefreshCompleteFlag '(0xc), HintMask:'RespTypeNum RespStatus AttribInfo Manifest Payload '(0x5b), Closure:0000000000000000, EventStreamClosed:N
processDirectoryResp: AttribInfo: dMask=0x2b, hMask='' (0x1), Name='<NotPresent>', NameType=<NotPresent>, ServiceName='<NotPresent>', ServiceID=<NotPresent>
processDirectoryResp: RespTypeNum:Refresh_Solicited(0)
processDirectoryResp: RespStatus: dataState='Ok', streamState='Open', statusCode='None', statusText='Request Complete'
processDirectoryResp: Manifest: hMask='Group ' (0x4), seqNum=0, partNum=0
clearServices: clearing all services
processDirectoryRespStatus: RespStatus: dataState='Ok' streamState='Open' statusCode='None' statusText='Request Complete', eventStreamClosed=N, hasHandle=Y
ServiceEntry::decodeServiceStateData(): Service [SERVICE2] decoded AcceptingRequests [Yes]
ServiceEntry::decodeServiceStateData(): Service [SERVICE2] decoded ServiceState [Up]
Connection event received for Connection_1
processOMMConnectionEvent: ConnectionName:'Connection_1' Host:10.0.0.5, Port:14001, ComponentVersion:'testserver3.9.0.L1.linux.rrg 64-bit', State:Up(1), StatusCode:None(1), StatusText:'Connection up'
RFA API receives MMT_LOGIN response for Connection_1
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Warning: Login Response AppID and Position do not match Login request AppID and Position (1011)
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Warning: Connection "Connection_1" does not support views. View requests will be converted to full item requests for this connection. (1013)
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Warning: Connection "Connection_1" does not support Pause/Resume. Pause and Resume requests for this connection will be ignored. (1015)
[Static]: [Mon Jan 19 01:40:59 2026]: (ComponentName) Static: (Severity) Warning: Connection "Connection_1" does not support optimized Pause/Resume. Optimized Pause/Resume requests will be converted to individual item Pause/Resume requests for this connection. (1016)
Process MMT_DIRECTORY Refresh response
processDirectoryResp: MsgModel:'Directory'(4), RespType:Refresh(1), IndicationMask:'ClearCache RefreshCompleteFlag '(0xc), HintMask:'RespTypeNum RespStatus AttribInfo Manifest Payload '(0x5b), Closure:0000000000000000, EventStreamClosed:N
processDirectoryResp: AttribInfo: dMask=0x2b, hMask='' (0x1), Name='<NotPresent>', NameType=<NotPresent>, ServiceName='<NotPresent>', ServiceID=<NotPresent>
processDirectoryResp: RespTypeNum:Refresh_Solicited(0)
processDirectoryResp: RespStatus: dataState='Ok', streamState='Open', statusCode='None', statusText='Request Complete'
processDirectoryResp: Manifest: hMask='Group ' (0x4), seqNum=0, partNum=0
clearServices: clearing all services
processDirectoryRespStatus: RespStatus: dataState='Ok' streamState='Open' statusCode='None' statusText='Request Complete', eventStreamClosed=N, hasHandle=Y
ServiceEntry::decodeServiceStateData(): Service [SERVICE3] decoded AcceptingRequests [Yes]
ServiceEntry::decodeServiceStateData(): Service [SERVICE3] decoded ServiceState [Up]
Process MMT_DIRECTORY Update response
processDirectoryResp: MsgModel:'Directory'(4), RespType:Update(3), IndicationMask:'DoNotCache DoNotFilter DoNotRippleFlag '(0x13), HintMask:'RespTypeNum Payload '(0x41), Closure:0000000000000000, EventStreamClosed:N
processDirectoryResp: RespTypeNum:UNSPECIFIED(0)
ServiceEntry::decodeServiceStateData(): Service [SERVICE1] decoded ServiceState [Up]
ServiceEntry::decodeServiceStateData(): Service [SERVICE1] decoded AcceptingRequests [Yes]
ServiceEntry::decodeServiceStateData(): Service [SERVICE1] decoded Status {dataState:Ok streamState:Open statusCode:None statusText:'Up'}
The problem is that two MMT_DIRECTORY Refresh responses are received by our application followed by a MMT_DIRECTORY Update response. The first refresh contains information for service SERVICE2. The second refresh causes our application to clear existing service information as its both a refresh and clear flag is set. Should this second refresh response be an update response instead? Eventhough is may have been received as an MMT_DIRECTORY Refresh response by the RFA API from Connection_3 it should be forwarded to the application as an MMT_DIRECTORY Update response.