[QFJ-521] Support use of partial session ID for routing purposes Created: 10/May/10  Updated: 09/Jun/11

Status: Reopened
Project: QuickFIX/J
Component/s: Engine
Affects Version/s: 1.3.1, 1.3.2, 1.3.3, 1.4.0
Fix Version/s: None

Type: New Feature Priority: Default
Reporter: Rhys Yarranton Assignee: Grant Birchmeier
Resolution: Unresolved Votes: 1
Labels: None

Attachments: Text File diff3.txt    

 Description   

QFJ-272/1.3.1 added several fields to SessionID (SenderSubID, TargetSubID, SenderLocationID). These fields will be populated in MessageUtils.getReverseSessionID(...) if they are set in the Login message. They then form part of the session look-up in AbstractSocketAcceptor.StaticAcceptorSessionProvider.

In 1.2.1 and below, MessageUtils.getReverseSessionID included only the comp IDs, not the sub-IDs and SenderLocationID.

This breaks us in two ways. One is that we have been configuring our sessions by the comp IDs, which works well with the 1.2.1 code but mismatches with the 1.3.1+ code even if both sides get all their IDs right.

The other, and more important, is that several of our customer gateways will vary the SenderSubID and/or TargetSubID. For example, the FIX spec describes SenderSubID as being useful to distinguish between traders, and that messages not intended for a particular trader may optionally be flagged as ADMIN. It seems to me that the changes in QFJ-272 have resulted in a restrictions/obstacles beyond what was really intended by the spec, and certainly beyond what our customers will handle.

Fortunately there is a mechanism to provide your own AcceptorSessionProvider, which can be used to work around this issue. That said, the default behaviour is not ideal. Attached is a patch to replace StaticAcceptorSessionProvider with a new class, DefaultAcceptorProvider, which first tries a "strict" 1.3.1-style lookup, and if it fails, tries a 1.2.1-style lookup based on the Comp IDs only.

If the maintainers have an objection to the patch, I would suggest at the least that something like DefaultAcceptorProvider (plus instructions) be included in the distribution for those who cannot use StaticAcceptorSessionProvider.



 Comments   
Comment by Steve Bate [ 10/May/10 ]

The specifications include subID and locationID in information such as DeliverTo and OnBehalfOf, which are used for session routing. A route endpoint in this case is identified by CompID/SubID/LocationID in the originator sessionID and in the third-party routing cases. As you mentioned, I have seen the specification describe senderSubID as being useful to distinquish between traders, but this appears to me to still be in the context of message routing to a specific trader (or trading desk) within a broader organization (represented by the compID). Every counterparty I've worked with that used subIDs have used them for session identification and routing.

That said, from what I've seen on the FPL forums there was confusion in FIX 4.2 and before about the use of session ID fields for non-routing purposes. In FIX 4.3 and later, the Parties component is recommended for identifying traders outside the context of message routing.

I'm not the only one making the decision, but I'm open to to a feature that optionally ignores parts of the session ID for routing purposes.

Comment by Grant Birchmeier [ 19/Jul/10 ]

I am having similar issues as Rhys.

While reading the 4.4 spec to puzzle out my issues, I could not find where it says that SubID and LocationID should be used for anything substantial, let alone for message routing or session identification. Like Rhys, I'm not sure QFJ-272 is a correct interpretation. Such a change is not present in the latest QF/C++.

For now I'm integrating Rhys' patch into our local QF/J build, and being able to ignore the QFJ-272 additions is quite important for my company's usage.

Comment by Grant Birchmeier [ 19/Jul/10 ]

To integrate this patch into r958, DefaultAcceptorSessionProvider::getSession() needs a slight update to match an updated AcceptorSessionProvider interface:

  • public Session getSession(SessionID sessionID)
    + public Session getSession(SessionID sessionID, SessionConnector ignored)
Comment by Grant Birchmeier [ 12/Apr/11 ]

Committed to 1015

Comment by Jörg Thönnes [ 09/Jun/11 ]

Re-opening the issue to document the changes introduced
by this ticket.

IMHO, the handling of sub IDs and location IDs in QF/J deserves an extra section in the manual. There was some
ongoing discussion in the mailings lists and FPL forums
and it also not clear to me how QF/J handles this now.

Generated at Sun Apr 28 19:29:47 UTC 2024 using JIRA 7.5.2#75007-sha1:9f5725bb824792b3230a5d8716f0c13e296a3cae.