Session Layer - Resend Request
Resend Request logic is the FIX session mechanism by which a given system, upon detecting a higher than expected message sequence number from its counterparty, requests a range of ordered messages resent from the counterparty. The counterparty resends the requested message range sequentially until both systems are back in sequence. Â
Customers must wait for in-flight resend requests to be fulfilled before logging out or failing over to the backup gateway.
For each resend request, it is required that the client system cannot request more than 2500 messages. If the missing messages exceed this value, the client systems can submit multiple resend requests. Only one resend request will be processed at a time. New Resend request received while already processing a resend request will be rejected
The following topics discuss the Session Layer Resend Request:
Basic Versus Enhanced Resend LogicÂ
For resend requests on CME Globex, two types of resend logic are currently supported:
Important
Basic FIX Resend Logic - standard FIX protocol resend request logic, which is NOT RECOMMENDED.
Enhanced CME Globex Resend Logic - additional resend logic beyond that defined in the FIX protocol to facilitate rapid recovery in high transaction-per-second (TPS) scenarios which is HIGHLY RECOMMENDED.
Basic resend logic as defined by the FIX protocol will fail in the scenario in which, once a gap is detected and a resend request initiated, the counterparty continues to send incrementally out-of-sequence messages (known in FIX protocol as 'gap continuation'), each of which triggers another resend request. In high TPS situations, this will create a loop or hard disconnect.
Enhanced resend logic solves this problem by identifying any resend request sent in a 'gap continuation' scenario as a duplicate Resend Request which the counterparty can discard. Therefore a system implementing enhanced resend logic must observe the following rules:
A newly detected message sequence gap must be distinguished from a continuation of a gap and a new gap versus a duplicate Resend Request must be issued accordingly.
When a message sequence number gap is newly detected (the sequence number received is greater than expected), issue a new Resend Request on its own sequence number. The requested sequence number range must be the next expected sequence number to infinity.
For each subsequent message that constitutes a continuation of the gap, issue a duplicate Resend Request. This message must be sent on the same message sequence number of the original Resend Request, tag 43-PossDupFlag must be set to 'Y' and tag 122-OrigSendingTime must not be sent.
The FIX Engine should detect receipt of the first message sent in response to a previous Resend Request and discontinue issuing the Resend Requests marked PossDup.
The FIX Engine should issue a new Resend Request, if needed, only after the receipt of the counterparty's response has been completed.
For resend requests from the Client System to CME Globex, both basic and enhanced resend logic are supported.
Basic Resend Logic from Client System to CME Globex
A description of basic FIX resend request logic is available at https://www.fixtrading.org/online-specification/business-area-infrastructure/.
In addition to the above, client applications implementing basic resend logic must adhere to the following:
Tag 122-OrigSendingTime, is required.
Tag 369-LastMsgSeqProcessed, is not allowed.
Client System Maximum Resend Request Limit
For each resend request, it is required that the client system cannot request more than 2500 messages. CME Group recommends that client systems request all missing messages. In response to the Resend Request from the client system, CME Group will send all non-administrative messages for the requested range.
If the client system exceeds this value, CME Globex sends a Session Level Reject (tag 35-MsgType=3) message. Tag 58-Text in this message will contain the following: "Range of messages to resend is greater than maximum allowed 2500."
Enhanced Resend Request + Gap Fill
The following example illustrates the use of the Gap Fill message during resend processing. The iLink 2 Sequence Reset message is identified as a Gap Fill by tag 123-GapFillFlag equal to 'Y'.
During normal resend processing, the Sequence Reset - Gap Fill message is used when the sending application chooses not to resend specific messages, for example stale orders or administrative messages.
Enhanced Resend Request from Client System to CME Globex
The following example illustrates the message flow for an enhanced logic resend request. All messages that do not explicitly define the message type are assumed to be business messages.
The message sent by CME Globex has tag 34-MsgSeqNum=11 and is higher than the client system is expecting.
The client system responds with a iLink 2 Resend Request with tag 7-BeginSeqNo=10 and tag 16-EndSeqNo=0 indicating infinity.
Before CME Globex receives the Resend Request, it has already sent messages 12 and 13.
When the client system receives messages 12 and 13, the absence of the tag 122-OrigSendingTime and tag 369-LastMsgSeqNumProcessed = 199 indicates that messages 12 and 13 are not the resend responses it is expecting.
The client system, therefore, issues duplicate Resend Requests with tag 43-PossDupFlag=Y.
When CME Globex receives the original Resend Request, it processes it by re-sending messages 10 - 13 with tag 43-PossDupFlag =Y and tag 122-OrigSendingTime tag populated.
Since the subsequent Resend Requests were sent as duplicates with tag 43-PossDupFlag=Y and CME Globex has already processed the original message, per the FIX Protocol, CME Globex ignores the duplicate Resend Requests.
Resend Logic from CME Globex to Client System
Resend behavior from CME Globex to Client System interleaves real-time messages with resend responses. This model ensures real-time information is delivered to the customer as quickly as possible. Customers must be able to receive out-of-sequence messages during a Resend Response without triggering another Resend Request.
Example
Time | From Client System to CME Globex | From CME Globex to Client System | tag 35-MsgType | tag 34-MsgSeqNum | tag 49-SenderCompID | tag 50-SenderSubID | tag 57-TargetSubID | tag 7-BeginSeqNo | tag 16-EndSeqNo | tag 36-NewSeqNo | tag 43-PossDupFlag | tag 123-GapFillFlag |
---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | Execution Report | 8 | 100 | CME | 68 | ATS | — | — | — | — | — | |
2 | Resend Request | 2 | 200 | ZUB007N | ATS | 68 | 98 | 0 | — | — | — | |
3 | Execution Report | 8 | 98 | CME | 68 | ATS | — | — | — | Y | — | |
4 | Execution Report | 8 | 99 | CME | 68 | ATS | — | — | — | Y | — | |
5 | Execution Report | 8 | 101 | CME | 68 | ATS | — | — | — | — | — | |
6 | Execution Report | 8 | 100 | CME | 68 | ATS | — | — | — | Y | — | |
7 | Heartbeat | 0 | 102 | CME | 68 | ATS | — | — | — | — | — |
How was your Client Systems Wiki Experience? Submit Feedback
Copyright © 2024 CME Group Inc. All rights reserved.