FIXP Use Cases

These use cases contain sample values for illustration purposes only.  

Contents

Initialization 

Session negotiation

Message Received

Message Sent

UUID

Timestamp

Request Timestamp

Client Flow

 Server Flow

HMAC Signature

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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.