From acdc84c1077be7d347414f781014ea785ce41d7b Mon Sep 17 00:00:00 2001 From: Kevin Wolf Date: Fri, 13 Mar 2020 12:34:32 +0000 Subject: block: Versioned x-blockdev-reopen API with feature flag RH-Author: Kevin Wolf Message-id: <20200313123439.10548-7-kwolf@redhat.com> Patchwork-id: 94283 O-Subject: [RHEL-AV-8.2.0 qemu-kvm PATCH v2 06/13] block: Versioned x-blockdev-reopen API with feature flag Bugzilla: 1790482 1805143 RH-Acked-by: Eric Blake RH-Acked-by: John Snow RH-Acked-by: Daniel P. Berrange RH-Acked-by: Peter Krempa x-blockdev-reopen is still considered unstable upstream. libvirt needs (a small subset of) it for incremental backups, though. Add a downstream-only feature flag that effectively makes this a versioned interface. As long as the feature is present, we promise that we won't change the interface incompatibly. Incompatible changes to the command will require us to drop the feature flag (and possibly introduce a new one if the new version is still not stable upstream). Signed-off-by: Kevin Wolf Signed-off-by: Danilo C. L. de Paula --- qapi/block-core.json | 9 ++++++++- scripts/qapi/expr.py | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/qapi/block-core.json b/qapi/block-core.json index 6d227924d0..15ad8cee05 100644 --- a/qapi/block-core.json +++ b/qapi/block-core.json @@ -4166,10 +4166,17 @@ # image does not have a default backing file name as part of its # metadata. # +# Features: +# @__com.redhat_rhel-av-8_2_0-api: Versioning the downstream interface while +# it's still unstable upstream. As long as +# this flag is present, this command will not +# change incompatibly. +# # Since: 4.0 ## { 'command': 'x-blockdev-reopen', - 'data': 'BlockdevOptions', 'boxed': true } + 'data': 'BlockdevOptions', 'boxed': true, + 'features': [ '__com.redhat_rhel-av-8_2_0-api' ] } ## # @blockdev-del: diff --git a/scripts/qapi/expr.py b/scripts/qapi/expr.py index 540b3982b1..884874d205 100644 --- a/scripts/qapi/expr.py +++ b/scripts/qapi/expr.py @@ -215,7 +215,7 @@ def check_features(features, info): check_keys(f, info, source, ['name'], ['if']) check_name_is_str(f['name'], info, source) source = "%s '%s'" % (source, f['name']) - check_name_lower(f['name'], info, source) + check_name_lower(f['name'], info, source, permit_underscore=True) check_if(f, info, source) -- 2.27.0