<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <link rel="stylesheet" href="style.css" type="text/css"> <meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type"> <link rel="Start" href="index.html"> <link rel="previous" href="Versioned_rpc.Callee_converts.html"> <link rel="Up" href="Versioned_rpc.html"> <link title="Index of types" rel=Appendix href="index_types.html"> <link title="Index of exceptions" rel=Appendix href="index_exceptions.html"> <link title="Index of values" rel=Appendix href="index_values.html"> <link title="Index of modules" rel=Appendix href="index_modules.html"> <link title="Index of module types" rel=Appendix href="index_module_types.html"> <link title="Command" rel="Chapter" href="Command.html"> <link title="File_tail" rel="Chapter" href="File_tail.html"> <link title="File_writer" rel="Chapter" href="File_writer.html"> <link title="Import" rel="Chapter" href="Import.html"> <link title="Lock_file" rel="Chapter" href="Lock_file.html"> <link title="Log" rel="Chapter" href="Log.html"> <link title="Persistent_singleton" rel="Chapter" href="Persistent_singleton.html"> <link title="Rpc" rel="Chapter" href="Rpc.html"> <link title="Rpc_intf" rel="Chapter" href="Rpc_intf.html"> <link title="Std" rel="Chapter" href="Std.html"> <link title="Tcp" rel="Chapter" href="Tcp.html"> <link title="Tcp_file" rel="Chapter" href="Tcp_file.html"> <link title="Typed_tcp" rel="Chapter" href="Typed_tcp.html"> <link title="Typed_tcp_intf" rel="Chapter" href="Typed_tcp_intf.html"> <link title="Unpack_sequence" rel="Chapter" href="Unpack_sequence.html"> <link title="User_and_group" rel="Chapter" href="User_and_group.html"> <link title="Versioned_rpc" rel="Chapter" href="Versioned_rpc.html"> <link title="Versioned_typed_tcp" rel="Chapter" href="Versioned_typed_tcp.html"> <link title="Weak_hashtbl" rel="Chapter" href="Weak_hashtbl.html"><title>Versioned_rpc.Both_convert</title> </head> <body> <div class="navbar"><a class="pre" href="Versioned_rpc.Callee_converts.html" title="Versioned_rpc.Callee_converts">Previous</a> <a class="up" href="Versioned_rpc.html" title="Versioned_rpc">Up</a> </div> <h1>Module <a href="type_Versioned_rpc.Both_convert.html">Versioned_rpc.Both_convert</a></h1> <pre><span class="keyword">module</span> Both_convert: <code class="code">sig</code> <a href="Versioned_rpc.Both_convert.html">..</a> <code class="code">end</code></pre><hr width="100%"> <br> <code class="code">Both_convert</code> 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. <p> <pre class="codepre"><code class="code"> (conv) (conv) (conv) (conv) caller callee callee caller | | | | | | | | Q.caller ---->-- Q1 -->-. (impl) .->-- R1 -->---- R.caller \ \ callee / / \--->-- Q2 -->---\ | /--->-- R2 -->---/ \ \ | / / `->-- Q3 -->---- Q.callee --> R.callee ---->-- R3 -->-' </code></pre><br> <pre><span class="keyword">module</span> <a href="Versioned_rpc.Both_convert.Plain.html">Plain</a>: <code class="code">sig</code> <a href="Versioned_rpc.Both_convert.Plain.html">..</a> <code class="code">end</code></pre></body></html>