...
- Asynchronous invocation of the RPC and fully leveraging the Futures interface internally in ODL
- Using a RPC extension to convey an asynchronous invocation across JSON RPC
- Support for JSON RPC Batching
Asynchronous Invocation and Full Support for Futures
We cannot use Netty or other mechanisms used elsewhere in ODL to make IO asynchronous as they do not support all the transports we are interested in. We also do not need all of the Netty bells and whistles as our transports have their own pipelines and message framing. In fact, as various experiments on integrating Netty into ZMQ, etc have shown, Netty just gets in the way.
...
This support is now merged.
Conveying Asynchronous Invocation Beyond ODL
We need a JSON RPC 2.0 extension to convey that a call is asynchronous and it should be as transparent as possible to any legacy callers. We will avoid defining the handshake semantics until all the possible implications of taking asynchronous calls beyond ODL has been revealed.
...
This support is work in progress, initial patches are in ODL gerrit.
Support for Batching
Quite clearly, the introduction of queuing maps very well onto JSON RPC batching semantics (section 6 of the JSON RPC 2.0 Specification). We can introduce batching support before introducing the async extension . We do believe that this will make adding async support more difficult at a later date and have deliberately delayed it until the async extension is complete.