From: "Richard W.M. Jones" <rjones@redhat.com>
To: Eric Blake <eblake@redhat.com>
Cc: qemu-devel@nongnu.org, qemu-block@nongnu.org,
berrange@redhat.com, kwolf@redhat.com
Subject: Re: RFC: towards systemd socket activation in q-s-d
Date: Sat, 28 Jan 2023 07:49:35 +0000 [thread overview]
Message-ID: <20230128074935.GO7636@redhat.com> (raw)
In-Reply-To: <20230127212233.k6rlqkmubhovjxs4@redhat.com>
On Fri, Jan 27, 2023 at 03:26:15PM -0600, Eric Blake wrote:
> In https://bugzilla.redhat.com/show_bug.cgi?id=2055229, the question
> was raised on how to make qemu-storage-daemon sufficiently powerful to
> be a full-blown replacement to qemu-nbd. One of the features still
> lacking is the ability to do systemd socket activation (qemu-nbd does
> this, qemu-storage-daemon needs a way to do it).
>
> But that bug further noted that systemd supports LISTEN_FDNAMES to
> supply names to a passed-in fd (right now, qemu-nbd does not use
> names, but merely expects one fd in LISTEN_FDS). Dan had the idea
> that it would be nice to write a systemd file that passes in a socket
> name for a QMP socket, as in:
>
> [Socket]
> ListenStream=/var/run/myapp/qsd.qmp
> FileDescriptorName=qmp
> Service=myapp-qsd.service
>
> and further notes that QAPI SocketAddressType supports @fd which is a
> name in QMP (a previously-added fd passed through the older 'getfd'
> command, rather than the newer 'add-fd' command), but an integer on
> the command line. With LISTEN_FDNAMES, we could mix systemd socket
> activation with named fds for any command line usage that already
> supports SocketAddressType (not limited to just q-s-d usage).
I couldn't find a good description of LISTEN_FDNAMES anywhere, and we
don't use it in libnbd / nbdkit / qemu-nbd right now. So here's my
interpretation of what this environment variable means ...
Currently systemd socket activation in qemu-nbd or nbdkit uses only
LISTEN_PID and LISTEN_FDS, usually with a single fd being passed.
(I'll ignore LISTEN_PID.) So:
LISTEN_FDS=1
fd 3 --> NBD socket
This works because there's only one NBD protocol, it doesn't need to
be named.
However if we imagine that a superserver wants to run a webserver, it
might need to pass two sockets carrying distinct protocols (HTTP and
HTTPS). In this case it would use:
LISTEN_FDS=2
fd 3 --> HTTP socket
fd 4 --> HTTPS socket
LISTEN_FDNAMES=http:https
LISTEN_FDNAMES is telling the webserver that the first socket is HTTP
and the second is HTTPS, so it knows which protocol to negotiate on
each socket.
I believe what you're saying above is that you'd like to have the
ability to pass multiple sockets to q-s-d carrying distinct protocols,
with the obvious ones being NBD + QMP (although other combinations
could be possible, eg. NBD + vhost + QMP?):
LISTEN_FDS=2
fd 3 --> NBD socket
fd 4 --> QMP socket
LISTEN_FDNAMES=nbd:qmp
If my understanding is correct, then this makes sense. We might also
modify libnbd to pass LISTEN_FDNAMES=nbd in:
https://gitlab.com/nbdkit/libnbd/-/blob/master/generator/states-connect-socket-activation.c
(Current servers would ignore the new environment variable.)
> I'm at a point where I can take a shot at implementing this, but want
> some feedback on whether it is better to try to shoehorn a generic
> solution into the existing @fd member of the SocketAddressType union,
> or whether it would be better to add yet another union member
> @systemd-fd or some similar name to make it explicit when a command
> line parameter wants to refer to an fd being passed through systemd
> socket activation LISTEN_FDS and friends.
It sounds like the q-s-d command lines will be even more convoluted
and inelegant than before.
That's fine, but please keep qemu-nbd around as a sane alternative.
It might in the end just be a wrapper that translates the command line
to q-s-d. I don't believe it's ever going to be possible or desirable
to deprecate or remove qemu-nbd.
Rich.
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-builder quickly builds VMs from scratch
http://libguestfs.org/virt-builder.1.html
next prev parent reply other threads:[~2023-01-28 7:51 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-27 21:26 RFC: towards systemd socket activation in q-s-d Eric Blake
2023-01-28 7:49 ` Richard W.M. Jones [this message]
2023-01-30 14:58 ` Daniel P. Berrangé
2023-01-30 15:44 ` Richard W.M. Jones
2023-01-30 15:51 ` Daniel P. Berrangé
2023-01-30 16:45 ` Daniel P. Berrangé
2023-01-30 16:55 ` Richard W.M. Jones
2023-01-31 11:17 ` Kevin Wolf
2023-01-31 11:29 ` Daniel P. Berrangé
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=20230128074935.GO7636@redhat.com \
--to=rjones@redhat.com \
--cc=berrange@redhat.com \
--cc=eblake@redhat.com \
--cc=kwolf@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).