qemu/qapi/transaction.json

273 lines
7.6 KiB
JSON
Raw Normal View History

# -*- Mode: Python -*-
# vim: filetype=python
#
##
# = Transactions
##
{ 'include': 'block-core.json' }
##
# @Abort:
#
# This action can be used to test transaction failure.
#
# Since: 1.6
##
{ 'struct': 'Abort',
'data': { } }
##
# @ActionCompletionMode:
#
# An enumeration of Transactional completion modes.
#
# @individual: Do not attempt to cancel any other Actions if any
# Actions fail after the Transaction request succeeds. All
# Actions that can complete successfully will do so without
# waiting on others. This is the default.
#
# @grouped: If any Action fails after the Transaction succeeds, cancel
# all Actions. Actions do not complete until all Actions are
# ready to complete. May be rejected by Actions that do not
# support this completion mode.
#
# Since: 2.5
##
{ 'enum': 'ActionCompletionMode',
'data': [ 'individual', 'grouped' ] }
##
# @TransactionActionKind:
#
# @abort: Since 1.6
#
# @block-dirty-bitmap-add: Since 2.5
#
# @block-dirty-bitmap-remove: Since 4.2
#
# @block-dirty-bitmap-clear: Since 2.5
#
# @block-dirty-bitmap-enable: Since 4.0
#
# @block-dirty-bitmap-disable: Since 4.0
#
# @block-dirty-bitmap-merge: Since 4.0
#
# @blockdev-backup: Since 2.3
#
# @blockdev-snapshot: Since 2.5
#
# @blockdev-snapshot-internal-sync: Since 1.7
#
# @blockdev-snapshot-sync: since 1.1
#
# @drive-backup: Since 1.6
#
# Features:
#
# @deprecated: Member @drive-backup is deprecated. Use member
# @blockdev-backup instead.
#
# Since: 1.1
##
{ 'enum': 'TransactionActionKind',
'data': [ 'abort', 'block-dirty-bitmap-add', 'block-dirty-bitmap-remove',
'block-dirty-bitmap-clear', 'block-dirty-bitmap-enable',
'block-dirty-bitmap-disable', 'block-dirty-bitmap-merge',
'blockdev-backup', 'blockdev-snapshot',
'blockdev-snapshot-internal-sync', 'blockdev-snapshot-sync',
{ 'name': 'drive-backup', 'features': [ 'deprecated' ] } ] }
##
# @AbortWrapper:
#
# Since: 1.6
##
{ 'struct': 'AbortWrapper',
'data': { 'data': 'Abort' } }
##
# @BlockDirtyBitmapAddWrapper:
#
# Since: 2.5
##
{ 'struct': 'BlockDirtyBitmapAddWrapper',
'data': { 'data': 'BlockDirtyBitmapAdd' } }
##
# @BlockDirtyBitmapWrapper:
#
# Since: 2.5
##
{ 'struct': 'BlockDirtyBitmapWrapper',
'data': { 'data': 'BlockDirtyBitmap' } }
##
# @BlockDirtyBitmapMergeWrapper:
#
# Since: 4.0
##
{ 'struct': 'BlockDirtyBitmapMergeWrapper',
'data': { 'data': 'BlockDirtyBitmapMerge' } }
##
# @BlockdevBackupWrapper:
#
# Since: 2.3
##
{ 'struct': 'BlockdevBackupWrapper',
'data': { 'data': 'BlockdevBackup' } }
##
# @BlockdevSnapshotWrapper:
#
# Since: 2.5
##
{ 'struct': 'BlockdevSnapshotWrapper',
'data': { 'data': 'BlockdevSnapshot' } }
##
# @BlockdevSnapshotInternalWrapper:
#
# Since: 1.7
##
{ 'struct': 'BlockdevSnapshotInternalWrapper',
'data': { 'data': 'BlockdevSnapshotInternal' } }
##
# @BlockdevSnapshotSyncWrapper:
#
# Since: 1.1
##
{ 'struct': 'BlockdevSnapshotSyncWrapper',
'data': { 'data': 'BlockdevSnapshotSync' } }
##
# @DriveBackupWrapper:
#
# Since: 1.6
##
{ 'struct': 'DriveBackupWrapper',
'data': { 'data': 'DriveBackup' } }
##
# @TransactionAction:
#
# A discriminated record of operations that can be performed with
# @transaction.
#
# @type: the operation to be performed
#
# Since: 1.1
##
{ 'union': 'TransactionAction',
'base': { 'type': 'TransactionActionKind' },
'discriminator': 'type',
'data': {
'abort': 'AbortWrapper',
'block-dirty-bitmap-add': 'BlockDirtyBitmapAddWrapper',
'block-dirty-bitmap-remove': 'BlockDirtyBitmapWrapper',
'block-dirty-bitmap-clear': 'BlockDirtyBitmapWrapper',
'block-dirty-bitmap-enable': 'BlockDirtyBitmapWrapper',
'block-dirty-bitmap-disable': 'BlockDirtyBitmapWrapper',
'block-dirty-bitmap-merge': 'BlockDirtyBitmapMergeWrapper',
'blockdev-backup': 'BlockdevBackupWrapper',
'blockdev-snapshot': 'BlockdevSnapshotWrapper',
'blockdev-snapshot-internal-sync': 'BlockdevSnapshotInternalWrapper',
'blockdev-snapshot-sync': 'BlockdevSnapshotSyncWrapper',
'drive-backup': 'DriveBackupWrapper'
} }
##
# @TransactionProperties:
#
# Optional arguments to modify the behavior of a Transaction.
#
# @completion-mode: Controls how jobs launched asynchronously by
# Actions will complete or fail as a group. See
# @ActionCompletionMode for details.
#
# Since: 2.5
##
{ 'struct': 'TransactionProperties',
'data': {
'*completion-mode': 'ActionCompletionMode'
}
}
##
# @transaction:
#
# Executes a number of transactionable QMP commands atomically. If
# any 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, and rbd,
#
# 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.
#
# @properties: structure of additional options to control the
# execution of the transaction. See @TransactionProperties for
# additional detail.
#
# Errors:
# - Any errors from commands in the transaction
#
qapi: convert "Note" sections to plain rST We do not need a dedicated section for notes. By eliminating a specially parsed section, these notes can be treated as normal rST paragraphs in the new QMP reference manual, and can be placed and styled much more flexibly. Convert all existing "Note" and "Notes" sections to pure rST. As part of the conversion, capitalize the first letter of each sentence and add trailing punctuation where appropriate to ensure notes look sensible and consistent in rendered HTML documentation. Markup is also re-aligned to the de-facto standard of 3 spaces for directives. Update docs/devel/qapi-code-gen.rst to reflect the new paradigm, and update the QAPI parser to prohibit "Note" sections while suggesting a new syntax. The exact formatting to use is a matter of taste, but a good candidate is simply: .. note:: lorem ipsum ... ... dolor sit amet ... ... consectetur adipiscing elit ... ... but there are other choices, too. The Sphinx readthedocs theme offers theming for the following forms (capitalization unimportant); all are adorned with a (!) symbol () in the title bar for rendered HTML docs. See https://sphinx-rtd-theme.readthedocs.io/en/stable/demo/demo.html#admonitions for examples of each directive/admonition in use. These are rendered in orange: .. Attention:: ... .. Caution:: ... .. WARNING:: ... These are rendered in red: .. DANGER:: ... .. Error:: ... These are rendered in green: .. Hint:: ... .. Important:: ... .. Tip:: ... These are rendered in blue: .. Note:: ... .. admonition:: custom title admonition body text This patch uses ".. note::" almost everywhere, with just two "caution" directives. Several instances of "Notes:" have been converted to merely ".. note::", or multiple ".. note::" where appropriate. ".. admonition:: notes" is used in a few places where we had an ordered list of multiple notes that would not make sense as standalone/separate admonitions. Two "Note:" following "Example:" have been turned into ordinary paragraphs within the example. NOTE: Because qapidoc.py does not attempt to preserve source ordering of sections, the conversion of Notes from a "tagged section" to an "untagged section" means that rendering order for some notes *may change* as a result of this patch. The forthcoming qapidoc.py rewrite strictly preserves source ordering in the rendered documentation, so this issue will be rectified in the new generator. Signed-off-by: John Snow <jsnow@redhat.com> Acked-by: Stefan Hajnoczi <stefanha@redhat.com> [for block*.json] Message-ID: <20240626222128.406106-11-jsnow@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> [Commit message clarified slightly, period added to one more note] Signed-off-by: Markus Armbruster <armbru@redhat.com>
2024-06-27 01:21:16 +03:00
# .. 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
#
# .. qmp-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' ],
'*properties': 'TransactionProperties'
}
}