module Both_convert:sig
..end
Both_convert
rpcs combine features of both caller-converts and callee-converts
versioning schemes in such a way that one can smoothly add a new version of the rpc
to a shared library, and it doesn't matter whether the callee or caller upgrades to
the latest version of the shared library first, the new version will not be
exercised until both sides support it.
(conv) (conv) (conv) (conv)
caller callee callee caller
| | | |
| | | |
Q.caller ---->-- Q1 -->-. (impl) .->-- R1 -->---- R.caller
\ \ callee / /
\--->-- Q2 -->---\ | /--->-- R2 -->---/
\ \ | / /
`->-- Q3 -->---- Q.callee --> R.callee ---->-- R3 -->-'
module Plain:sig
..end