blockdev: add Abort transaction
The Abort action can be used to test QMP 'transaction' failure. Add it as the last action to exercise the .abort() and .cleanup() code paths for all previous actions. Reviewed-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
3037f36446
commit
78b18b78aa
15
blockdev.c
15
blockdev.c
@ -963,6 +963,16 @@ static void drive_backup_abort(BlkTransactionState *common)
|
||||
}
|
||||
}
|
||||
|
||||
static void abort_prepare(BlkTransactionState *common, Error **errp)
|
||||
{
|
||||
error_setg(errp, "Transaction aborted using Abort action");
|
||||
}
|
||||
|
||||
static void abort_commit(BlkTransactionState *common)
|
||||
{
|
||||
assert(false); /* this action never succeeds */
|
||||
}
|
||||
|
||||
static const BdrvActionOps actions[] = {
|
||||
[TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT_SYNC] = {
|
||||
.instance_size = sizeof(ExternalSnapshotState),
|
||||
@ -975,6 +985,11 @@ static const BdrvActionOps actions[] = {
|
||||
.prepare = drive_backup_prepare,
|
||||
.abort = drive_backup_abort,
|
||||
},
|
||||
[TRANSACTION_ACTION_KIND_ABORT] = {
|
||||
.instance_size = sizeof(BlkTransactionState),
|
||||
.prepare = abort_prepare,
|
||||
.commit = abort_commit,
|
||||
},
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -1659,6 +1659,16 @@
|
||||
'*on-source-error': 'BlockdevOnError',
|
||||
'*on-target-error': 'BlockdevOnError' } }
|
||||
|
||||
##
|
||||
# @Abort
|
||||
#
|
||||
# This action can be used to test transaction failure.
|
||||
#
|
||||
# Since: 1.6
|
||||
###
|
||||
{ 'type': 'Abort',
|
||||
'data': { } }
|
||||
|
||||
##
|
||||
# @TransactionAction
|
||||
#
|
||||
@ -1668,7 +1678,8 @@
|
||||
{ 'union': 'TransactionAction',
|
||||
'data': {
|
||||
'blockdev-snapshot-sync': 'BlockdevSnapshot',
|
||||
'drive-backup': 'DriveBackup'
|
||||
'drive-backup': 'DriveBackup',
|
||||
'abort': 'Abort'
|
||||
} }
|
||||
|
||||
##
|
||||
|
Loading…
Reference in New Issue
Block a user