question

Upvotes
Accepted
3 6 4 5

Reentrant Decode OMMexception

Why are we seeing Reentrant Decode OMMException

In the rfa_common_lib/SnapshotThread class, all Exceptions are caught and quietly eaten. If an exception was thrown and caught, the log message is not written. When I add e.printStackTrace() into the catch block, I see the following exception many times:

com.reuters.rfa.omm.OMMException: Reentrant decode

at com.reuters.rfa.internal.rwf.RwfDecoder.setupDecodeFor(Unknown Source)

at com.reuters.rfa.internal.rwf.RwfDecoder.decodeFieldEntry(Unknown Source)

at com.reuters.rfa.internal.rwf.RwfFieldListIterator.next(Unknown Source)

at com.reuters.rfa.internal.rwf.RwfFieldListIterator.next(Unknown Source)

at com.vanguard.rfa.RFASnapshot.<init>(RFASnapshot.java:88)

at com.vanguard.rfa.SnapshotThread.run(SnapshotThread.java:47)

at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)

at java.util.concurrent.FutureTask.run(FutureTask.java:266)

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

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

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

Does anyone know what the “Reentrant decode” means?

Is Javadoc available for the Reuters RFA API?

Thanks,

treprfarfa-apijava
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.

Hi @robert_hau

Thank you for your participation in the forum. Is the reply below satisfactory in resolving your query?

If so please can you click the 'Accept' text next to the appropriate reply. This will guide all community members who have a similar question.

Thanks,

AHS

@robert_hau

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
1.9k 7 10 16

Hello @robert_hau,

This com.reuters.rfa.omm.OMMException: Reentrant decode can happen in the situation that multi-threads try to decode the same OMM object.

The snippet code below shows how to replicate this exception:

    public void processEvent(Event event)
    {
        if (event.getType() == Event.COMPLETION_EVENT)
        {
            System.out.println(_className + ": Receive a COMPLETION_EVENT, " + event.getHandle());
            return;
        }
        System.out.println(_className + ".processEvent: Received Item Event...");
        if (event.getType() != Event.OMM_ITEM_EVENT)
        {
            System.out.println("ERROR: " + _className + " Received an unsupported Event type.");
            _mainApp.cleanup(-1);
            return;
        }
        OMMItemEvent ie = (OMMItemEvent)event;
        OMMMsg respMsg = ie.getMsg();
       
        for (int i=0; i<2; i++) {
        	new DecoderThread(respMsg).start();
        }
    }


class DecoderThread extends Thread {
	final OMMMsg msg;
	public DecoderThread(OMMMsg msg) {
		this.msg = msg;
	}
	
	public void run() {
		OMMData payload = msg.getPayload();
        for (Iterator iter = ((OMMIterable)payload).iterator(); iter.hasNext();)
        {        	
        	OMMFieldEntry entry = (OMMFieldEntry)iter.next();
        	System.out.println(entry.getData());
        }
	}
}

In that case, please check and review the application source code to ensure whether it has a possibility that an OMMMsg object is decoded by multiple-threads or not.

Hope this helps.

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
3 6 4 5

can anyone provide an update on this.

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.

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.