On 3/12/21 9:32 AM, Markus Armbruster wrote:
> New option -compat lets you configure what to do when deprecated
> interfaces get used. This is intended for testing users of the
> management interfaces. It is experimental.
>
> -compat deprecated-input=<input-policy> configures what to do when
> deprecated input is received. Input policy can be "accept" (accept
> silently), or "reject" (reject the request with an error).
>
> -compat deprecated-output=<out-policy> configures what to do when
> deprecated output is sent. Output policy can be "accept" (pass on
> unchanged), or "hide" (filter out the deprecated parts).
>
> Default is "accept". Policies other than "accept" are implemented
> later in this series.
>
> For now, -compat covers only syntactic aspects of QMP, i.e. stuff
> tagged with feature 'deprecated'. We may want to extend it to cover
> semantic aspects, CLI, and experimental features.
>
> Note that there is no good way for management application to detect
> presence of -compat: it's not visible output of query-qmp-schema or
> query-command-line-options. Tolerable, because it's meant for
> testing. If running with -compat fails, skip the test.
>
> Signed-off-by: Markus Armbruster <[email protected]>
> Reviewed-by: Eric Blake <[email protected]>
> ---
> +++ b/qapi/compat.json
> @@ -0,0 +1,51 @@
> +# -*- Mode: Python -*-
> +
> +##
> +# = Compatibility policy
> +##
> +
> +##
> +# @CompatPolicyInput:
> +#
> +# Policy for handling "funny" input.
> +#
> +# @accept: Accept silently
> +# @reject: Reject with an error
> +#
> +# Since: 5.2
6.0
> +##
> +{ 'enum': 'CompatPolicyInput',
> + 'data': [ 'accept', 'reject' ] }
> +
> +##
> +# @CompatPolicyOutput:
> +#
> +# Policy for handling "funny" output.
> +#
> +# @accept: Pass on unchanged
> +# @hide: Filter out
> +#
> +# Since: 5.2
and here
> +##
> +{ 'enum': 'CompatPolicyOutput',
> + 'data': [ 'accept', 'hide' ] }
> +
> +##
> +# @CompatPolicy:
> +#
> +# Policy for handling deprecated management interfaces.
> +#
> +# This is intended for testing users of the management interfaces.
> +#
> +# Limitation: covers only syntactic aspects of QMP, i.e. stuff tagged
> +# with feature 'deprecated'. We may want to extend it to cover
> +# semantic aspects, CLI, and experimental features.
> +#
> +# @deprecated-input: how to handle deprecated input (default 'accept')
> +# @deprecated-output: how to handle deprecated output (default 'accept')
> +#
> +# Since: 5.2
and here
> +##
> +{ 'struct': 'CompatPolicy',
> + 'data': { '*deprecated-input': 'CompatPolicyInput',
> + '*deprecated-output': 'CompatPolicyOutput' } }
> diff --git a/qapi/qapi-schema.json b/qapi/qapi-schema.json
> index 3441c9a9ae..4912b9744e 100644
R-b still stands once you make the necessary tweaks.
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org