objectcomputing / quickfast

A C++ implementation of the FAST protocol.
Other
220 stars 81 forks source link

ERROR in CME incremental feed processing #111

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
I'm using quickfast v1.3 on linux and the following line in 
Codecs/FieldInstruction.h is being hit:

context.reportFatal("[ERR U03]", "End of file without stop bit decoding 
unsigned integer.", name);

Here's an example of the error printed (it doesn't always choke on the same 
field):
[ERR U03] End of file without stop bit decoding unsigned integer. Field: 
MDEntryTime
[ERR U03] Unexpected end of data decoding unsigned integer Field: NumberOfOrders

Any idea what might cause this?   The application was working fine all year 
until today.  CME has been making changes to their FIX/FAST protocol but I 
don't see any changes scheduled for this week.

Sequence of events:
The process starts, subscribes to the incremental feed and queues all updates, 
then subscribes to the snapshot feed and processes a complete cycle, then when 
it's processing the incremental feed it segfaults. However I just started a 
similar app with verbose logging and haven't seen the problem for awhile. 

Original issue reported on code.google.com by ja...@alphaworkscapital.com on 5 Nov 2012 at 1:59

GoogleCodeExporter commented 9 years ago
It seems the CME did have FIX/FAST changes scheduled for today.  The feed I'm 
consuming has certain field operators (copy, default, delta and increment) 
removed.  I have updated templates from them but I'm guessing quickfast is 
having trouble using them or perhaps I haven't configured quickfast properly.  
Any suggestions would be appreciated.

Original comment by ja...@alphaworkscapital.com on 5 Nov 2012 at 3:05

GoogleCodeExporter commented 9 years ago
I have quickfast configured as shown below.  Maybe something is wrong and 
causing the trouble?

Jason

    m_decoderConfig.reset(new QuickFAST::Application::DecoderConfiguration());

    state = "setting up templates file";
    verifyFileExists(m_templatesFile);
    m_decoderConfig->setTemplateFileName(m_templatesFile);

    state = "setting up multicast";
    m_decoderConfig->setReceiverType(DecoderConfiguration::MULTICAST_RECEIVER);
    m_decoderConfig->setMulticastGroupIP(m_multicastGroupIP);
    m_decoderConfig->setPortNumber(numeric_cast<unsigned short>(m_port));
    m_decoderConfig->setListenInterfaceIP("0.0.0.0");

    state = "setting up header processing";
    m_decoderConfig->setHeaderType(DecoderConfiguration::FIXED_HEADER);
    const size_t fixFastHeaderSize = 5;
    m_decoderConfig->setMessageHeaderMessageSizeBytes(fixFastHeaderSize);
    m_decoderConfig->setMessageHeaderPrefixCount(0);
    m_decoderConfig->setMessageHeaderSuffixCount(0);

    state = "creating DecoderConnection";
    m_decoderConn.reset(new DecoderConnection());

    state = "configuring DecoderConnection";
    m_decoderConn->configure(*m_messageBuilder, *m_decoderConfig);
    m_decoderConn->assembler().setReset(true);

    state = "running";
    m_decoderConn->receiver().runThreads(1, false);

Original comment by ja...@alphaworkscapital.com on 5 Nov 2012 at 3:34

GoogleCodeExporter commented 9 years ago
I was able to solve this issue by replacing the default 1400 buffer size with 
1500.  Rather than doing this programatically I simply used grep/sed on the 
source code before building it.  I don't fully understand how the buffers are 
used but 1500 is the MTU on ethernet so it seems safe.  Hopefully that helps 
someone.

Jason

Original comment by ja...@alphaworkscapital.com on 6 Nov 2012 at 8:58

GoogleCodeExporter commented 9 years ago
Jason,

Thanks for the 1400 buffer size hints

I got the similar from CME feed yesterday 19/Nov:

Decoding error: [ERR U03] Unexpected end of data decoding unsigned integer 
Field: RptSeq.

As I'm suing InterpretApplication utility to capture the marketdata in raw 
format, I override the default buffer size using "-buffersize " command line 
option

Original comment by whta...@gmail.com on 20 Nov 2012 at 2:55

GoogleCodeExporter commented 9 years ago
The default buffer size will be changed to 1500.

Original comment by dale.wil...@gmail.com on 21 Jan 2013 at 4:33