Re: [Quickfix-developers] [Quickfix-developers]
Brought to you by:
orenmnero
From: Joerg T. <Joe...@ma...> - 2004-04-19 14:13:23
|
Oren Miller wrote: > Yeah, if a message fails basic validation, you will get infinite > resend requests. There isn't much that you can do about this. If a > message fails validation, the protocol says that the message must be > ignored. Meaning to treat it like it never happened. So of course > sequence numbers do not get incremented. FIX is designed to process > all messages in the correct order. Passing over a message and going > to the next one would violate this. Rejects really should only occur > during testing. If you ever see a session level reject during > production, you should re-certify with your counter-party. It > basically means your connection is broken and needs to be addressed. Hi Oren, we had several issues with such Resend-loops due to invalid message. Our customer quoted the following lines from the FIX spec: > Reject (session-level) -The reject message should be issued when a > message is received but cannot be properly processed due to a > session-level rule violation. An example of when a reject may be > appropriate would be the receipt of a message with invalid basic data > (e.g. MsgType=&) which successfully passes de-encryption, CheckSum > and BodyLength checks . As a rule, messages should be forwarded to > the trading application for business level rejections whenever > possible. > > Rejected messages should be logged and the incoming sequence number > incremented. > > Note: The receiving application should disregard any message that is > garbled, cannot be parsed or fails a data integrity check. Processing > of the next valid FIX message will cause detection of a sequence gap > and a Resend Request will be generated. Logic should be included in > the FIX engine to recognize the possible infinite resend loop, which > may be encountered in this situation . > > Generation and receipt of a Reject message indicates a serious error > that may be the result of faulty logic in either the sending or > receiving application. > > If the sending application chooses to retransmit the rejected > message, it should be assigned a new sequence number and sent with > PossResend=Y. According to this, a SessionReject should be generated in every possible case. IMHO, the description "any message that is garbled, cannot be parsed or fails a data integrity check" should should been seen as narrow as possible. If cannot even identify the sequence number, you cannot do much about it, but if you have a complete message where only one field is badly formatted, a session-level reject is much more helpful. This is basically the same as for the Logout, which should be send if every possible case. The QF 1.4.1 will do that, and that is very good. In addition, a more detailed event log would be very helpful. Currently some messages or connection attempts are silently ignored. A message of the style "Disconnected since sequence number nnn too low" is an example of that. Cheers, Jörg -- Joerg Thoennes http://macd.com Tel.: +49 (0)241 44597-24 Macdonald Associates GmbH Fax : +49 (0)241 44597-10 Lothringer Str. 52, D-52070 Aachen |