Reviewed-by: Konstantin Kostiuk <kkost...@redhat.com>

On Fri, Jul 12, 2024 at 4:25 PM Daniel P. Berrangé <berra...@redhat.com>
wrote:

> Some commands were blocked based on CONFIG_FSFREEZE, but their
> impl had nothing todo with CONFIG_FSFREEZE, and were instead
> either Linux-only, or Win+Linux-only.
>
> 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 stats and fsinfo commands on
> platforms that can't support them.
>
> The command will be rejected at QMP dispatch time instead,
> avoiding reimplementing rejection by blocking the stub commands.
> This changes the error message for affected commands from
>
>     {"class": "CommandNotFound", "desc": "Command FOO has been disabled"}
>
> to
>
>     {"class": "CommandNotFound", "desc": "The command FOO has not been
> found"}
>
> 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é <berra...@redhat.com>
> ---
>  qga/commands-bsd.c   | 24 -----------------------
>  qga/commands-posix.c | 30 ++---------------------------
>  qga/qapi-schema.json | 45 +++++++++++++++++++++++++++-----------------
>  3 files changed, 30 insertions(+), 69 deletions(-)
>
> diff --git a/qga/commands-bsd.c b/qga/commands-bsd.c
> index 17bddda1cf..9ce48af311 100644
> --- a/qga/commands-bsd.c
> +++ b/qga/commands-bsd.c
> @@ -149,30 +149,6 @@ int qmp_guest_fsfreeze_do_thaw(Error **errp)
>      }
>      return ret;
>  }
> -
> -GuestFilesystemInfoList *qmp_guest_get_fsinfo(Error **errp)
> -{
> -    error_setg(errp, QERR_UNSUPPORTED);
> -    return NULL;
> -}
> -
> -GuestDiskInfoList *qmp_guest_get_disks(Error **errp)
> -{
> -    error_setg(errp, QERR_UNSUPPORTED);
> -    return NULL;
> -}
> -
> -GuestDiskStatsInfoList *qmp_guest_get_diskstats(Error **errp)
> -{
> -    error_setg(errp, QERR_UNSUPPORTED);
> -    return NULL;
> -}
> -
> -GuestCpuStatsList *qmp_guest_get_cpustats(Error **errp)
> -{
> -    error_setg(errp, QERR_UNSUPPORTED);
> -    return NULL;
> -}
>  #endif /* CONFIG_FSFREEZE */
>
>  #ifdef HAVE_GETIFADDRS
> diff --git a/qga/commands-posix.c b/qga/commands-posix.c
> index 09d08ee2ca..838dc3cf98 100644
> --- a/qga/commands-posix.c
> +++ b/qga/commands-posix.c
> @@ -1146,12 +1146,6 @@ error:
>
>  #if !defined(CONFIG_FSFREEZE)
>
> -GuestFilesystemInfoList *qmp_guest_get_fsinfo(Error **errp)
> -{
> -    error_setg(errp, QERR_UNSUPPORTED);
> -    return NULL;
> -}
> -
>  GuestFsfreezeStatus qmp_guest_fsfreeze_status(Error **errp)
>  {
>      error_setg(errp, QERR_UNSUPPORTED);
> @@ -1181,25 +1175,6 @@ int64_t qmp_guest_fsfreeze_thaw(Error **errp)
>
>      return 0;
>  }
> -
> -GuestDiskInfoList *qmp_guest_get_disks(Error **errp)
> -{
> -    error_setg(errp, QERR_UNSUPPORTED);
> -    return NULL;
> -}
> -
> -GuestDiskStatsInfoList *qmp_guest_get_diskstats(Error **errp)
> -{
> -    error_setg(errp, QERR_UNSUPPORTED);
> -    return NULL;
> -}
> -
> -GuestCpuStatsList *qmp_guest_get_cpustats(Error **errp)
> -{
> -    error_setg(errp, QERR_UNSUPPORTED);
> -    return NULL;
> -}
> -
>  #endif /* CONFIG_FSFREEZE */
>
>  #if !defined(CONFIG_FSTRIM)
> @@ -1217,10 +1192,9 @@ GList *ga_command_init_blockedrpcs(GList
> *blockedrpcs)
>  #if !defined(CONFIG_FSFREEZE)
>      {
>          const char *list[] = {
> -            "guest-get-fsinfo", "guest-fsfreeze-status",
> +            "guest-fsfreeze-status",
>              "guest-fsfreeze-freeze", "guest-fsfreeze-freeze-list",
> -            "guest-fsfreeze-thaw", "guest-get-fsinfo",
> -            "guest-get-disks", NULL};
> +            "guest-fsfreeze-thaw", NULL};
>          char **p = (char **)list;
>
>          while (*p) {
> diff --git a/qga/qapi-schema.json b/qga/qapi-schema.json
> index 79ed4f0e21..9bd5aa53bc 100644
> --- a/qga/qapi-schema.json
> +++ b/qga/qapi-schema.json
> @@ -870,7 +870,8 @@
>  { 'enum': 'GuestDiskBusType',
>    'data': [ 'ide', 'fdc', 'scsi', 'virtio', 'xen', 'usb', 'uml', 'sata',
>              'sd', 'unknown', 'ieee1394', 'ssa', 'fibre', 'raid', 'iscsi',
> -            'sas', 'mmc', 'virtual', 'file-backed-virtual', 'nvme' ] }
> +            'sas', 'mmc', 'virtual', 'file-backed-virtual', 'nvme' ],
> +  'if': { 'any': [ 'CONFIG_WIN32', 'CONFIG_LINUX' ] } }
>
>
>  ##
> @@ -888,7 +889,8 @@
>  ##
>  { 'struct': 'GuestPCIAddress',
>    'data': {'domain': 'int', 'bus': 'int',
> -           'slot': 'int', 'function': 'int'} }
> +           'slot': 'int', 'function': 'int'},
> +  'if': { 'any': [ 'CONFIG_WIN32', 'CONFIG_LINUX' ] } }
>
>  ##
>  # @GuestCCWAddress:
> @@ -907,7 +909,8 @@
>    'data': {'cssid': 'int',
>             'ssid': 'int',
>             'subchno': 'int',
> -           'devno': 'int'} }
> +           'devno': 'int'},
> +  'if': { 'any': [ 'CONFIG_WIN32', 'CONFIG_LINUX' ] } }
>
>  ##
>  # @GuestDiskAddress:
> @@ -936,7 +939,8 @@
>             'bus-type': 'GuestDiskBusType',
>             'bus': 'int', 'target': 'int', 'unit': 'int',
>             '*serial': 'str', '*dev': 'str',
> -           '*ccw-address': 'GuestCCWAddress'} }
> +           '*ccw-address': 'GuestCCWAddress'},
> +  'if': { 'any': [ 'CONFIG_WIN32', 'CONFIG_LINUX' ] } }
>
>  ##
>  # @GuestNVMeSmart:
> @@ -973,7 +977,8 @@
>             'media-errors-lo': 'uint64',
>             'media-errors-hi': 'uint64',
>             'number-of-error-log-entries-lo': 'uint64',
> -           'number-of-error-log-entries-hi': 'uint64' } }
> +           'number-of-error-log-entries-hi': 'uint64' },
> +  'if': { 'any': [ 'CONFIG_WIN32', 'CONFIG_LINUX' ] } }
>
>  ##
>  # @GuestDiskSmart:
> @@ -987,7 +992,8 @@
>  { 'union': 'GuestDiskSmart',
>    'base': { 'type': 'GuestDiskBusType' },
>    'discriminator': 'type',
> -  'data': { 'nvme': 'GuestNVMeSmart' } }
> +  'data': { 'nvme': 'GuestNVMeSmart' },
> +  'if': { 'any': [ 'CONFIG_WIN32', 'CONFIG_LINUX' ] } }
>
>  ##
>  # @GuestDiskInfo:
> @@ -1012,7 +1018,8 @@
>  { 'struct': 'GuestDiskInfo',
>    'data': {'name': 'str', 'partition': 'bool', '*dependencies': ['str'],
>             '*address': 'GuestDiskAddress', '*alias': 'str',
> -           '*smart': 'GuestDiskSmart'} }
> +           '*smart': 'GuestDiskSmart'},
> +  'if': { 'any': [ 'CONFIG_WIN32', 'CONFIG_LINUX' ] } }
>
>  ##
>  # @guest-get-disks:
> @@ -1025,7 +1032,8 @@
>  # Since: 5.2
>  ##
>  { 'command': 'guest-get-disks',
> -  'returns': ['GuestDiskInfo'] }
> +  'returns': ['GuestDiskInfo'],
> +  'if': { 'any': [ 'CONFIG_WIN32', 'CONFIG_LINUX' ] } }
>
>  ##
>  # @GuestFilesystemInfo:
> @@ -1051,7 +1059,8 @@
>  { 'struct': 'GuestFilesystemInfo',
>    'data': {'name': 'str', 'mountpoint': 'str', 'type': 'str',
>             '*used-bytes': 'uint64', '*total-bytes': 'uint64',
> -           '*total-bytes-privileged': 'uint64', 'disk':
> ['GuestDiskAddress']} }
> +           '*total-bytes-privileged': 'uint64', 'disk':
> ['GuestDiskAddress']},
> +  'if': { 'any': [ 'CONFIG_WIN32', 'CONFIG_LINUX' ] } }
>
>  ##
>  # @guest-get-fsinfo:
> @@ -1064,7 +1073,8 @@
>  # Since: 2.2
>  ##
>  { 'command': 'guest-get-fsinfo',
> -  'returns': ['GuestFilesystemInfo'] }
> +  'returns': ['GuestFilesystemInfo'],
> +  'if': { 'any': [ 'CONFIG_WIN32', 'CONFIG_LINUX' ] } }
>
>  ##
>  # @guest-set-user-password:
> @@ -1703,7 +1713,8 @@
>             '*ios-pgr': 'uint64',
>             '*total-ticks': 'uint64',
>             '*weight-ticks': 'uint64'
> -           } }
> +           },
> +  'if': 'CONFIG_LINUX' }
>
>  ##
>  # @GuestDiskStatsInfo:
> @@ -1721,7 +1732,7 @@
>             'major': 'uint64',
>             'minor': 'uint64',
>             'stats': 'GuestDiskStats' },
> -  'if': 'CONFIG_POSIX' }
> +  'if': 'CONFIG_LINUX' }
>
>  ##
>  # @guest-get-diskstats:
> @@ -1734,7 +1745,7 @@
>  ##
>  { 'command': 'guest-get-diskstats',
>    'returns': ['GuestDiskStatsInfo'],
> -  'if': 'CONFIG_POSIX'
> +  'if': 'CONFIG_LINUX'
>  }
>
>  ##
> @@ -1748,7 +1759,7 @@
>  ##
>  { 'enum': 'GuestCpuStatsType',
>    'data': [ 'linux' ],
> -  'if': 'CONFIG_POSIX' }
> +  'if': 'CONFIG_LINUX' }
>
>
>  ##
> @@ -1794,7 +1805,7 @@
>             '*guest': 'uint64',
>             '*guestnice': 'uint64'
>             },
> -  'if': 'CONFIG_POSIX' }
> +  'if': 'CONFIG_LINUX' }
>
>  ##
>  # @GuestCpuStats:
> @@ -1809,7 +1820,7 @@
>    'base': { 'type': 'GuestCpuStatsType' },
>    'discriminator': 'type',
>    'data': { 'linux': 'GuestLinuxCpuStats' },
> -  'if': 'CONFIG_POSIX' }
> +  'if': 'CONFIG_LINUX' }
>
>  ##
>  # @guest-get-cpustats:
> @@ -1822,5 +1833,5 @@
>  ##
>  { 'command': 'guest-get-cpustats',
>    'returns': ['GuestCpuStats'],
> -  'if': 'CONFIG_POSIX'
> +  'if': 'CONFIG_LINUX'
>  }
> --
> 2.45.1
>
>

Reply via email to