Skip to content

Commit

Permalink
qmp-commands: move 'transaction' doc to schema
Browse files Browse the repository at this point in the history
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
  • Loading branch information
elmarco authored and Markus Armbruster committed Jan 16, 2017
1 parent 7b338db commit 5c82b0f
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 86 deletions.
86 changes: 0 additions & 86 deletions docs/qmp-commands.txt
Expand Up @@ -699,92 +699,6 @@ Example:
"target": "tgt-id" } }
<- { "return": {} }

transaction
-----------

Atomically operate on one or more block devices. Operations that are
currently supported:

- drive-backup
- blockdev-backup
- blockdev-snapshot-sync
- blockdev-snapshot-internal-sync
- abort
- block-dirty-bitmap-add
- block-dirty-bitmap-clear

Refer to the qemu/qapi-schema.json file for minimum required QEMU
versions for these operations. A list of dictionaries is accepted,
that contains the actions to be performed. If there is any failure
performing any of the operations, all operations for the group are
abandoned.

For external snapshots, the dictionary contains the device, the file to use for
the new snapshot, and the format. The default format, if not specified, is
qcow2.

Each new snapshot defaults to being created by QEMU (wiping any
contents if the file already exists), but it is also possible to reuse
an externally-created file. In the latter case, you should ensure that
the new image file has the same contents as the current one; QEMU cannot
perform any meaningful check. Typically this is achieved by using the
current image file as the backing file for the new image.

On failure, the original disks pre-snapshot attempt will be used.

For internal snapshots, the dictionary contains the device and the snapshot's
name. If an internal snapshot matching name already exists, the request will
be rejected. Only some image formats support it, for example, qcow2, rbd,
and sheepdog.

On failure, qemu will try delete the newly created internal snapshot in the
transaction. When an I/O error occurs during deletion, the user needs to fix
it later with qemu-img or other command.

Arguments:

actions array:
- "type": the operation to perform (json-string). Possible
values: "drive-backup", "blockdev-backup",
"blockdev-snapshot-sync",
"blockdev-snapshot-internal-sync",
"abort", "block-dirty-bitmap-add",
"block-dirty-bitmap-clear"
- "data": a dictionary. The contents depend on the value
of "type". When "type" is "blockdev-snapshot-sync":
- "device": device name to snapshot (json-string)
- "node-name": graph node name to snapshot (json-string)
- "snapshot-file": name of new image file (json-string)
- "snapshot-node-name": graph node name of the new snapshot (json-string)
- "format": format of new image (json-string, optional)
- "mode": whether and how QEMU should create the snapshot file
(NewImageMode, optional, default "absolute-paths")
When "type" is "blockdev-snapshot-internal-sync":
- "device": the device name or node-name of a root node to snapshot
(json-string)
- "name": name of the new snapshot (json-string)

Example:

-> { "execute": "transaction",
"arguments": { "actions": [
{ "type": "blockdev-snapshot-sync", "data" : { "device": "ide-hd0",
"snapshot-file": "/some/place/my-image",
"format": "qcow2" } },
{ "type": "blockdev-snapshot-sync", "data" : { "node-name": "myfile",
"snapshot-file": "/some/place/my-image2",
"snapshot-node-name": "node3432",
"mode": "existing",
"format": "qcow2" } },
{ "type": "blockdev-snapshot-sync", "data" : { "device": "ide-hd1",
"snapshot-file": "/some/place/my-image2",
"mode": "existing",
"format": "qcow2" } },
{ "type": "blockdev-snapshot-internal-sync", "data" : {
"device": "ide-hd2",
"name": "snapshot0" } } ] } }
<- { "return": {} }

block-dirty-bitmap-add
----------------------
Since 2.4
Expand Down
45 changes: 45 additions & 0 deletions qapi-schema.json
Expand Up @@ -2471,6 +2471,28 @@
# operation fails, then the entire set of actions will be abandoned and the
# appropriate error returned.
#
# For external snapshots, the dictionary contains the device, the file to use for
# the new snapshot, and the format. The default format, if not specified, is
# qcow2.
#
# Each new snapshot defaults to being created by QEMU (wiping any
# contents if the file already exists), but it is also possible to reuse
# an externally-created file. In the latter case, you should ensure that
# the new image file has the same contents as the current one; QEMU cannot
# perform any meaningful check. Typically this is achieved by using the
# current image file as the backing file for the new image.
#
# On failure, the original disks pre-snapshot attempt will be used.
#
# For internal snapshots, the dictionary contains the device and the snapshot's
# name. If an internal snapshot matching name already exists, the request will
# be rejected. Only some image formats support it, for example, qcow2, rbd,
# and sheepdog.
#
# On failure, qemu will try delete the newly created internal snapshot in the
# transaction. When an I/O error occurs during deletion, the user needs to fix
# it later with qemu-img or other command.
#
# @actions: List of @TransactionAction;
# information needed for the respective operations.
#
Expand All @@ -2479,13 +2501,36 @@
# for additional detail.
#
# Returns: nothing on success
#
# Errors depend on the operations of the transaction
#
# Note: The transaction aborts on the first failure. Therefore, there will be
# information on only one failed operation returned in an error condition, and
# subsequent actions will not have been attempted.
#
# Since: 1.1
#
# Example:
#
# -> { "execute": "transaction",
# "arguments": { "actions": [
# { "type": "blockdev-snapshot-sync", "data" : { "device": "ide-hd0",
# "snapshot-file": "/some/place/my-image",
# "format": "qcow2" } },
# { "type": "blockdev-snapshot-sync", "data" : { "node-name": "myfile",
# "snapshot-file": "/some/place/my-image2",
# "snapshot-node-name": "node3432",
# "mode": "existing",
# "format": "qcow2" } },
# { "type": "blockdev-snapshot-sync", "data" : { "device": "ide-hd1",
# "snapshot-file": "/some/place/my-image2",
# "mode": "existing",
# "format": "qcow2" } },
# { "type": "blockdev-snapshot-internal-sync", "data" : {
# "device": "ide-hd2",
# "name": "snapshot0" } } ] } }
# <- { "return": {} }
#
##
{ 'command': 'transaction',
'data': { 'actions': [ 'TransactionAction' ],
Expand Down

0 comments on commit 5c82b0f

Please sign in to comment.