All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stefan Hajnoczi <stefanha@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: Kevin Wolf <kwolf@redhat.com>,
	Laurent Vivier <lvivier@redhat.com>,
	Thomas Huth <thuth@redhat.com>,
	qemu-block@nongnu.org, qemu-devel@nongnu.org,
	Coiby Xu <coiby.xu@gmail.com>, Max Reitz <mreitz@redhat.com>,
	Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [PATCH v2 11/13] block/export: convert vhost-user-blk server to block export API
Date: Thu, 1 Oct 2020 16:25:15 +0100	[thread overview]
Message-ID: <20201001152515.GD559957@stefanha-x1.localdomain> (raw)
In-Reply-To: <87eemj72s1.fsf@dusky.pond.sub.org>

[-- Attachment #1: Type: text/plain, Size: 5576 bytes --]

On Wed, Sep 30, 2020 at 04:33:18PM +0200, Markus Armbruster wrote:
> Stefan Hajnoczi <stefanha@redhat.com> writes:
> 
> > On Wed, Sep 30, 2020 at 07:28:58AM +0200, Markus Armbruster wrote:
> >> Stefan Hajnoczi <stefanha@redhat.com> writes:
> >> 
> >> > Use the new QAPI block exports API instead of defining our own QOM
> >> > objects.
> >> >
> >> > This is a large change because the lifecycle of VuBlockDev needs to
> >> > follow BlockExportDriver. QOM properties are replaced by QAPI options
> >> > objects.
> >> >
> >> > VuBlockDev is renamed VuBlkExport and contains a BlockExport field.
> >> > Several fields can be dropped since BlockExport already has equivalents.
> >> >
> >> > The file names and meson build integration will be adjusted in a future
> >> > patch. libvhost-user should probably be built as a static library that
> >> > is linked into QEMU instead of as a .c file that results in duplicate
> >> > compilation.
> >> >
> >> > The new command-line syntax is:
> >> >
> >> >   $ qemu-storage-daemon \
> >> >       --blockdev file,node-name=drive0,filename=test.img \
> >> >       --export vhost-user-blk,node-name=drive0,id=export0,unix-socket=/tmp/vhost-user-blk.sock
> >> >
> >> > Note that unix-socket is optional because we may wish to accept chardevs
> >> > too in the future.
> >> >
> >> > Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
> >> > ---
> >> > v2:
> >> >  * Replace str unix-socket with SocketAddress addr to match NBD and
> >> >    support file descriptor passing
> >> >  * Make addr mandatory [Markus]
> >> >  * Update vhost-user-blk-test.c to use --export syntax
> >> > ---
> >> >  qapi/block-export.json               |  21 +-
> >> >  block/export/vhost-user-blk-server.h |  23 +-
> >> >  block/export/export.c                |   8 +-
> >> >  block/export/vhost-user-blk-server.c | 452 +++++++--------------------
> >> >  tests/qtest/vhost-user-blk-test.c    |   2 +-
> >> >  util/vhost-user-server.c             |  10 +-
> >> >  block/export/meson.build             |   1 +
> >> >  block/meson.build                    |   1 -
> >> >  8 files changed, 158 insertions(+), 360 deletions(-)
> >> >
> >> > diff --git a/qapi/block-export.json b/qapi/block-export.json
> >> > index ace0d66e17..2e44625bb1 100644
> >> > --- a/qapi/block-export.json
> >> > +++ b/qapi/block-export.json
> >> > @@ -84,6 +84,21 @@
> >> >    'data': { '*name': 'str', '*description': 'str',
> >> >              '*bitmap': 'str' } }
> >> >  
> >> > +##
> >> > +# @BlockExportOptionsVhostUserBlk:
> >> > +#
> >> > +# A vhost-user-blk block export.
> >> > +#
> >> > +# @addr: The vhost-user socket on which to listen. Both 'unix' and 'fd'
> >> > +#        SocketAddress types are supported. Passed fds must be UNIX domain
> >> > +#        sockets.
> >> 
> >> "addr.type must be 'unix' or 'fd'" is not visible in introspection.
> >> Awkward.  Practical problem only if other addresses ever become
> >> available here.  Is that possible?
> >
> > addr.type=fd itself has the same problem, because it is a file
> > descriptor without type information. Therefore the QMP client cannot
> > introspect which types of file descriptors can be passed.
> 
> Yes, but if introspection could tell us which which values of addr.type
> are valid, then a client should figure out the address families, as
> follows.  Any valid value other than 'fd' corresponds to an address
> family.  The set of values valid for addr.type therefore corresponds to
> a set of address families.  The address families in that set are all
> valid with 'fd', aren't they?

Yes, in this case the address families in addr.type are the ones also
supported by addr.type=fd.

> > Two ideas:
> >
> > 1. Introduce per-address family fd types (SocketAddrFdTcpInet,
> >    SocketAddrFdTcpInet6, SocketAddrFdUnix, etc) to express specific
> >    address families in the QAPI schema.
> >
> >    Then use per-command unions to express the address families supported
> >    by specific commands. For example,
> >    BlockExportOptionsVhostUserBlkSocketAddr would only allow
> >    SocketAddrUnix and SocketAddrFdUnix. That way new address families
> >    can be supported in the future and introspection reports.
> 
> Awkward.  These types would have to differ structurally, or else they
> are indistinguishable in introspection.
>
> > 2. Use a side-channel (query-features, I think we discussed something
> >    like this a while back) to report features that cannot be
> >    introspected.
> 
> We implemented this in the form of QAPI feature flags, visible in
> introspection.  You could do something like
> 
>   'addr': { 'type': 'SocketAddress',
>             'features': [ 'unix' ] }

That is nice.

> 
> > I think the added complexity for achieving full introspection is not
> > worth it. It becomes harder to define new QAPI commands, increases the
> > chance of errors, and is more tedious to program for clients/servers.
> 
> Hence my question: is it possible that address families other than unix
> become available here?
> 
> When that happens, we have an introspection problem of the sort we
> common solve with a feature flag.
> 
> > Accepting any SocketAddr seems reasonable to me since vhost-user
> > requires an address family that has file descriptor passing. Very few
> > address families support this feature and we don't expect to add new
> > ones often.
> 
> Your answer appears to be "yes in theory, quite unlikely in practice".
> Correct?

Yes.

Stefan

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

  reply	other threads:[~2020-10-01 15:28 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-24 15:15 [PATCH v2 00/13] block/export: convert vhost-user-blk-server to block exports API Stefan Hajnoczi
2020-09-24 15:15 ` [PATCH v2 01/13] block/export: shorten serial string to fit Stefan Hajnoczi
2020-09-24 15:15 ` [PATCH v2 02/13] util/vhost-user-server: s/fileds/fields/ typo fix Stefan Hajnoczi
2020-09-24 15:15 ` [PATCH v2 03/13] util/vhost-user-server: drop unnecessary QOM cast Stefan Hajnoczi
2020-09-24 15:15 ` [PATCH v2 04/13] util/vhost-user-server: drop unnecessary watch deletion Stefan Hajnoczi
2020-09-24 15:15 ` [PATCH v2 05/13] block/export: consolidate request structs into VuBlockReq Stefan Hajnoczi
2020-09-24 15:15 ` [PATCH v2 06/13] util/vhost-user-server: drop unused DevicePanicNotifier Stefan Hajnoczi
2020-09-24 15:15 ` [PATCH v2 07/13] util/vhost-user-server: fix memory leak in vu_message_read() Stefan Hajnoczi
2020-09-24 15:15 ` [PATCH v2 08/13] util/vhost-user-server: check EOF when reading payload Stefan Hajnoczi
2020-09-24 15:15 ` [PATCH v2 09/13] util/vhost-user-server: rework vu_client_trip() coroutine lifecycle Stefan Hajnoczi
2020-09-24 15:15 ` [PATCH v2 10/13] block/export: report flush errors Stefan Hajnoczi
2020-09-24 15:15 ` [PATCH v2 11/13] block/export: convert vhost-user-blk server to block export API Stefan Hajnoczi
2020-09-30  5:28   ` Markus Armbruster
2020-09-30  9:45     ` Stefan Hajnoczi
2020-09-30 14:33       ` Markus Armbruster
2020-10-01 15:25         ` Stefan Hajnoczi [this message]
2020-10-02  5:20           ` Markus Armbruster
2020-10-08 16:02             ` Stefan Hajnoczi
2020-09-24 15:15 ` [PATCH v2 12/13] util/vhost-user-server: move header to include/ Stefan Hajnoczi
2020-09-24 15:15 ` [PATCH v2 13/13] util/vhost-user-server: use static library in meson.build Stefan Hajnoczi
2020-10-09 10:18 ` [PATCH v2 00/13] block/export: convert vhost-user-blk-server to block exports API Stefan Hajnoczi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201001152515.GD559957@stefanha-x1.localdomain \
    --to=stefanha@redhat.com \
    --cc=armbru@redhat.com \
    --cc=coiby.xu@gmail.com \
    --cc=kwolf@redhat.com \
    --cc=lvivier@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=thuth@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.