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





Best Answer

  • Jirapongse
    Answer ✓

    @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.

Answers