quickfast
quickfast copied to clipboard
ERROR in CME incremental feed processing
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 [email protected] on 5 Nov 2012 at 1:59
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 [email protected] on 5 Nov 2012 at 3:05
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 [email protected] on 5 Nov 2012 at 3:34
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 [email protected] on 6 Nov 2012 at 8:58
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 [email protected] on 20 Nov 2012 at 2:55
The default buffer size will be changed to 1500.
Original comment by [email protected] on 21 Jan 2013 at 4:33
- Changed state: Accepted