Friday, 20 December 2013

Fix8 version 1.0.0 Release Candidate RC3

*Updated*

This is the third release candidate for our first GA release of Fix8. We are seeking feedback from our users so please post your comments to the support group or raise a Jira ticket if you find anything we should know about. 

Download zip and tar.

 We will be releasing Fix8 version 1.0.0 in mid January 2014.


1. Resiliency

In a typical client production environment your provider probably has a pool of remote servers that you can connect to. These are often designated as 'primary' or 'secondary' and so forth. Sometimes all servers in a service group are intended to complement each other. In other cases, the 'secondary' and subsequent servers are designed to be used only when the 'primary' has failed. With version 1.0.0 Fix8 will support resiliency.

2. SSL

Fix8 version 1.0.0 now supports SSL sessions natively. Thanks to Sergey Sedreev for his work here.

3. Improvements

Batch sending, permissive message mode, OSX support and more.

4. Bug fixes

Fixed Jira tickets FX-107, FX-129, FX-130, FX-131, FX-134, FX-139, FX-140, FX-141
FX-142, FX-143, FX-144, FX-146FX-147, FX-149, FX-150, FX-151, FX-157, FX-158
FX-159, FX-161

Summary of changes

  • Provide support for basic client failover capability
  • Make connection timeout configurable
  • Add support for non-standard XML attribute comments
  • Add support for OSX
  • Add repeating group test cases for permissive mode
  • Support a permissive message field mode in decoder
  • Provide override to -fno-var-tracking-assignments
  • Fixed Session::send_process() dumps core in reliable mode if client drops connection before login
  • Added When working in coro mode there has to be a flag that session is ready to operate
  • Added When working in coro mode reader.execute() calls to base class operator()
  • Merged fix8:dev with fix8:master
  • Added MonthYear and LocalMktDate Date Formats
  • Fixed f8test doesn't work as expected
  • Fixed clang 3.2-3.4 compilation warnings
  • Fixed Sending of FIX message takes too long
  • Added Batch message sending
  • Fixed MessageBase::extract_element(..., f8String& tag, f8String& val) is ineffective
  • Fixed FIXReader calls sockRead too many times
  • Added Make includes relative to project root
  • Added SSL support

Sunday, 10 November 2013

Fix8 version 0.10.0 released

Keeping up the momentum of our pre-GA releases here is another instalment. We've had some fantastic input from a few dedicated contributors. A big thank you to all involved.

1. API Update

Note that there have been changes to the Fix8 API. Applications will need to be modified to build with this version. See the sample applications and the Wiki for more details.

2. Bug fixes

Fixed Jira tickets FX-102, FX-103, FX-104, FX-105, FX-107, FX-110, FX-113, FX-114, FX-115, FX-116, FX-119, FX-120, FX-122, FX-124, FX-127

Summary of changes

  • Fixed allow sender to take ownership of messages after send
  • Fixed removed message recycling
  • Fixed session::send not thread safe with multiple senders in threaded mode
  • Fixed TBB allocator is not used when linking to tbb
  • Fixed there is no itoa for int64
  • Fixed hb interval is set 1 when using reliable connection
  • Fixed multiple instances of FIX8 session share the last messages table
  • Fixed groups with 0 elements are not processed
  • Fixed error when sending message with BodyLength > 9999
  • Fixed issues with Windows build
  • Added Fix8 include path in generated files are now configurable
  • Added -P switch to f8c to embed fix8 in include paths
  • Added order batch send mode
  • Added allow application to detach messages when received from framework: Session::handle_application API change
  • Added provide way to set default precison for floating point values

Sunday, 3 November 2013

Fix8 version 0.10.0 pending

We had a number of issues reported relating to running multiple FIX variants in a single application. large messages and repeating group behaviour which have been resolved. Special thanks to Sergey Sedreev for his contributions.

1. API change

We have made a few API changes to allow an application to detach and take ownership of inbound and outbound messages. We have also changed the way StaticTables and GeneratedTables are used by the compiler and the framework and they have been simplified and streamlined. 


2. Bug fixes

Fixed Jira tickets FX-102, FX-103, FX-104, FX-105, FX-107, FX-110, FX-113, FX-114, FX-115, FX-116, FX-119, FX-12


Summary of changes

  • Fixed Session::send not thread safe with multiple senders in threaded mode
  • Fixed There is no itoa for int64
  • Fixed hb interval is set 1 when using reliable connection
  • Fixed Multiple instances of FIX8 session share the last messages table
  • Fixed Groups with 0 elements are not processed
  • Fixed Error when sending message with BodyLength > 9999
  • Fixed Issue with Windows build
  • Added FIX8 include path in generated files are now configurable
  • Added -P switch to f8c to embed fix8 in include paths
  • Added Order batch send mode
  • Added Allow application to detach messages when received from framework: Session::handle_application API change
  • Added Provide way to set default precision for floating point values

Sunday, 13 October 2013

Fix8 version 0.9.6 released

We had a number of issues reported relating to repeating groups, and running on different platforms, which have been resolved.

This release has also now been tested on ARMv7 (32 bit).


1. Performance

Decode latency reduced by a further 10%. 


2. Bug fixes

Fixed Jira tickets FX-76, FX-93, FX-94, FX-95, FX-96, FX-97, FX-99, FX-100, FX-101


Summary of changes

  • Decode latency reduced; throughput now 3x quickfix
  • Fixed SIOF - static initialisation inconsistent on different platforms; use ctx() instead of ctx
  • Fixed compiler treats all repeating groups with the same name as common
  • Fixed core dump on message or field instantiation
  • Resolved not build tests on centos 6.4
  • Fixed required Fields in Optional Components Should be Flagged as Optional
  • Fixed remove FieldTraits reserve behaviour
  • Added provide switch to suppress doxygen warnings
  • Added missing some date/time related fields
  • Fixed Fix8 does not build properly on arm. Test cases build and pass on ARMv7
  • Fixed link dependencies for clang compilation
  • Added -C switch to f8c to turn off version checking
  • Added -I switch to f8c, providing more info about build config and platform
  • Added -W switch to f8c, to suppress warning messages

Wednesday, 2 October 2013

Fix8 version 0.9.6 pending

Coming in this release....

(Preview here) To be updated shortly...


1. Performance

Decode latency reduced by a further 10%. 


2. Bug fixes

Fixed Jira tickets FX-76, FX-93, FX-94, FX-95, FX-96, FX-97, FX-99, FX-100, FX-101


Summary of changes

  • Core dump on message or field instantiation
  • Common and unique repeating groups not properly supported
  • Upgraded fastflow to v2.0.2
  • Required Fields in Optional Components Should be Flagged as Optional
  • Add switch to f8c to turn off version checking
  • Remove FieldTraits reserve behaviour
  • Provide switch to suppress doxygen warnings
  • Missing some date/time related fields
  • Fix8 does not build properly on arm (now builds and runs properly on armv7)

*Update*

We will be putting out another release candidate before making the full release. A few people are waiting on some of the critical fixes - including the repeating group issue.

Sunday, 22 September 2013

Fix8 version 0.9.5 released

There's a lot of work that has gone into this release. Thanks to all those who helped - especially reporting issues, trying out candidate fixes and contributing work-arounds and fixes.


1. Performance

Decode latency reduced by a further 20%. In our side by side shootout with Quickfix, Fix8 now comes in under 5us for a NewOrderSingle.


2. Bug fixes

Fixed Jira tickets FX-78, FX-79, FX-80, FX-81, FX-82, FX-83, FX-84, FX-85, FX-86, FX-87, FX-88, FX-89, FX-90, FX-91, FX-29, FX-92


Summary of changes

  • Fixed SendingTime and TransactTime not being output by Fix8 printer
  • Added compiler option to suppress realm use during field construction
  • Replaced Poco::DateTime with custom date time parser.
  • Fixed f8c compiler crashing on exit
  • Fixed Incorrect sequence number in GenerateSequenceReset
  • Removed coroutine process mode spinlocks
  • Workaround for f8test not building on low memory platforms or with older compilers
  • Skip formal decode of some header/trailer fields
  • Fixed error checking on logfile creation
  • Fixed F8MetaCntx::_bme.find() not returning end() if not found
  • Fixed ignore_logon_sequence_check check core dumping in client
  • Added permit applications to by-pass chksum checking
  • Replace field string parameter with const char *
  • Fixed generated files should not build with newer framework versions
  • Fixed replace compiler f8c generated instantiators with compiler generated versions
  • Fixed bug with some linux distros, threaded sessions core dump on exit
  • Replaced #ifdef 0 comment blocks with /* ... */
  • Templated Field::add_field
  • Improved fix printer formatting, removed incorrect group metadata
  • Added rdtsc option for codec timing
  • Added set_scheduler and set_affinity support

Sunday, 8 September 2013

Fix8 version 0.9.5 pending

Coming in 0.9.5

  • Fixes to fix8 compiler crash problem
  • Fixes to Jira tickets FX-78, FX-79, FX-80, FX-81, FX-82, FX-83
  • Reduction in decode latency of around 20%


GA Release plans

We were planning on a full GA release in the next month. We have decided to push this further out for a number of reasons, including allowing users to try out the windows port and report any issues they might find.


Fix8 on ARMv7

We are also currently working with the developers of FastFlow to fix issues with Fix8 on ARMv7. We hope to have these issues ironed out soon.

*Update*

We are delaying this release for a few more days. We're fixing a couple more bugs just reported and a few other persistent ones (f8c crashing in particular). We'll get this release out ASAP.

Sunday, 25 August 2013

Fix8 version 0.9.4 released

We'll postpone our planned GA release till the Windows port has had time to settle in and we have had a chance for people to provide some feedback.


1. Bug fixes

Fixed Jira tickets FX-72, FX-73, FX-74, FX-75
Merged from evdubs: remove the friend declaration in f8_scoped_lock_impl
Fixup package spec for pre-release to Fedora (now builds on f20 rawhide)
Added ReliableClientSession::has_given_up()
Fixed: Gcc locks up with compiler generated traits file; reduced _traits.cpp file by 40%
Fixed: Compile error with gcc 4.8.1
Fixed: XML character entity parsing broken; extended entity set;
Fixed: XML parser does not provide meaningful indication of errors.

2. Fix8 now builds on Windows

Thanks to Richard Bourne for sharing his port of Fix8 to Windows. 

Sunday, 4 August 2013

Fix8 version 0.9.3 released

Another pre GA release. More bug fixing. 

  • Fixed Jira tickets FX-67, FX-68, FX-69, FX-70, FX-71
  • Fixed race condition in Singleton
  • Added backup the persist file instead of purging after sequence reset
  • Added forced logout message should contain error text
  • Fixed server crashes when reliable client attempts sync reconnect
  • Fixed reset sequence number not truncating BDB persist database

Sunday, 21 July 2013

Fix8 version 0.9.2 released

Bug fixes (persistence and reset sequence numbers) , C++11 compatibility.
Merged in fixes from Neomantra; fixed FX-64, FX-65 and FX-66

Friday, 19 July 2013

Ouch some bugs

We've has a few reports of some annoying bugs, namely with the persister, reset sequence on login flag and some other botherings. These will be fixed shortly and released in 0.9.2.

Please keep the reports coming.

/dakka

Saturday, 29 June 2013

Fix8 version 0.9.0 released

Probably our last pre-GA release! Here's what we've got:


1. Performance: >3x faster than Quickfix

We've had more fantastic improvements in encode/decode performanceFor the same message, Fix8 encodes 3.2 times faster and decodes 2.3 times faster averaging 2.7 times over Quickfix. In other words, reduces encode latency by 69% and reduces decode latency by 56%See Performance to see how we substantiate more of this shameless bragging.


2. Improvements to process modes

Fix8 now supports three process modes - pipelined, threaded and coroutines. As well as supporting threaded reader/writer with pipelining on or off, we we also want to support coroutine versions. With these versions, only a single thread of execution will exist per session, with the FIX reader, writer and application main loop all cooperatively sharing (scheduling) their work loads. In an ULL context this can deliver superior performance on a single interface with maximum cache coherency.

3. Summary of changes

  1. Fixed Jira tickets FX-57, FX-58, FX-59, FX-60, FX-61, FX-62, FX-63
  2. Logflags - support specific inbound and outbound flags for protocol logs
  3. Replace cfpopen with non GPL replacement
  4. Fixed compiler generated include guards do not work if alternate output directory specified.
  5. Fixed f8c compiler - can't specify output directory by "-o" as expected
  6. Remove header/trailer field lookups in encode and decode
  7. Fixed unit tests not building properly
  8. Add optional coroutine version of FIX reader and writer. The test client hftest can be run in coroutine mode to demonstrate how to use this feature. Coroutines will be documented in the wiki.

          Saturday, 15 June 2013

          Fix8 joins Fix Protocol Limited (FPL)

          We have joined FPL! Our aim is is promote FIX and Fix8, contribute to the development of new FIX related protocols, and to work with buy and sell side market participants.

          Our thanks to those in the industry who assisted our membership efforts.


          Sunday, 19 May 2013

          Fix8 version 1.0.0 GA release planned for July/August 2013

          We've been in beta now for 18 months and we've covered a lot of ground. We think we're almost ready to move to version 1.0.0.


          There will probably be one or two more releases as beta and then version 1.0.0 will follow


          Thursday, 9 May 2013

          Fix8 version 0.8.0 released

          This is a big release. Here are the highlights:


          1. Performance: 2x faster than Quickfix

          We've had some fantastic improvements in encode/decode performanceFor the same message, Fix8 encodes 2.8 times faster and decodes 1.6 times faster averaging 2 times over Quickfix. In other words, reduces encode latency by 64% and reduces decode latency by36%See Performance to see how we substantiate this shameless bragging.


          2. Unit testing

          The first phase of our unit testing framework is complete. We have incorporated the following test catagories with a total of 31 individual tests. We will continually add more....
          message, filelogger, filePersister, sessionId, sessionTest
          We have also improved the supplied harness.cpp test application. This can be used to script load and replay FIX messages to in a session. This mechanism can be used to automate testing.


          3. Summary of changes

          1. Fixed Jira tickets FX-56, FX-55, FX-54, FX-53, FX-52, FX-51, FX-50, FX-49, FX-48, FX-47, FX-46, FX-45, FX-31
          2. Integrate a 3rd party unit testing framework
          3. Integrate gperf tcmalloc alternate heap allocator
          4. Modify session to force sequence number assignment when requested
          5. Improve fmt_chksum routine
          6. Implement hash array index lookup for fields
          7. Provide component metadata visibility
          8. Replace double field encode (sprintf) with modp_dtoa
          9. Remove custom field support
          10. Remove some virtual methods from fields and generated messages
          11. Fix Fastflow install not placing includes in correct path
          12. Fix MemoryPersister::get not handling end record situation correctly
          13. Fix Invalid Session::handle_resend_request not resetting session state
          14. Fix In get_last_seqnum(unsigned& to) of MemoryPersister, can't get last seqnum from the argument "to"
          15. Fix hftest preload should preload on startup
          16. Integration of gperf thread cache malloc (tcmalloc) heap allocator

          Wednesday, 1 May 2013

          Fix8 version 0.7.3 release postponed. Version 0.8.0 on the way instead!


          Well our unit testing framework is almost completed. We've also had some fantastic improvements in encode/decode performance. We don't want to risk release fatigue so we've postponed 0.7.3 and we'll release 0.8.0 very soon instead.

          Here's what's coming ...
          1. Performance: more on this with the release
          2. FIX Component metadata visibility
          3. Numerous bug fixes
          4. Built-in unit test suite, using gtest; starting set of unit tests
          5. Integration of gperf thread cache malloc (tcmalloc) heap allocator
          6. Removal of custom field support

          Monday, 22 April 2013

          Fix8 version 0.7.3 pending


          Here's what's coming ...

          1. Performance: 48% faster decode than quickfix, 25% faster encode (see our performance page.)
          2. FIX Component metadata visibility
          3. Numerous bug fixes

          Sunday, 7 April 2013

          Fix8 version 0.7.2 released

          Here's what's in the release....

          1. Removed dependence on TBB

          • Fix8 will supply and use FastFlowTBB is no longer required to build.
          • TBB can be optionally installed to provide concurrent queues. In our testing, TBB still performs better than FastFlow (this may change as we tweak our implementation).

          2. Stack based messages

          • We have added limited support for stack based messages. Heap allocation is still required for Fields.
          • Session::send can now take a Message& which will allow the creation and destruction of the message to occur on the current thread.
          • We are working on a complete stack based solution.

          3. Framework pipelining control

          • Sessions can now be configured to optionally use pipelining (previously on by default)
          • Can result in significant improvements in performance

          4. Persistence sequence number edit utility 'seqedit'

          • seqedit allows you to modify the next send/receive sequence numbers stored in a file based persistence file. 
          • You can also use this utility to dump the contents of the persistence file and index

          5. Bug fixes and code changes

          • Fixed jira tickets FX-23, FX-35, FX-36, FX-37, FX-38, FX-39, FX-40, FX-42, FX-43, FX-44, FX-17
          • Added man-pages for seqedit and f8c
          • Fixed under load, server disconnects client reporting it has timed out on receiving messages
          • Permit selection of pipelined or non-pipelined operation, through session config
          • Change performance test application to provide better measure of codec performance
          • Make Intel TBB optional
          • Fixed FileLogger::rotate() not working as expected
          • Fixed FIXReader, FIXWriter dropping bytes when buffers full
          • Fixed build hftest issue
          Many thanks to all involved.
          /dakka

          Sunday, 17 March 2013

          On the horizon

          Here's what we're working on. Some of these features should make it into our next release....


          • removing the independence on Intel's TBB. In the upcoming release, we will supply and use FastFlow as an alternative to TBB. This will permit Fix8 to run on other hardware, such as PowerPC and ARM.
          • limited support for stack based messages
          • provide more control on framework pipelining - which will enable better performance tuning
          • supply a utility to edit next send/receive sequence numbers stored in file based persistence files
          • improved encode and decode performance

          Saturday, 23 February 2013

          Fix8 version 0.7.0 released

          Here's whats in the release....

          1. File Based Persistence

          • Indexed file based message persistence is now the default. BerkeleyDB no longer required to build.
          • BerkeleyDB can be optionally installed to provide BerkeleyDB backed persistence if desired.

          2. RPM support

          • Added fix8.spec.in which configure will use to generate fix8.spec
          • rpm and deb binaries will now be released with each tagged release.
          • See downloads.

          3. Multi-session server support

          • Persistence and logfiles now use SessionIDs to create unique session
          • Server files created on logon

          4. Bug fixes and code changes

          • Fixed jira tickets FX-34, FX-33, FX-32, FX-30, FX-29, FX-28
          • XML parser accepts embedded spaces between attribute, '=' and attribute value
          • Provide mechanism for client or server to set next expected send/receive sequence number
          • Client correctly handling sequence_reset from server
          • Permit applications to by-pass chksum checking
          • Chksum logic correctly comparing calculated to passed value
          Many thanks to all involved.
          /dakka

          Friday, 22 February 2013

          Presentation about Fix8 on quantlabs.net

          I gave this presentation to the Quantlabs meetup today. 

          It's quite long and there's a bit of rambling but there are some good questions and answers plus discussions on the current state of play in HFT, FIX and related protocols.

          It offers some good insights into Fix8, it's design, implementation and philosophy.

          Tuesday, 19 February 2013

          Fix8 version 0.7.0 release pending

          Included in this forthcoming release are:

          • File based persistence; removal of dependence on BerkeleyDB
          • RPM support
          • Multi-session server support
          • Bug fixes and improvements, documentation updates

          These will all be described in more detail in this blog.

          /dakka

          Wednesday, 13 February 2013

          RPM builds now available

          From today we are including rpm builds with every release. For now we are only releasing x86_64 binaries. We will also be including the source rpm (srpm). We will also release matching deb packages.

          See downloads.

          We will star each new release and mark the older releases as deprecated.


          Monday, 28 January 2013

          Fix8 version 0.6.7 released


          I have just released 0.6.7. This should probably have been a minor release instead of a patch release. I have other functionality marked for release in 0.7.0. In any event, here's whats in the release....

          The big news here is performance!

          1. Our testing shows that Fix8 is on average 29% faster encoding/decoding the same message than Quickfix.
          2. Typical client NewOrderSingle encode latency is now 9.8µs, and ExecutionReport decode 11.6µs
          Go to the Performance page to see how we substantiate this shameless bragging!


          Bug fixes and code changes

          • Add support for C++ insert operator (+= operator is still supported)
          • Fixed 'make install ' to properly copy all relevant files to target
          • Replace Poco::DateTimeFormatter and Poco::DateTimeParser with ULL versions (thanks Mr Su)
          • Reduce encode/decode latency
          • Permit client and server to specify send/recv TCP buffer sizes
          • Fixed test clients core dumping on socket errors
          • Fixed server disconnects and client reporting it has timed out on receiving messages


          Changes to the Fix8 website

          • Expanded the performance analysis documentation
          • Performance comparison with Quickfix
          • Expanded FAQ, including clarification of our Open Source license
          • How it works
          • Expanded the Fix8 wiki

          Again many thanks to all involved.
          /dakka

          Wednesday, 23 January 2013

          Fix8 version 0.6.7 release pending

          Just finishing off testing. Included in this forthcoming release are:

          • various improvements to performance
          • bug fixes
          • improvements to the test applications
          • improvements and additions to the website, documentation updates

          These will all be described in more detail in this blog.

          \dakka