# -*- 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
#
# .. 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'
          }
}
