|This page describes the standard protocol implemented in the ION capability container to make a service request from a capability container process. In most cases, this request is blocking until the result or a failure response arrives, or until a timeout occurs|
|Description||Standard protocol to make a request to a service and wait for the response, failure or timeout. Two variants: Simple RPC and Service Request|
|Conversation Roles||Requester, Provider|
- The service interface is described in a service definition YML (see CIAD COI SV Service Interfaces)
- The service is active in the system, i.e. has an instance in the system with at least one service worker process waiting for request messages
- The process uses a service client that was generated from the service definition YML.
The figure below shows a service request against elapsed system time.
Figure 1. Service request protocol (OV-6)
- How to check that the provider exists before sending a request? (do we need this?)
- What happens when either side times out?
- What happens when one side fails?
- How to make a non-blocking request on the requester side?
- Do we need ACKs in here?
- What happens if cancel arrives after result was sent?
- What happens if timeout occurs before result is delivered (but was sent in time)?
- What about request side effects in case of timeout
- What happens when the requester fails during wait for the response?
- What happens to messages sent to the requester after it timed out or failed (e.g. the queue etc).
The figure below specifies the protocol implemented for Release 2. A simple RPC with timeout.
Figure 2. Simple RPC protocol (OV-6)