On 30/05/23 1:26 pm, Markus Armbruster wrote:
Het Gala <[email protected]> writes:

On 30/05/23 12:28 pm, Markus Armbruster wrote:
Het Gala<[email protected]>  writes:

On 25/05/23 11:04 pm, Markus Armbruster wrote:
[...]

Aside: a more powerful type system would let us extend SocketAddress
with additional variants instead of wrapping it in a union.
Markus, what do you mean by additional variants here in context of socket? Can 
you give a small example.
As is, we have a nest of two unions:

* The outer union has branches @socket, @exec, @rdma.

* Branch @socket is the inner union, it has branches @inet, @unix, ...

A more powerful type system would let us extend SocketAddress instead,
so MigrateAddress has everything SocketAddress has, plus additional
branches @exec, @rdma.  Naturally, the type of the discriminator also
needs to be extended, so that it has everything SocketAddress's
discriminator type has, plus additional members @exec, @rdma.
Okay, so you mean something like :

+# Since 8.1
+##
+{ 'union': 'MigrateAddress',
+  'base': { 'transport' : 'MigrateTransport'},
+  'discriminator': 'transport',
+  'data': {
+    'inet': 'InetSocketAddress',
+    'unix': 'UnixSocketAddress',
+    'vsock': 'VsockSocketAddress',
+    'fd': 'str',
+    'exec': 'MigrateExecCommand',
+    'rdma': 'InetSocketAddress' } }

Even I agree that directly leveraging this is the best option, but then 
wouldn't it introduce redundancy ? we would not be able to leverage socket 
union right in that case or am I missing something.
Yes, there's redundancy, due to QAPI's insufficient expressive power.

Is the cleaner external interface worth the (internal) redundancy, and
possibly coding complications that go with it?

Honestly, I would like to have it this way, where the user is aware of all the transport mechanisms available. But I guess for external interface problem statement, the migration code flow has similar path for SocketAddress and non-socketAddress (exec and rdma). So even if on the QAPI side we express explicitly all the transport mechanisms, while implementing it we either would need to brinf them under a single umbrella. For now, I would keep the implementation as it is (union inside a union) but would want to have a more powerful and better appraoch out there if possible.

I would like to have Migration maintainers - Juan, Peter Xu and others to comment on what approach from the above two is a better one.

Regards,
Het Gala

Reply via email to