# -*- 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.
#
# 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.
#
# 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' ],
            '*properties': 'TransactionProperties'
          }
}
