[FAST-49] Fields without operator write to global dictionary Created: 27/May/14  Updated: 13/Oct/16

Status: Open
Project: OpenFAST
Component/s: Operators
Affects Version/s: 1.1.2
Fix Version/s: None

Type: Bug Priority: Default
Reporter: Felix Krull Assignee: Jacob Northey
Resolution: Unresolved Votes: 0
Labels: dictionary, operator
Environment:

RHEL 5.10, JDK 1.6.0_30, 64 BIT


Attachments: File eurex-rdd.fast    

 Description   

I can be argued whether this is a bug or feature request, since the FAST specification is not 100% clear on this issue***. However, because the other Opensource implementation Quickfast is handing this as suggested, I decided to file this as a bug.

The Eurex T7 EMDI feed defines e.g the field TransactTime with different/without operators:

template TransactTime-Operator

ProductStateChange none
MassInstrumentStateChange delta
InstrumentStateChange delta
ComplexInstrumentUpdate none
QuoteRequest copy
CrossRequest none
InstrumentSnapshot delta
InstrumentIncremental delta
MarketDataReport delta

Now, in case you have a message order where (a) the field without operator precedes (b) a field with operator before the next reset, the decoded value for the operator field is wrong (contains now value a+b, whereas only b would be correct)

Suggested change: fields without operator should not write into a dictionary, or in other words: only operators should update the dictionary.

        • FAST 1.1 Specification, chapter 6.3.1: "Some operators rely on a previous value. Previous values are maintained in named dictionaries." --> this can be interpreted in a way that only operators maintain a dictionary.


 Comments   
Comment by Felix Krull [ 28/May/14 ]

Actually it's definitely a bug.

In Scalar.java inside the "Public FieldValue decode" the check for "shouldStoreValue" is missing, i.e. instead

if (!((getOperator() == Operator.DELTA) && (value == null)))

it should be

if (!((getOperator() == Operator.DELTA) && (value == null)) && (operator.shouldStoreValue(value))) {

--> then Operator.NONE is (correctly) not updating the dictionary .... It may also fix other lingering bugs.

rgds
fk

Comment by Felix Krull [ 20/Jun/14 ]

Is there any update fro this issue? Looking further into the source code it seems that the overall operator-handling may be inconsistent. Thanks!

Comment by Michael Kötter [ 30/Sep/16 ]

Just signed on to say Thank You!
This did indeed fix several inexplicable issues we were seeing when decoding Eurex RDD messages.
The attached sample would throw a java.lang.NegativeArraySizeException without the fix, now it can be decoded. In fact I can decode a 60MB dump that was producing thousands of errors without any issues now. Thanks!

Comment by Alexander Piskarev [ 13/Oct/16 ]

My thanks to you Felix! Eurex T7 4.0.2 RDI data is decoded well with your patch.

Generated at Sat Nov 23 16:37:19 UTC 2024 using JIRA 7.5.2#75007-sha1:9f5725bb824792b3230a5d8716f0c13e296a3cae.