question

Upvotes
Accepted
1 2 2 3

How do we get more information regarding the reason for an Event type of Event.COMPLETION_EVENT?

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.

Is your question closer to: What are the reason a subscription can be closed?

Upvotes
Accepted
281 1 3 7

Basically, the completion event itself does not provide the reason of how the data stream is closed. The reason/information can be found in the status message that comes before the completion event so the application should look for the detail of the stream closure in the status message rather than in the completion event. Here are the examples of status messages when the stream is closed.

Invaid RIC Item:
MESSAGE
      Msg Type: MsgType.STATUS_RESP
      Msg Model Type: MARKET_PRICE
      Indication Flags: 
      Hint Flags: HAS_ATTRIB_INFO | HAS_STATE
      State: CLOSED, SUSPECT, NOT_FOUND,  "The record could not be found"
      AttribInfo
            ServiceName: hEED
            ServiceId: 2114
            Name: TEST.BK
            NameType: 1 (RIC)
      Payload: None
 
No Permission:
MESSAGE
      Msg Type: MsgType.STATUS_RESP
      Msg Model Type: MARKET_PRICE
      Indication Flags: 
      Hint Flags: HAS_ATTRIB_INFO | HAS_STATE
      State: CLOSED, SUSPECT, NOT_ENTITLED,  "Access Denied: User req to IDN for Specialist - SDPREREINTO"
      AttribInfo
            ServiceName: hEED
            ServiceId: 2114
            Name: BRL10MNDF=
            NameType: 1 (RIC)
      Payload: None
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.2k 23 28 43

If one ignores the explicit completion events in RFA/RSSL you can simply use msg.isFinal() under processEvent() to gain stateful awareness of the event. For RFA/SSL you can use event.isEventStreamClosed() instead.

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.

Thanks Steve. We're trying to figure out how to determine if the completion event was a result of an entitlements issue versus some other issue. Are the other categories of reasons which can result in a completion event?

As in (a) data does not exist { retired or not yet launched }, (b) infrastructure failure, (c) DACS permissions, (d) API failure?

Would those be the complete list? What about time of request? We have seen cases in which we subscribed to a RIC 8 hours before the market opens and get a Completion_Event, but later on closer to the market open, we subscribe successfully.

We are getting thousands of these events every day and we are not sure why. Thank you.

Show more comments
Upvotes
11.3k 25 8 14

[Edited] The completion event will be sent as final event from an event stream. It indicates that the event's stream has been closed, when the application call unregisterClient() to close the event stream. It should be an issue stated by Jirapongse below.

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.

Upvote
52.9k 136 44 63

There are two ways in which an event stream can be closed:

  • The application closes the stream via unregisterClient() call to RFA. In this case, RFA might dispatch additional events that were in flight due to race condition
  • The application receives an event that closes the stream. In this case, the infrastructure sends the response with status closed and status text to close the stream. This case includes the invalid items, permission issues, and infrastructure failure. The application can verify the reason from the status text.

An application should call isEventStreamClosed() function on incoming messages to determine whether an event stream is closed. Note that if an application registers for completion events and closes the event stream via an unregisterClient() call to RFA, the application must be prepared to receive either a completion event or some other event that closes the stream. If the application receives an event closing the stream other than a completion event, the application will not receive the completion event.

Normally, the application uses the completion events when it relinquishes the requests from different threads than the dispatching thread. After unregistering the handle, the application must wait for the completion event or verify isEventStreamClosed() before deleting an instance of an Event Handler.

I would like to suggest upgrading the application to use the latest version of RFA C++ (7.6 or 8.0) because there are a lot of issues fixed regarding the completion event.

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.