For a deeper look into our Elektron API, look into:

Overview |  Quickstart |  Documentation |  Downloads |  Tutorials |  Articles

question

Upvotes
Accepted
2 2 5 7

INCOMPLETE_DATA & NO_DATA messages from Elektron

For certain symbols out of a huge data set, some of then return back INCOMPLETE_DATA

java.lang.RuntimeException: Can't iterate field entry: INCOMPLETE_DATA

and sometimes these exceptions


Decode exception for stream id 44 - {}

java.lang.NullPointerException

at com.thomsonreuters.upa.codec.D.A(Unknown Source)

at com.thomsonreuters.upa.codec.i.decode(Unknown Source)

at com.bfm.streaming.trep.codec.PayloadDecoder.apply(PayloadDecoder.java:33)

at com.bfm.streaming.trep.codec.PayloadDecoder.apply(PayloadDecoder.java:14)

at com.bfm.streaming.trep.codec.IncrementalDecoder.apply(IncrementalDecoder.java:172)

at com.bfm.streaming.trep.codec.IncrementalDecoder.apply(IncrementalDecoder.java:51)

at com.bfm.streaming.trep.MarketPriceSubscription.get(MarketPriceSubscription.java:165)

at com.bfm.streaming.StreamingUtil$1.get(StreamingUtil.java:33)

at com.bfm.streaming.topology.CancellableSource.get(CancellableSource.java:34)

at com.bfm.streaming.StreamingUtil.forEach(StreamingUtil.java:158)

at com.bfm.streaming.topology.TopologyBuilder.lambda$subscribeAsync$11(TopologyBuilder.java:246)

at java.lang.Thread.run(Thread.java:748)



Decode exception for stream id 787 - {}

java.lang.ArrayIndexOutOfBoundsException: -1

at com.thomsonreuters.upa.codec.D.A(Unknown Source)

at com.thomsonreuters.upa.codec.i.decode(Unknown Source)

at com.bfm.streaming.trep.codec.PayloadDecoder.apply(PayloadDecoder.java:33)

at com.bfm.streaming.trep.codec.PayloadDecoder.apply(PayloadDecoder.java:14)

at com.bfm.streaming.trep.codec.IncrementalDecoder.apply(IncrementalDecoder.java:172)

at com.bfm.streaming.trep.codec.IncrementalDecoder.apply(IncrementalDecoder.java:51)

at com.bfm.streaming.trep.MarketPriceSubscription.get(MarketPriceSubscription.java:165)

at com.bfm.streaming.StreamingUtil$1.get(StreamingUtil.java:33)

at com.bfm.streaming.topology.CancellableSource.get(CancellableSource.java:34)

at com.bfm.streaming.StreamingUtil.forEach(StreamingUtil.java:158)

at com.bfm.streaming.topology.TopologyBuilder.lambda$subscribeAsync$11(TopologyBuilder.java:246)

at java.lang.Thread.run(Thread.java:748)


Can you please help understand what could be causing these exceptions and messages?

elektronrefinitiv-realtimeelektron-sdkelektron-data-dictionary
icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes
Accepted
24.9k 87 10 22

Hi @pratik.p.mehta

According to the UPA/ETA documentation that error enum 'Indicates that the RsslBuffer on the RsslDecodeIterator does not have enough data for proper decoding'

This would suggest that whatever you are passing to the upa decode function has been truncated somewhere.

I would recommend you trace out the low level messages - see this post for further details - to confirm you are receiving a complete payload from the server. The actual question above is related to ETA C, but that specific post also talks about enabling XML Trace ini ETA Java.


icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Thank you for the response.

So the INCOMPLETE_DATA & NO_DATA both point to truncated buffer?

Let me put trace on and see if this helps point the source.

Will keep this post open for now

Upvotes
24.9k 87 10 22

Hi @pratik.p.mehta

NO_DATA indicates there is no content i.e. empty payload

• When RSSL_DT_NO_DATA is housed in a message, the message has no payload.

• If RSSL_DT_NO_DATA is housed in a container type,each container entry has no payload


icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Yeah I ran the trace and looks like we get

01-29-20 09:07:25,777 DEBUG: TopologySink#0: com.bfm.streaming.trep.session.ResponseLogger - <STATUS domainType="MARKET_PRICE" streamId="937" containerType="NO_DATA" flags="0x28 (HAS_MSG_KEY|HAS_STATE)" State: Open/Suspect/None - text: "A27: Synchronization Error. Recalling." dataSize="0">

<key flags="0x07 (HAS_SERVICE_ID|HAS_NAME|HAS_NAME_TYPE)" serviceId="257" name="USD20YOIS=ICAP" nameType="1"/>

<dataBody>

</dataBody>

</STATUS>


01-29-20 09:07:25,777 ERROR: TopologySink#0: com.bfm.streaming.trep.codec.IncrementalDecoder - Received STATUS message for key - USD20YOIS=ICAP, streamId - 937. TREP response: A27: Synchronization Error. Recalling.


and then..... after few more lines in log:

01-29-20 09:07:25,777 ERROR: TopologySink#0: com.bfm.streaming.trep.codec.IncrementalDecoder - Received STATUS message for key - USD9YOIS=ICAP, streamId - 924. TREP response: A27: Synchronization Error. Recalling.

01-29-20 09:07:25,778 ERROR: TopologySink#1: com.bfm.streaming.trep.codec.IncrementalDecoder - Decode exception for stream id 937 - {}

java.lang.RuntimeException: Can't decode field list: INCOMPLETE_DATA

Thank you for the explanation.

Upvotes
24.9k 87 10 22

Hi @pratik.p.mehta

The ADS server sends an A27 status message when it loses an update (tick). Such a loss can be caused by a network problem that resulted in packet loss. You should speak with your Market Data team and/or raise a ticket with the Refinitiv Helpdesk for Elektron to investigate this further.

Also, when you get any Status Message response they don't normally contain any payload, so there would be nothing to decode.

Do you check the msg type before deciding if you need to call decode?

See the sample app in Eta\Applications\Examples\src\main\java\com\thomsonreuters\upa\examples\consumer for an example of how to handle status type message.

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.