FIXP Use Cases
These use cases contain sample values for illustration purposes only. Â
Contents
- 1 InitializationÂ
- 2 Binding
- 3 UnBinding
- 4 Transferring
- 4.1 Sequence
- 4.2 Sequence (higher sequence number)
- 4.3 Sequence (lower sequence number)
- 4.4 Sequence (heartbeat)
- 4.5 Retransmission Request
- 4.6 Retransmission (Concurrent)
- 4.7 Retransmission (Interleaving)
- 4.8 Retransmission Reject (Invalid FromSeqNo)
- 4.9 Retransmission Reject (Invalid UUID)
- 4.10 Retransmission Reject (Request Limit Exceeded)
- 4.11 Retransmission Gap Fill
- 5 COD Scenarios
- 5.1 Salient Points
- 6 UUID Scenarios
InitializationÂ
Session negotiation
Message Received | Message Sent | UUID | Timestamp | Request Timestamp | Client Flow | Â Server Flow | HMAC Signature |
---|---|---|---|---|---|---|---|
Negotiate | 456 | T1 | -- | Idempotent | Â -- | Â 123 | |
 | NegotiationResponse | 456 | -- | T1 | -- |  Recoverable | -- |
Session negotiation (rejects)Â Bad HMAC Signature
For example – Valid HMAC Signature is 123 but Negotiate message is sent with HMAC Signature as 456 then it will be rejected.
Message Received | Message Sent | UUID | Timestamp | Request Timestamp | Client Flow | Â Code | HMAC Signature |
---|---|---|---|---|---|---|---|
Negotiate | 789 | T1 | -- | Idempotent | Â 456 | ||
 | NegotiationReject | 789 | -- | T1 | -- |  HMACNotAuthenticated |  -- |
Session negotiation (rejects) Invalid UUID
For example – PreviousUUID=456 and Negotiate is received with UUID=123 therefore since this is less than the previous UUID it will be rejected.
Message Received | Message Sent | UUID | Timestamp | Request Timestamp | Client Flow | Â Code | HMAC Signature |
---|---|---|---|---|---|---|---|
Negotiate | 123 | T1 | -- | Idempotent | Â -- | Â 123 | |
 | NegotiationReject | 123 | -- | T1 | -- | InvalidUUID |  -- |
NegotiationResponse or Reject Not Received
For example – the Negotiate message is neither accepted nor rejected and two times the KeepAliveInterval has lapsed then a new Negotiate message should be sent.
Message Received | Message Sent | UUID | Timestamp | Request Timestamp | Client Flow | Server Flow | HMAC Signature |
---|---|---|---|---|---|---|---|
Negotiate | 123 | T1 | -- | Recoverable | Â -- | Â 123 | |
<Two times the KeepAliveInterval has lapsed without any response> | |||||||
Negotiate | Â 123 | Â T3 | Â -- | Â Recoverable | Â -- | Â 123 | |
<Recommended KeepAliveInterval for CME to customer is 30 seconds> |
Binding
EstablishmentÂ
Message Received | Message Sent | UUID | Timestamp | Request Timestamp | Client Flow | Â Keep Alive Interval | Next Seq No | Server Flow | HMAC Signature |
---|---|---|---|---|---|---|---|---|---|
Negotiate | 123 | T1 | -- | Idempotent | Â -- | Â -- | Â -- | 456 | |
 | NegotiationResponse | 123 | -- | T1 | -- |  -- |  -- |  Recoverable | -- |
Establish | 123 | T2 | -- | -- | Â 10 | Â 1 | Â -- | 789 | |
EstablishmentAck | 123 | -- | T2 | -- | Â 30 (CME Interval) | Â 1 | Â -- | -- |
Termination (Unnegotiated)
For example – Trying to send an Establish message without first Negotiating the session will result in Termination.
Message Received | Message Sent | UUID | Timestamp | Request Timestamp | Code | Â Keep Alive Interval |
---|---|---|---|---|---|---|
Establish | 123 | T2 | -- | -- | Â 10 | |
Terminate | 123 | -- | T2 | Unnegotiated | Â --Â |
Termination (Already Established)
For example – Trying to send an Establish message when the session itself is already Negotiated and Established will result in Termination.
Message Received | Message Sent | UUID | Timestamp | Request Timestamp | Code | Â Keep Alive Interval |
---|---|---|---|---|---|---|
Negotiate | 123 | T1 | -- | -- | Â -- | |
 | Negotiation Response | 123 | -- | T1 | -- |  -- |
Establish | 123 | T2 | -- | -- | Â 10 | |
EstablishmentAck | 123 | -- | T2 | -- | Â 30Â (CME Interval) | |
Establish | 123 | T3 | -- | -- | Â 10 | |
Terminate | 123 | -- | T3 | AlreadyEstablished | Â -- |
Establishment Rejects (Double Establish)
For example – if a particular Session has sent an Establish message and without waiting for either EstablishmentAck or EstablishmentReject it sends another Establish then it will be Terminated.
Message Received | Message Sent | UUID | Timestamp | Request Timestamp | Code | Â Keep Alive Interval |
---|---|---|---|---|---|---|
Negotiate | 123 | T1 | -- | -- | Â -- | |
 | NegotiationResponse | 123 | -- | T1 | -- |  -- |
Establish | 123 | T2 | -- | -- | Â 10 | |
Establish | 123 | T3 | -- | -- | Â 10 | |
Terminate | 123 | -- | T3 | EstablishInProgress | Â -- |
Establishment Rejects (Bad HMAC Signature)
For example – valid HMAC Signature is 123 but Establishment message is sent with HMAC Signature as 456 then it will be rejected.Â
Message Received | Message Sent | UUID | Timestamp | Request Timestamp | Code | HMAC Signature |
---|---|---|---|---|---|---|
Negotiate | 789 | T1 | -- | -- | Â 012 | |
 | NegotiationResponse | 789 | -- | T1 | -- |  -- |
Establish | 789 | T2 | -- | -- | Â 456 | |
EstablishmentReject | 789 | -- | T2 | HMACNotAuthenticated | Â -- |
EstablishmentAck or Reject Not Received
For example – the Establish message is neither accepted nor rejected and two times the KeepAliveInterval has lapsed then a new Establish message is to be sent.
Message Received | Message Sent | UUID | Timestamp | Request Timestamp | Client Flow | Server Flow | Credentials | Keep Alive Interval |
---|---|---|---|---|---|---|---|---|
Negotiate | 123 | T1 | -- | Idempotent | -- | 123 | ||
NegotiationResponse | 123 | -- | T1 | -- | Recoverable | -- | ||
Establish | 123 | T2 | -- | -- | -- | -- | 5 | |
<Two times the KeepAliveInterval has lapsed without any response> | ||||||||
Establish | 123 | T3 | -- | -- | -- | -- | 5 | |
<New Establish message should contain same UUID> <Recommended KeepAliveInterval for CME to customer is 30 seconds> |
UnBinding
Ungraceful Termination (Time Out)
When two times the KeepAliveInterval has expired and no keep alive message is received then the FIXP session is terminated ungracefully and will need to be re-established. Termination due to error does not require the sender to wait for corresponding Terminate response from counterparty.
Message Received | Message Sent | UUID | Timestamp | Request Timestamp | Client Flow | Keep Alive Interval | Code |
---|---|---|---|---|---|---|---|
Negotiate | 123 | T1 | -- | Idempotent | Â -- | Â -- | |
 | NegotiationResponse | 123 | -- | T1 | -- |  -- |  -- |
Establish | 123 | T2 | -- | -- | Â 10 | Â -- | |
EstablishmentAck | 123 | -- | T2 | -- | Â 30Â (CME Interval) | Â -- | |
<Time interval greater than two times Keep Alive Interval has lapsed without any message being received> | |||||||
Terminate | 123 | -- | -- | -- | -- | KeepAliveIntervalLapsed | |
Establish | 123 | T3 | -- | -- | Â 10 | Â -- | |
EstablishmentAck | 123 | -- | T3 | -- | Â 30Â (CME Interval) | Â -- | |
<New Establish message should be sent with same UUID> |
Ungraceful Termination (sequence message received with lower sequence number)
The FIXP session could also be deliberately terminated due to Sequence message received with lower than expected sequence number and then it will need to be re-established. Termination due to error does not require the sender to wait for corresponding Terminate response from counterparty.
Message Received | Message Sent | UUID | Timestamp | Request Timestamp | Next Seq No | Client Flow | Server Flow | Code |
---|---|---|---|---|---|---|---|---|
Negotiate | 123 | T1 | -- | Â -- | Â Idempotent | -- | -- | |
 | NegotiationResponse | 123 | -- | T1 |  -- | Recoverable | -- | |
Establish | 123 | T2 | -- | Â 200 | Â -- | -- | -- | |
EstablishmentAck | 123 | -- | T2 | Â 1000 | Â -- | -- | -- | |
Sequence | 123 | -- | -- | Â 100 | Â -- | -- | -- | |
Terminate | 123 | -- | -- | Â -- | Â -- | -- | InvalidNextSeqNo | |
Establish | 123 | T4 | -- | Â 200 | Â Idempotent | -- | -- | |
EstablishmentAck | 123 | -- | T4 | Â 1001 | Â -- | Recoverable | -- | |
<New Establish message should be sent with same UUID> |
Ungraceful Termination (establish received with lower sequence number)
The session could also be deliberately terminated due to Establish message received with lower than expected next sequence number and then it will need to be re-established. Termination due to error does not require the sender to wait for corresponding Terminate response from counterparty.
Message Received | Message Sent | UUID | Timestamp | Request Timestamp | Next Seq No | Client Flow | Server Flow | Code |
---|---|---|---|---|---|---|---|---|
Negotiate | 123 | T1 | -- | Â -- | Â Idempotent | -- | -- | |
 | NegotiationResponse | -- | T1 |  -- | Recoverable | -- | ||
Establish | 123 | T2 | -- | Â 200 | Â -- | -- | -- | |
EstablishmentAck | 123 | -- | T2 | Â 1000 | Â -- | -- | -- | |
Sequence | -- | -- | -- | Â 100 | Â -- | -- | -- | |
Terminate | 123 | -- | -- | Â -- | Â -- | -- | InvalidNextSeqNo | |
Establish | 123 | T4 | -- | Â 100 | Â Idempotent | -- | -- | |
Terminate | 123 | -- | T4 | -- | Â -- | -- | InvalidNextSeqNo | |
<New Establish message should be sent with same UUID>Â Â |
Graceful Termination
Graceful termination is possible when there are no more messages to be sent for the time being and the TCP socket connection could be disconnected for now. This allows the sender to re-establish connectivity with the same session ID as before since the session was terminated by choice. Graceful termination (not due to error) does require the sender to wait for corresponding Terminate response from counterparty before disconnecting TCP socket connection.
Message Received | Message Sent | UUID | Timestamp | Request Timestamp | Next Seq No | Client Flow | Server Flow | Code |
---|---|---|---|---|---|---|---|---|
Negotiate | 123 | T1 | -- | Â -- | Â Idempotent | -- | -- | |
 | NegotiationResponse | 123 | -- | T1 |  -- | Recoverable | -- | |
Establish | 123 | T2 | -- | Â 200 | Â -- | -- | -- | |
EstablishmentAck | 123 | -- | T2 | Â 1000 | Â -- | -- | -- | |
Sequence | 123 | -- | -- | Â 201 | Â -- | -- | -- | |
Terminate | 123 | -- | -- | -- | -- | -- | Finished | |
Terminate | 123 | -- | -- | Â -- | Â -- | -- | Finished | |
<TCP socket connection is disconnected by CME> | ||||||||
Establish | 123 | T4 | -- | Â 201 | Â Idempotent | -- | -- | |
EstablishmentAck | 123 | -- | T4 | Â 1001 | Â -- | Recoverable | -- | |
<New Establish message should be sent with same UUID> |
Hard DisconnectÂ
When the transport level session itself (TCP socket) has been disconnected then the session needs to be Re-Established.
Message Received | Message Sent | UUID | Timestamp | Request Timestamp | Client Flow | Keep Alive Interval | Server Flow |
---|---|---|---|---|---|---|---|
Negotiate | 123 | T1 | -- | Idempotent | Â -- | Â -- | |
 | NegotiationResponse | 123 | -- | T1 | -- |  -- |  Recoverable |
Establish | 123 | T2 | -- | -- | Â 10 | Â -- | |
EstablishmentAck | 123 | -- | T2 | -- | Â 30 (CME Interval) | Â -- | |
<TCP socket connection is disconnected> | |||||||
Establish | 123 | T4 | -- | -- | Â 10 | Â -- | |
EstablishmentAck | 123 | -- | T4 | -- | Â 30 (CME Interval) | Â -- | |
<New Establish message should be sent with same UUID> |
Transferring
Sequence
Over TCP – a customer should send a Sequence message at the very beginning of the session upon establishment as a best practice.
Message Received | Message Sent | UUID | Timestamp | Request Timestamp | Next Seq No | Client Flow | Server Flow | Â Msg Seq No |
---|---|---|---|---|---|---|---|---|
Negotiate | 123 | T1 | -- | -- | Idempotent | Â -- | ||
 | NegotiationResponse | 123 | -- | T1 | -- | Recoverable |  -- | |
Establish | 123 | T2 | -- | 100 | Â -- | |||
 | EstablishmentAck | 123 | -- | T2 | 1000 |  -- | ||
Sequence | 123 | -- | -- | 100 | Â -- | |||
NewOrder Single | -- | T3 | -- | -- | -- | -- | Â 100 | |
ExecutionReport | 123 | T4 | -- | -- | -- | -- | Â 1000 |
Sequence (higher sequence number)
The Sequence, NegotiationResponse, EstablishmentAck and Retransmission messages convey sequence information. They communicate information about the UUID, PreviousUUID, PreviousSeqNo, NextSeqNo and FromSeqNo.
For example – here the second Sequence message is increasing the NextSeqNo even though it was sent as a keep alive message within a sequenced flow.
Message Received | Message Sent | UUID | Timestamp | Request Timestamp | Next Seq No | Msg Seq No | Client Flow | Server Flow | From Seq No | Â Count |
---|---|---|---|---|---|---|---|---|---|---|
Negotiate | 123 | T1 | -- | -- | Â -- | Idempotent | -- | Â -- | Â -- | |
 | NegotiationResponse | 123 | -- | T1 | -- |  -- | -- | Recoverable |  -- |  -- |
Establish | 123 | T2 | -- | 100 | Â -- | -- | -- | Â -- | Â -- | |
 | EstablishmentAck | 123 | -- | T2 | 1000 |  -- | -- | -- |  -- |  -- |
Sequence | 123 | -- | -- | 100 | Â -- | -- | -- | Â -- | Â -- | |
NewOrderSingle | -- | T3 | -- | -- | Â 100 | -- | -- | Â -- | Â -- | |
ExecutionReport | 123 | T4 | -- | -- | Â 1000 | -- | -- | Â -- | Â -- | |
Sequence | 123 | -- | -- | 200 | Â -- | -- | -- | Â -- | Â -- | |
NewOrderSingle | -- | T5 | -- | -- | Â 200 | -- | -- | Â -- | Â -- | |
ExecutionReport | 123 | T6 | -- | -- | Â 1001 | -- | -- | Â -- | Â -- |
Sequence (lower sequence number)
This is an example of a Sequence message being sent with a lower than expected NextSeqNo value even though it was sent as a keep alive message within a sequenced flow.
Message Received | Message Sent | UUID | Timestamp | Request Timestamp | Next Seq No | Implicit Seq No | Client Flow | Server Flow | Â Code |
---|---|---|---|---|---|---|---|---|---|
Negotiate | 123 | T1 | -- | -- | Â -- | Idempotent | -- | Â -- | |
 | NegotiationResponse | 123 | -- | T1 | -- |  -- | -- | Recoverable |  -- |
Establish | 123 | T2 | -- | 100 | Â -- | -- | -- | Â -- | |
 | EstablishmentAck | 123 | -- | T2 | 1000 |  -- | -- | -- |  -- |
Sequence | 123 | -- | -- | 100 | Â -- | -- | -- | Â -- | |
NewOrderSingle | -- | T3 | -- | -- | Â 100 | -- | -- | Â -- | |
ExecutionReport | 123 | T4 | -- | -- | Â 1000 | -- | -- | Â -- | |
Sequence | 123 | -- | -- | 50 | Â -- | -- | -- | Â -- | |
Terminate | 123 | -- | -- | -- | Â -- | -- | -- | Â InvalidNextSeqNo |
Sequence (heartbeat)
The Sequence message should also be used as a heartbeat for idempotent and recoverable flows.
Message Received | Message Sent | UUID | Timestamp | Request Timestamp | Next Seq No | Client Flow | Server Flow | Keep Alive Interval |
---|---|---|---|---|---|---|---|---|
Negotiate | 123 | T1 | -- | -- | Idempotent | -- | -- | |
 | Negotiation Response | 123 | -- | T1 | -- | Recoverable | -- | |
Establish | 123 | T2 | -- | 100 | -- | -- | 10 | |
 | EstablishmentAck | 123 | -- | T2 | 1000 | -- | -- | 30 (CME Interval) |
Sequence | 123 | -- (T2+10) | -- | 100 | -- | -- | -- | |
Sequence | 123 | -- (T2+30) | -- | 1000 | -- | -- | -- | |
Sequence | 123 | -- (T2+20) | -- | 100 | -- | -- | -- | |
Sequence | 123 | -- (T2+60) | -- | 1000 | -- | -- | -- |
Retransmission Request
For recoverable flows, a Retransmission Request could be issued to recover gap in sequence numbers.
Message Received | Message Sent | UUID | Timestamp | Request Timestamp | Next Seq No | Msg Seq No | Client Flow | Server Flow | From Seq No | Count |
---|---|---|---|---|---|---|---|---|---|---|
Negotiate | 123 | T1 | -- | -- | Â -- | Idempotent | -- | Â -- | Â -- | |
 | NegotiationResponse | 123 | -- | T1 | -- |  -- | -- | Recoverable |  -- |  -- |
Establish | 123 | T2 | -- | 100 | Â -- | -- | -- | Â -- | Â -- | |
 | EstablishmentAck | 123 | -- | T2 | 1000 |  -- | -- | -- |  -- |  -- |
Sequence | 123 | -- | -- | 1000 | Â -- | -- | -- | Â -- | Â Â -- | |
ExecutionReport | 123 | T3 | -- | -- | Â 1100 | -- | -- | Â -- | Â -- | |
RetransmissionRequest | 123 | T4 | -- | -- | Â -- | -- | -- | Â 1000 | Â 100 | |
Retransmission | 123 | -- | T4 | 1000 | Â -- | -- | -- | Â -- | Â 100 | |
<100 messages between 1000 to 1099 are replayed and message number 1100 from Market Segment Gateway is queued for processing after Retransmission is satisfied> |
Retransmission (Concurrent)
More than one RetransmissionRequest is not allowed at a time and subsequent in-flight requests will lead to rejections.
Message Received | Message Sent | UUID | Timestamp | Request Timestamp | Next Seq No | Msg Seq No | Client Flow | Server Flow | From Seq No | Count |
---|---|---|---|---|---|---|---|---|---|---|
Negotiate | 123 | T1 | -- | -- | Â -- | Idempotent | -- | Â -- | Â -- | |
 | NegotiationResponse | 123 | -- | T1 | -- |  -- | -- | Recoverable |  -- |  -- |
Establish | 123 | T2 | -- | 100 | Â -- | -- | -- | Â -- | Â -- | |
EstablishmentAck | 123 | -- | T2 | 1000 | Â -- | -- | -- | Â -- | Â -- | |
Sequence | 123 | -- | -- | 1000 | Â -- | -- | -- | Â -- | Â -- | |
ExecutionReport | 123 | T3 | -- | -- | Â 1100 | -- | -- | Â -- | Â -- | |
RetransmissionRequest | 123 | T4 | -- | -- | Â -- | -- | -- | Â 1000 | Â 100 | |
Retransmission | 123 | -- | T4 | 1000 | Â -- | -- | -- | Â -- | Â 100 | |
<50 messages between 1000 and 1099 are replayed> | ||||||||||
RetransmissionRequest | 123 | T5 | -- | -- | Â -- | -- | -- | Â 1050 | Â 50 | |
RetransmitReject | 123 | -- | T5 | -- | -- | -- | -- | -- | -- | |
<RetransmitReject with Code=RetransmitAlreadyInProgress> |
Retransmission (Interleaving)
While responding back to a RetransmissionRequest it is possible that the exchange could interleave real time original messages with duplicate retransmission responses.
This interleaving could be detected based on the PossRetransFlag such that real time original messages will have PossRetransFlag=0 and replayed messages will have PossRetransFlag=1.
Message Received | Message Sent | UUID | Timestamp | Request Timestamp | Msg Seq No | PossRetransFlag | From Seq No | Count |
---|---|---|---|---|---|---|---|---|
RetransmissionRequest | 123 | T1 | -- | Â -- | -- | Â 1000 | 5 | |
Retransmission | 123 | -- | T1 | Â -- | -- | Â 1000 | 5 | |
ExecutionReport | 123 | -- | -- | 1000 | 1 | -- | -- | |
ExecutionReport | 123 | -- | -- | 2000 | 0 | -- | -- | |
ExecutionReport | 123 | -- | -- | 1001 | 1 | -- | -- | |
ExecutionReport | 123 | -- | -- | 2001 | 0 | -- | -- |
Retransmission Reject (Invalid FromSeqNo)
RetransmissionRequest could be rejected if the messages being requested (FromSeqNo) belong to an invalid sequence range i.e. greater than last sent sequence number from CME.
Message Received | Message Sent | UUID | Timestamp | Request Timestamp | Next Seq No | Code | From Seq No | Count |
---|---|---|---|---|---|---|---|---|
Negotiate | 123 | T1 | -- | -- | -- | Â -- | Â -- | |
 | NegotiationResponse | 123 | -- | T1 | -- | -- |  -- |  -- |
Establish | 123 | T2 | -- | 100 | -- | Â -- | Â -- | |
 | EstablishmentAck | 123 | -- | T2 | 1000 | -- |  -- |  -- |
Sequence | 123 | -- | -- | 1000 | -- | Â -- | Â -- | |
RetransmissionRequest | 123 | T3 | -- | -- | -- | Â 2000 | Â 100 | |
RetransmitReject | 123 | -- | T3 | -- | InvalidFromSeqNo | Â -- | Â -- | |
<Here FromSeqNo is greater than last value of NextSeqNo from CME> |
Retransmission Reject (OutOfRange)
RetransmissionRequest could be rejected if the messages being requested (FromSeqNo + Count) belong to an invalid sequence range i.e. greater than last sent sequence number from CME.
Message Received | Message Sent | UUID | Timestamp | Request Timestamp | Next Seq No | Code | From Seq No | Count |
---|---|---|---|---|---|---|---|---|
Negotiate | 123 | T1 | -- | -- | -- | Â -- | Â -- | |
 | NegotiationResponse | 123 | -- | T1 | -- | -- |  -- |  -- |
Establish | 123 | T2 | -- | 100 | -- | Â -- | Â -- | |
 | EstablishmentAck | 123 | -- | T2 | 1000 | -- |  -- |  -- |
Sequence | 123 | -- | -- | 1000 | -- | Â -- | Â -- | |
RetransmissionRequest | 123 | T3 | -- | -- | -- | Â 900 | 175 | |
RetransmitReject | 123 | -- | T3 | -- | OutOfRange | Â -- | Â -- | |
<Here FromSeqNo + Count is greater than last value of NextSeqNo from CME> |
Retransmission Reject (Invalid UUID)
RetransmissionRequest will be Terminated if the messages are being requested with a different UUID than the one currently being used (not PreviousUUID).
Message Received | Message Sent | UUID | Timestamp | Request Timestamp | Next Seq No | PreviousUUID | Code | From Seq No | Count |
---|---|---|---|---|---|---|---|---|---|
Negotiate | 123 | T1 | -- | -- | Â -- | -- | Â -- | Â -- | |
 | NegotiationResponse | 123 | -- | T1 | -- |  -- | -- |  -- |  -- |
Establish | 123 | T2 | -- | 100 | Â -- | -- | Â -- | Â -- | |
 | EstablishmentAck | 123 | -- | T2 | 1000 |  -- | -- |  -- |  -- |
Sequence | 123 | -- | -- | 1000 | Â -- | -- | Â -- | Â -- | |
RetransmissionRequest | 456 | T3 | -- | -- | Â -- | -- | 850 | 50 | |
Terminate | 456 | -- | T3 | -- | Â -- | InvalidUUID | Â -- | Â -- | |
<Here 456 is different from the current UUID 123> |
Retransmission Reject (Request Limit Exceeded)
RetransmissionRequest could be rejected if the messages being requested exceed the limit for allowable count in each request.
Message Received | Message Sent | UUID | Timestamp | Request Timestamp | Next Seq No | Code | From Seq No | Count |
---|---|---|---|---|---|---|---|---|
Negotiate | 123 | T1 | -- | -- | -- | Â -- | Â -- | |
NegotiationResponse | 123 | -- | T1 | -- | -- | Â -- | Â -- | |
Establish | 123 | T2 | -- | 100 | -- | Â -- | Â -- | |
EstablishmentAck | 123 | -- | T2 | 1000 | -- | Â -- | Â -- | |
Sequence | 123 | -- | -- | 1000 | -- | Â -- | Â -- | |
RetransmissionRequest | 123 | T3 | -- | -- | -- | 1 | 3999 | |
RetransmitReject | 123 | -- | T3 | -- | RequestLimitExceeded | Â -- | Â -- | |
<Here the RetransmisisonRequest was rejected due to the count of messages requested bring greater than what is supported by the sender> |
Retransmission Gap Fill
RetransmissionRequest asking to replay messages that are not available.
Message Received | Message Sent | UUID | Timestamp | Request Timestamp | Next Seq No | PreviousUUID | From Seq No | Count |
---|---|---|---|---|---|---|---|---|
Negotiate | 123 | T1 | -- | Â -- | -- | Â -- | -- | |
 | NegotiationResponse | 123 | -- | T1 |  -- | -- |  -- | -- |
Establish | 123 | T2 | -- | Â 200 | -- | Â -- | -- | |
EstablishmentAck | 123 | -- | T2 | Â 1000 | -- | Â -- | -- | |
RetransmitRequest | 123 | T3 | -- | Â -- | -- | Â 1 | 175 | |
Retransmission | 123 | -- | T3 | Â -- | -- | Â -- | -- | |
Sequence | 123 | -- | T3 | 1000 | -- | -- | -- | |
<Sequence message indicates that RetansmissionRequest has been processed and there were no messages available to replay> <This is an error condition which should be escalated> |
COD Scenarios
Given Primary MSGW State | Given Backup MSGW State | When | Then Primary MSGW Connection State | Then Backup MSGW Connection State |  Result |
---|---|---|---|---|---|
Negotiated & Established | Negotiated & Established | Disconnect from primary | Disconnected | Terminated | Disconnect from primary causes MSGW to terminate backup session as well. Resting quotes are cancelled and resting orders are also cancelled since Cancel On Disconnect is applicable as customer is out of the market No technical pause |
Negotiated & Established | Negotiated & Established | Disconnect from backup | Negotiated & Established | Disconnected | Does not affect primary and no quotes or orders are cancelled |
-- | -- | Negotiate & Establish on primary followed by Negotiate & Establish on backup | Negotiated & Established | Negotiated & Established  | Active-active fault tolerance First attempt to logon must be on the designated primary NextSeqNo from exchange will contain a number greater than zero on primary NextSeqNo from exchange will contain zero on backup |
-- | -- | Negotiate on backup | -- | Terminated | Backup MSGW will not accept the attempt to Negotiate since designated primary is available No quotes or orders are cancelled |
-- | -- | Negotiate & Establish on Primary | Negotiated & Established  | -- | No active-active fault tolerance |
Negotiated & Established  | Negotiated & Established  | Terminate from primary | Graceful Termination | Graceful Termination | Termination from primary causes MSGW to gracefully Terminate backup session as well (copy of Terminate response sent to primary will be sent to backup session also) Resting quotes will be cancelled Resting orders will not be cancelled as Cancel On Disconnect is not applicable in graceful termination No technical pause |
Negotiated & Established  | Negotiated & Established  | Exchange terminates primary | Termination | Termination | Termination on primary causes MSGW to Terminate backup session as well Resting quotes will be cancelled Resting orders will be cancelled since Termination is exchange initiated due to error condition so Cancel On Disconnect will be applicable No technical pause |
Negotiated & Established | Negotiated & Established | Primary MSGW fails | -- | Primary | Newly promoted primary will send a Sequence message with NextSeqNo being greater than zero No orders are cancelled since customer is not out of the market and Cancel On Disconnect is not applicable Match engine enters into technical pause which leads to cancellation of resting quotes followed by technical pre-open (with the exception of KRX product groups which transition directly from technical pause to open) |
Negotiated & Established | -- | Primary MSGW fails | -- | Primary | Newly promoted primary will not send a Sequence message since there is no backup session Resting orders are also cancelled since Cancel On Disconnect is applicable as customer is out of the market Match engine enters into technical pause which leads to cancellation of resting quotes followed by technical pre-open (with the exception of KRX product groups which transition directly from technical pause to open) |
Salient Points
Disconnect or logout could be both client initiated or exchange initiated
Disconnect or logout does not lead to failover – only MSGW process failure leads to failover
If customer is logged out or disconnects from primary then they are logged out from backup as well if applicable
UUID Scenarios
Serial No | iLink Session + Firm | Primary UUID | Backup UUID | Primary NextSeqNo | Backup NextSeqNo | Description |
---|---|---|---|---|---|---|
1 | ABC100 | 123 | -- | 100 | -- | Established on primary only without active-active fault tolerance |
1.a | ABC100 | -- | 123 | -- | 100 | Established on new primary with same UUID and sequence after old primary failed |
2 | ABC100 | 123 | 123 | 100 | 0 | Established on primary & backup with same UUID with active-active fault tolerance |
2.a | ABC100 | -- | 123 | -- | 100 | Already Established on new primary with same UUID and sequence after old primary failed |
3 | ABC100 | 123 | -- | 100 | 0 | Established on primary only without active-active fault tolerance |
3.a | ABC100 | -- | 456 | -- | 1 | Negotiated on new primary with different UUID and sequence stream got reset |
4 | ABC100 | 123 | -- | 100 | -- | Negotiated and Established on primary |
4.a | ABC100 | -- | 123/456 | -- | -- | Tries to Negotiate on backup with different UUID than primary or same UUID as primary and gets NegotiationReject |
How was your Client Systems Wiki Experience? Submit Feedback
Copyright © 2024 CME Group Inc. All rights reserved.