On 28/03/2017 15:45, Markus Armbruster wrote: > It's been a long journey, but here we are. > > The supported blockdev-add is not compatible to its experimental > predecessors; bump all Since: tags to 2.9.
Can you document the differences in the 2.9 changelog? Paolo > x-blockdev-remove-medium, x-blockdev-insert-medium and > x-blockdev-change need a bit more work, so leave them alone for now. > > Signed-off-by: Markus Armbruster <arm...@redhat.com> > Reviewed-by: Max Reitz <mre...@redhat.com> > Reviewed-by: Eric Blake <ebl...@redhat.com> > --- > blockdev.c | 4 +-- > qapi/block-core.json | 95 > ++++++++++++++++++++------------------------------ > tests/qemu-iotests/139 | 8 ++--- > tests/qemu-iotests/141 | 4 +-- > tests/qemu-iotests/147 | 2 +- > 5 files changed, 47 insertions(+), 66 deletions(-) > > diff --git a/blockdev.c b/blockdev.c > index c5b2c2c..040c152 100644 > --- a/blockdev.c > +++ b/blockdev.c > @@ -2835,7 +2835,7 @@ void hmp_drive_del(Monitor *mon, const QDict *qdict) > > bs = bdrv_find_node(id); > if (bs) { > - qmp_x_blockdev_del(id, &local_err); > + qmp_blockdev_del(id, &local_err); > if (local_err) { > error_report_err(local_err); > } > @@ -3900,7 +3900,7 @@ fail: > visit_free(v); > } > > -void qmp_x_blockdev_del(const char *node_name, Error **errp) > +void qmp_blockdev_del(const char *node_name, Error **errp) > { > AioContext *aio_context; > BlockDriverState *bs; > diff --git a/qapi/block-core.json b/qapi/block-core.json > index 0f132fc..f938316 100644 > --- a/qapi/block-core.json > +++ b/qapi/block-core.json > @@ -2053,7 +2053,7 @@ > # @ignore: Ignore the request > # @unmap: Forward as an unmap request > # > -# Since: 1.7 > +# Since: 2.9 > ## > { 'enum': 'BlockdevDiscardOptions', > 'data': [ 'ignore', 'unmap' ] } > @@ -2082,7 +2082,7 @@ > # @threads: Use qemu's thread pool > # @native: Use native AIO backend (only Linux and Windows) > # > -# Since: 1.7 > +# Since: 2.9 > ## > { 'enum': 'BlockdevAioOptions', > 'data': [ 'threads', 'native' ] } > @@ -2097,7 +2097,7 @@ > # @no-flush: ignore any flush requests for the device (default: > # false) > # > -# Since: 1.7 > +# Since: 2.9 > ## > { 'struct': 'BlockdevCacheOptions', > 'data': { '*direct': 'bool', > @@ -2108,18 +2108,7 @@ > # > # Drivers that are supported in block device operations. > # > -# @host_device: Since 2.1 > -# @host_cdrom: Since 2.1 > -# @gluster: Since 2.7 > -# @nbd: Since 2.8 > -# @nfs: Since 2.8 > -# @replication: Since 2.8 > -# @ssh: Since 2.8 > -# @iscsi: Since 2.9 > -# @rbd: Since 2.9 > -# @sheepdog: Since 2.9 > -# > -# Since: 2.0 > +# Since: 2.9 > ## > { 'enum': 'BlockdevDriver', > 'data': [ 'blkdebug', 'blkverify', 'bochs', 'cloop', > @@ -2137,7 +2126,7 @@ > # @filename: path to the image file > # @aio: AIO backend (default: threads) (since: 2.8) > # > -# Since: 1.7 > +# Since: 2.9 > ## > { 'struct': 'BlockdevOptionsFile', > 'data': { 'filename': 'str', > @@ -2153,7 +2142,7 @@ > # requests. Default to zero which completes requests > immediately. > # (Since 2.4) > # > -# Since: 2.2 > +# Since: 2.9 > ## > { 'struct': 'BlockdevOptionsNull', > 'data': { '*size': 'int', '*latency-ns': 'uint64' } } > @@ -2173,7 +2162,7 @@ > # (since 2.4) > # @rw: whether to allow write operations (default: false) > # > -# Since: 1.7 > +# Since: 2.9 > ## > { 'struct': 'BlockdevOptionsVVFAT', > 'data': { 'dir': 'str', '*fat-type': 'int', '*floppy': 'bool', > @@ -2187,7 +2176,7 @@ > # > # @file: reference to or definition of the data source block device > # > -# Since: 1.7 > +# Since: 2.9 > ## > { 'struct': 'BlockdevOptionsGenericFormat', > 'data': { 'file': 'BlockdevRef' } } > @@ -2201,7 +2190,7 @@ > # the decryption key (since 2.6). Mandatory except when > # doing a metadata-only probe of the image. > # > -# Since: 2.6 > +# Since: 2.9 > ## > { 'struct': 'BlockdevOptionsLUKS', > 'base': 'BlockdevOptionsGenericFormat', > @@ -2219,7 +2208,7 @@ > # allowed to pass an empty string here in order to disable the > # default backing file. > # > -# Since: 1.7 > +# Since: 2.9 > ## > { 'struct': 'BlockdevOptionsGenericCOWFormat', > 'base': 'BlockdevOptionsGenericFormat', > @@ -2240,7 +2229,7 @@ > # > # @all: Perform all available overlap checks > # > -# Since: 2.2 > +# Since: 2.9 > ## > { 'enum': 'Qcow2OverlapCheckMode', > 'data': [ 'none', 'constant', 'cached', 'all' ] } > @@ -2255,7 +2244,7 @@ > # @template: Specifies a template mode which can be adjusted using the other > # flags, defaults to 'cached' > # > -# Since: 2.2 > +# Since: 2.9 > ## > { 'struct': 'Qcow2OverlapCheckFlags', > 'data': { '*template': 'Qcow2OverlapCheckMode', > @@ -2279,7 +2268,7 @@ > # > # @mode: named mode which chooses a specific set of flags > # > -# Since: 2.2 > +# Since: 2.9 > ## > { 'alternate': 'Qcow2OverlapChecks', > 'data': { 'flags': 'Qcow2OverlapCheckFlags', > @@ -2320,7 +2309,7 @@ > # caches. The interval is in seconds. The default > value > # is 0 and it disables this feature (since 2.5) > # > -# Since: 1.7 > +# Since: 2.9 > ## > { 'struct': 'BlockdevOptionsQcow2', > 'base': 'BlockdevOptionsGenericCOWFormat', > @@ -2347,7 +2336,7 @@ > # > # TODO: Expose the host_key_check option in QMP > # > -# Since: 2.8 > +# Since: 2.9 > ## > { 'struct': 'BlockdevOptionsSsh', > 'data': { 'server': 'InetSocketAddress', > @@ -2360,7 +2349,7 @@ > # > # Trigger events supported by blkdebug. > # > -# Since: 2.0 > +# Since: 2.9 > ## > { 'enum': 'BlkdebugEvent', 'prefix': 'BLKDBG', > 'data': [ 'l1_update', 'l1_grow_alloc_table', 'l1_grow_write_table', > @@ -2400,7 +2389,7 @@ > # > # @immediately: fail immediately; defaults to false > # > -# Since: 2.0 > +# Since: 2.9 > ## > { 'struct': 'BlkdebugInjectErrorOptions', > 'data': { 'event': 'BlkdebugEvent', > @@ -2423,7 +2412,7 @@ > # @new_state: the state identifier blkdebug is supposed to assume if > # this event is triggered > # > -# Since: 2.0 > +# Since: 2.9 > ## > { 'struct': 'BlkdebugSetStateOptions', > 'data': { 'event': 'BlkdebugEvent', > @@ -2446,7 +2435,7 @@ > # > # @set-state: array of state-change descriptions > # > -# Since: 2.0 > +# Since: 2.9 > ## > { 'struct': 'BlockdevOptionsBlkdebug', > 'data': { 'image': 'BlockdevRef', > @@ -2464,7 +2453,7 @@ > # > # @raw: raw image used for verification > # > -# Since: 2.0 > +# Since: 2.9 > ## > { 'struct': 'BlockdevOptionsBlkverify', > 'data': { 'test': 'BlockdevRef', > @@ -2479,7 +2468,7 @@ > # > # @fifo: read only from the first child that has not failed > # > -# Since: 2.2 > +# Since: 2.9 > ## > { 'enum': 'QuorumReadPattern', 'data': [ 'quorum', 'fifo' ] } > > @@ -2501,7 +2490,7 @@ > # @read-pattern: choose read pattern and set to quorum by default > # (Since 2.2) > # > -# Since: 2.0 > +# Since: 2.9 > ## > { 'struct': 'BlockdevOptionsQuorum', > 'data': { '*blkverify': 'bool', > @@ -2526,7 +2515,7 @@ > # > # @logfile: libgfapi log file (default /dev/stderr) (Since 2.8) > # > -# Since: 2.7 > +# Since: 2.9 > ## > { 'struct': 'BlockdevOptionsGluster', > 'data': { 'volume': 'str', > @@ -2685,7 +2674,7 @@ > # > # @secondary: Secondary mode, receive the vm's state from primary QEMU. > # > -# Since: 2.8 > +# Since: 2.9 > ## > { 'enum' : 'ReplicationMode', 'data' : [ 'primary', 'secondary' ] } > > @@ -2700,7 +2689,7 @@ > # node who owns the replication node chain. Must not be given in > # primary mode. > # > -# Since: 2.8 > +# Since: 2.9 > ## > { 'struct': 'BlockdevOptionsReplication', > 'base': 'BlockdevOptionsGenericFormat', > @@ -2714,7 +2703,7 @@ > # > # @inet: TCP transport > # > -# Since: 2.8 > +# Since: 2.9 > ## > { 'enum': 'NFSTransport', > 'data': [ 'inet' ] } > @@ -2728,7 +2717,7 @@ > # > # @host: host address for NFS server > # > -# Since: 2.8 > +# Since: 2.9 > ## > { 'struct': 'NFSServer', > 'data': { 'type': 'NFSTransport', > @@ -2763,7 +2752,7 @@ > # @debug: set the NFS debug level (max 2) (defaults > # to libnfs default) > # > -# Since: 2.8 > +# Since: 2.9 > ## > { 'struct': 'BlockdevOptionsNfs', > 'data': { 'server': 'NFSServer', > @@ -2782,7 +2771,7 @@ > # > # @filename: path to the image file > # > -# Since: 1.7 > +# Since: 2.9 > ## > { 'struct': 'BlockdevOptionsCurl', > 'data': { 'filename': 'str' } } > @@ -2798,7 +2787,7 @@ > # > # @tls-creds: TLS credentials ID > # > -# Since: 2.8 > +# Since: 2.9 > ## > { 'struct': 'BlockdevOptionsNbd', > 'data': { 'server': 'SocketAddress', > @@ -2813,7 +2802,7 @@ > # @offset: position where the block device starts > # @size: the assumed size of the device > # > -# Since: 2.8 > +# Since: 2.9 > ## > { 'struct': 'BlockdevOptionsRaw', > 'base': 'BlockdevOptionsGenericFormat', > @@ -2837,7 +2826,7 @@ > # > # Remaining options are determined by the block driver. > # > -# Since: 1.7 > +# Since: 2.9 > ## > { 'union': 'BlockdevOptions', > 'base': { 'driver': 'BlockdevDriver', > @@ -2894,7 +2883,7 @@ > # empty string means that no block device should be > # referenced. > # > -# Since: 1.7 > +# Since: 2.9 > ## > { 'alternate': 'BlockdevRef', > 'data': { 'definition': 'BlockdevOptions', > @@ -2907,11 +2896,7 @@ > # BlockBackend will be created; otherwise, @node-name is mandatory at the top > # level and no BlockBackend will be created. > # > -# Note: This command is still a work in progress. It doesn't support all > -# block drivers among other things. Stay away from it unless you want > -# to help with its development. > -# > -# Since: 1.7 > +# Since: 2.9 > # > # Example: > # > @@ -2957,7 +2942,7 @@ > { 'command': 'blockdev-add', 'data': 'BlockdevOptions', 'boxed': true } > > ## > -# @x-blockdev-del: > +# @blockdev-del: > # > # Deletes a block device that has been added using blockdev-add. > # The command will fail if the node is attached to a device or is > @@ -2965,11 +2950,7 @@ > # > # @node-name: Name of the graph node to delete. > # > -# Note: This command is still a work in progress and is considered > -# experimental. Stay away from it unless you want to help with its > -# development. > -# > -# Since: 2.5 > +# Since: 2.9 > # > # Example: > # > @@ -2985,13 +2966,13 @@ > # } > # <- { "return": {} } > # > -# -> { "execute": "x-blockdev-del", > +# -> { "execute": "blockdev-del", > # "arguments": { "node-name": "node0" } > # } > # <- { "return": {} } > # > ## > -{ 'command': 'x-blockdev-del', 'data': { 'node-name': 'str' } } > +{ 'command': 'blockdev-del', 'data': { 'node-name': 'str' } } > > ## > # @blockdev-open-tray: > diff --git a/tests/qemu-iotests/139 b/tests/qemu-iotests/139 > index 6d98e4f..175d8f0 100644 > --- a/tests/qemu-iotests/139 > +++ b/tests/qemu-iotests/139 > @@ -1,6 +1,6 @@ > #!/usr/bin/env python > # > -# Test cases for the QMP 'x-blockdev-del' command > +# Test cases for the QMP 'blockdev-del' command > # > # Copyright (C) 2015 Igalia, S.L. > # Author: Alberto Garcia <be...@igalia.com> > @@ -79,7 +79,7 @@ class TestBlockdevDel(iotests.QMPTestCase): > # Delete a BlockDriverState > def delBlockDriverState(self, node, expect_error = False): > self.checkBlockDriverState(node) > - result = self.vm.qmp('x-blockdev-del', node_name = node) > + result = self.vm.qmp('blockdev-del', node_name = node) > if expect_error: > self.assert_qmp(result, 'error/class', 'GenericError') > else: > @@ -173,7 +173,7 @@ class TestBlockdevDel(iotests.QMPTestCase): > self.wait_until_completed(id) > > # Add a BlkDebug node > - # Note that the purpose of this is to test the x-blockdev-del > + # Note that the purpose of this is to test the blockdev-del > # sanity checks, not to create a usable blkdebug drive > def addBlkDebug(self, debug, node): > self.checkBlockDriverState(node, False) > @@ -191,7 +191,7 @@ class TestBlockdevDel(iotests.QMPTestCase): > self.checkBlockDriverState(debug) > > # Add a BlkVerify node > - # Note that the purpose of this is to test the x-blockdev-del > + # Note that the purpose of this is to test the blockdev-del > # sanity checks, not to create a usable blkverify drive > def addBlkVerify(self, blkverify, test, raw): > self.checkBlockDriverState(test, False) > diff --git a/tests/qemu-iotests/141 b/tests/qemu-iotests/141 > index 6d8f0a1..27fb1cc 100755 > --- a/tests/qemu-iotests/141 > +++ b/tests/qemu-iotests/141 > @@ -65,7 +65,7 @@ test_blockjob() > > # We want this to return an error because the block job is still running > _send_qemu_cmd $QEMU_HANDLE \ > - "{'execute': 'x-blockdev-del', > + "{'execute': 'blockdev-del', > 'arguments': {'node-name': 'drv0'}}" \ > 'error' | _filter_generated_node_ids > > @@ -75,7 +75,7 @@ test_blockjob() > "$3" > > _send_qemu_cmd $QEMU_HANDLE \ > - "{'execute': 'x-blockdev-del', > + "{'execute': 'blockdev-del', > 'arguments': {'node-name': 'drv0'}}" \ > 'return' > } > diff --git a/tests/qemu-iotests/147 b/tests/qemu-iotests/147 > index 45469c9..cca75c5 100755 > --- a/tests/qemu-iotests/147 > +++ b/tests/qemu-iotests/147 > @@ -57,7 +57,7 @@ class NBDBlockdevAddBase(iotests.QMPTestCase): > filename) > break > > - result = self.vm.qmp('x-blockdev-del', node_name='nbd-blockdev') > + result = self.vm.qmp('blockdev-del', node_name='nbd-blockdev') > self.assert_qmp(result, 'return', {}) > > >