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