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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user