From: "Daniel P. Berrangé" <berrange@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: qemu-devel@nongnu.org, "Thomas Huth" <thuth@redhat.com>,
"Konstantin Kostiuk" <kkostiuk@redhat.com>,
"Michael Roth" <michael.roth@amd.com>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Marc-André Lureau" <marcandre.lureau@redhat.com>
Subject: Re: [PATCH 08/20] qga: conditionalize schema for commands unsupported on Windows
Date: Thu, 13 Jun 2024 12:43:13 +0100 [thread overview]
Message-ID: <ZmrbUTQW7woprq1n@redhat.com> (raw)
In-Reply-To: <87ed93k2hy.fsf@pond.sub.org>
On Tue, Jun 11, 2024 at 03:55:37PM +0200, Markus Armbruster wrote:
> Daniel P. Berrangé <berrange@redhat.com> writes:
>
> > Rather than creating stubs for every command that just return
> > QERR_UNSUPPORTED, use 'if' conditions in the QAPI schema to
> > fully exclude generation of the commands on Windows.
> >
> > The command will be rejected at QMP dispatch time instead,
> > avoiding reimplementing rejection by blocking the stub commands.
> >
> > This fixes inconsistency where some commands are implemented
> > as stubs, yet not added to the blockedrpc list.
> >
> > This has the additional benefit that the QGA protocol reference
> > now documents what conditions enable use of the command.
> >
> > Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> > ---
> > qga/commands-win32.c | 56 +-------------------------------------------
> > qga/qapi-schema.json | 45 +++++++++++++++++++++++------------
> > 2 files changed, 31 insertions(+), 70 deletions(-)
> >
> > diff --git a/qga/commands-win32.c b/qga/commands-win32.c
> > index 9fe670d5b4..2533e4c748 100644
> > --- a/qga/commands-win32.c
> > +++ b/qga/commands-win32.c
>
> [...]
>
> > /* add unsupported commands to the list of blocked RPCs */
> > GList *ga_command_init_blockedrpcs(GList *blockedrpcs)
> > {
> > - const char *list_unsupported[] = {
> > - "guest-suspend-hybrid",
> > - "guest-set-vcpus",
> > - "guest-get-memory-blocks", "guest-set-memory-blocks",
> > - "guest-get-memory-block-info",
> > - NULL};
> > - char **p = (char **)list_unsupported;
> > -
> > - while (*p) {
> > - blockedrpcs = g_list_append(blockedrpcs, g_strdup(*p++));
> > - }
> > -
> > if (!vss_init(true)) {
> > g_debug("vss_init failed, vss commands are going to be disabled");
> > const char *list[] = {
> > "guest-get-fsinfo", "guest-fsfreeze-status",
> > "guest-fsfreeze-freeze", "guest-fsfreeze-thaw", NULL};
> > - p = (char **)list;
> > + char **p = (char **)list;
> >
> > while (*p) {
> > blockedrpcs = g_list_append(blockedrpcs, g_strdup(*p++));
> }
> }
>
> return blockedrpcs;
> }
>
> Four commands get disabled when vss_init() fails, i.e. when qga-vss.dll
> can't be loaded and initialized.
>
> Three of the four commands do this first:
>
> if (!vss_initialized()) {
> error_setg(errp, QERR_UNSUPPORTED);
> return 0;
> }
>
> The execption is qmp_guest_get_fsinfo().
>
> vss_initialized() returns true between successful vss_init() and
> vss_deinit().
>
> Aside: we call vss_init() in three places. Two of them init, call
> something, then deinit. Weird. Moving on.
The two odd balls are a special case for the Windows only --service
argument, which installs a Windows system service for VSS. In that
case, the QGA immediately exits after (un)installing the service.
So the vss_init+vss_deinit pairly makes sense there.
> If these commands are meant to be only available when the DLL is, then
> having them check vss_initialized() is useless.
The DLL should always exist unless the install is broken, but versions
of Windows prior to win2k3 don't support the required APIs, so vss_init
could fail.
> Conversely, if the check isn't useless, then the "make it available
> only" business is.
The 'make it available only" business is bad practice, as it does not
allow a caller to distinguish between the admin manually disabling
these commands, vs the commands being unavailable due to the OS not
supporting the feature. This distinction is important to preserve
to benefit those triaging bugs about why this might fail.
I'm going to get rid of the runtime blocking in ga_command_init_blockedrpcs,
and also replace QERR_UNSUPPORTED with a more targetted error message to
clearly articulate why the commands are failing.
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
next prev parent reply other threads:[~2024-06-13 11:44 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-04 13:49 [PATCH 00/20] qga: clean up command source locations and conditionals Daniel P. Berrangé
2024-06-04 13:49 ` [PATCH 01/20] qga: drop blocking of guest-get-memory-block-size command Daniel P. Berrangé
2024-06-06 8:05 ` Manos Pitsidianakis
2024-06-04 13:49 ` [PATCH 02/20] qga: move linux vcpu command impls to commands-linux.c Daniel P. Berrangé
2024-06-06 8:08 ` Manos Pitsidianakis
2024-06-04 13:49 ` [PATCH 03/20] qga: move linux suspend " Daniel P. Berrangé
2024-06-06 8:17 ` Manos Pitsidianakis
2024-06-04 13:49 ` [PATCH 04/20] qga: move linux fs/disk " Daniel P. Berrangé
2024-06-06 8:19 ` Manos Pitsidianakis
2024-06-04 13:49 ` [PATCH 05/20] qga: move linux disk/cpu stats " Daniel P. Berrangé
2024-06-04 13:49 ` [PATCH 06/20] qga: move linux memory block " Daniel P. Berrangé
2024-06-04 13:49 ` [PATCH 07/20] qga: move CONFIG_FSFREEZE/TRIM to be meson defined options Daniel P. Berrangé
2024-06-05 8:47 ` Marc-André Lureau
2024-06-05 8:53 ` Daniel P. Berrangé
2024-06-04 13:49 ` [PATCH 08/20] qga: conditionalize schema for commands unsupported on Windows Daniel P. Berrangé
2024-06-11 9:13 ` Markus Armbruster
2024-06-13 11:26 ` Daniel P. Berrangé
2024-06-11 13:55 ` Markus Armbruster
2024-06-11 14:03 ` Daniel P. Berrangé
2024-06-13 11:43 ` Daniel P. Berrangé [this message]
2024-06-13 11:55 ` Konstantin Kostiuk
2024-06-04 13:49 ` [PATCH 09/20] qga: conditionalize schema for commands unsupported on non-Linux POSIX Daniel P. Berrangé
2024-06-04 13:49 ` [PATCH 10/20] qga: conditionalize schema for commands requiring getifaddrs Daniel P. Berrangé
2024-06-04 13:49 ` [PATCH 11/20] qga: conditionalize schema for commands requiring linux/win32 Daniel P. Berrangé
2024-06-04 13:49 ` [PATCH 12/20] qga: conditionalize schema for commands only supported on Windows Daniel P. Berrangé
2024-06-04 13:49 ` [PATCH 13/20] qga: conditionalize schema for commands requiring fsfreeze Daniel P. Berrangé
2024-06-04 13:49 ` [PATCH 14/20] qga: conditionalize schema for commands requiring fstrim Daniel P. Berrangé
2024-06-04 13:49 ` [PATCH 15/20] qga: conditionalize schema for commands requiring libudev Daniel P. Berrangé
2024-06-04 13:49 ` [PATCH 16/20] qga: conditionalize schema for commands requiring utmpx Daniel P. Berrangé
2024-06-04 13:49 ` [PATCH 17/20] qga: conditionalize schema for commands not supported on other UNIX Daniel P. Berrangé
2024-06-04 13:49 ` [PATCH 18/20] qga: add note about where to disable commands for a platform Daniel P. Berrangé
2024-06-11 8:08 ` Markus Armbruster
2024-06-11 8:49 ` Daniel P. Berrangé
2024-06-13 11:48 ` Daniel P. Berrangé
2024-06-04 13:49 ` [PATCH 19/20] qga: move declare of QGAConfig struct to top of file Daniel P. Berrangé
2024-06-05 9:58 ` Marc-André Lureau
2024-06-04 13:49 ` [PATCH 20/20] qga: centralize logic for disabling/enabling commands Daniel P. Berrangé
2024-06-05 10:37 ` Marc-André Lureau
2024-06-05 10:39 ` Marc-André Lureau
2024-06-05 10:41 ` 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=ZmrbUTQW7woprq1n@redhat.com \
--to=berrange@redhat.com \
--cc=armbru@redhat.com \
--cc=kkostiuk@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=michael.roth@amd.com \
--cc=pbonzini@redhat.com \
--cc=philmd@linaro.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 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).