question

Upvotes
Accepted
1 0 0 0

EMA Java OmmConsumer AssertionError

EMA Java OmmConsumer fails with an AssertionError after running for 2 days:


java.lang.AssertionError: byte buffer must be non-null

at com.refinitiv.eta.codec.DecodeIteratorImpl.setBufferAndRWFVersion(DecodeIteratorImpl.java:84)

at com.refinitiv.ema.access.FieldListImpl.decode(FieldListImpl.java:315)

at com.refinitiv.ema.access.MsgImpl.decodeAttribPayload(MsgImpl.java:317)

at com.refinitiv.ema.access.UpdateMsgImpl.decode(UpdateMsgImpl.java:487)

at com.refinitiv.ema.access.ItemCallbackClient.processUpdateMsg(ItemCallbackClient.java:1827)

at com.refinitiv.ema.access.ItemCallbackClient.defaultMsgCallback(ItemCallbackClient.java:1650)

at com.refinitiv.eta.valueadd.reactor.Reactor.sendDefaultMsgCallback(Reactor.java:2841)

at com.refinitiv.eta.valueadd.reactor.Reactor.sendAndHandleDefaultMsgCallback(Reactor.java:2950)

at com.refinitiv.eta.valueadd.reactor.WlItemHandler.callbackUser(WlItemHandler.java:3037)

at com.refinitiv.eta.valueadd.reactor.WlItemHandler.readUpdateMsg(WlItemHandler.java:2292)

at com.refinitiv.eta.valueadd.reactor.WlItemHandler.readMsg(WlItemHandler.java:1933)

at com.refinitiv.eta.valueadd.reactor.Watchlist.readMsg(Watchlist.java:302)

at com.refinitiv.eta.valueadd.reactor.Reactor.processRwfMessage(Reactor.java:4723)

at com.refinitiv.eta.valueadd.reactor.Reactor.performChannelRead(Reactor.java:5077)

at com.refinitiv.eta.valueadd.reactor.Reactor.dispatchAll(Reactor.java:7775)

at com.refinitiv.ema.access.OmmBaseImpl.rsslReactorDispatchLoop(OmmBaseImpl.java:1836)

at com.refinitiv.ema.access.OmmBaseImpl.run(OmmBaseImpl.java:1985)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

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


After this exception the OmmConsumer stops serving any requests.

RTSDK version 3.7.3.0


It seems that the RTSDK code incorrenly handles the situation when there is 'No payload. Reset iterator and return'

see https://github.com/Refinitiv/Real-Time-SDK/blob/e1bd1ad7411e3e68b19ed1fd49f848646ebb2d09/Java/Eta/Core/src/main/java/com/refinitiv/eta/codec/Decoders.java#L133





#technologyema-apieta-api
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.

@VadimVashkevich

Hi,

Thank you for your participation in the forum.

Is the reply below satisfactory in answering your question?

If yes please click the 'Accept' text next to the reply and then close the question. This will guide all community members who have a similar question.

Otherwise please post again offering further insight into your question.

Thanks,

AHS

Please be informed that a reply has been verified as correct in answering the question, and has been marked as such.

Thanks,
AHS

Upvotes
Accepted
79.2k 251 52 74

@VadimVashkevich

Thank you for reaching out to us.

If I enable assertions (-ea) in Java, it will show this assertion when the API retrieves the update message with an empty payload.

<UPDATE domainType="MARKET_PRICE" streamId="3" containerType="FIELD_LIST" flags="0x00" updateType="0" dataSize="0">
    <dataBody>
    </dataBody>
</UPDATE>


Exception in thread "pool-2-thread-1" java.lang.AssertionError: byte buffer must be non-null
    at com.refinitiv.eta.codec.DecodeIteratorImpl.setBufferAndRWFVersion(DecodeIteratorImpl.java:84)
    at com.refinitiv.ema.access.FieldListImpl.decode(FieldListImpl.java:315)
    at com.refinitiv.ema.access.MsgImpl.decodeAttribPayload(MsgImpl.java:317)
    at com.refinitiv.ema.access.UpdateMsgImpl.decode(UpdateMsgImpl.java:487)
    at com.refinitiv.ema.access.ItemCallbackClient.processUpdateMsg(ItemCallbackClient.java:1827)
    at com.refinitiv.ema.access.ItemCallbackClient.defaultMsgCallback(ItemCallbackClient.java:1650)
    at com.refinitiv.eta.valueadd.reactor.Reactor.sendDefaultMsgCallback(Reactor.java:2841)
    at com.refinitiv.eta.valueadd.reactor.Reactor.sendAndHandleDefaultMsgCallback(Reactor.java:2950)

I am not sure why the data feed sent this update to the application. You may need to contact the data feed support team directly via MyRefinitiv to verify this message.

If I disable the assertions, the application will get the following message.

<!-- rwfMajorVer="14" rwfMinorVer="1" -->
<UPDATE domainType="MARKET_PRICE" streamId="3" containerType="FIELD_LIST" flags="0x00" updateType="0" dataSize="0">
    <dataBody>
    </dataBody>
</UPDATE>


UpdateMsg
    streamId="5"
    domain="MarketPrice Domain"
    updateTypeNum="0"
    name="IBM.N"
    serviceId="1"
    serviceName="DIRECT_FEED"
    Payload dataType="FieldList"
        FieldList
            FieldEntry fid="0" name="" dataType="Error"
                OmmError
                      ErrorCode="IteratorSetFailure"
                OmmErrorEnd
            FieldEntryEnd
        FieldListEnd
    PayloadEnd
UpdateMsgEnd

In conclustion, first, please contact the content team to verify why the update message has an empty payload. Then, if you are a Refinitiv Developer Connect (RDC) named user, you can contact the API support team directly via Contact Premium support to investigate this issue in the API. If you are not a Refinitiv Developer Connect (RDC) named user, you can submit this issue via GitHub.

I hope that this information is of help.

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
1 0 0 0

Thank you @Jirapongse

please provide steps how to reproduce an empty payload message with containerType="FIELD_LIST". What utility or API you were using?

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.

@VadimVashkevich

I modified the ETA Provider example in the RTSDK package to publish an empty payload message.


Write an Answer

Hint: Notify or tag a user in this post by typing @username.

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