mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
qemu: checkpoint: Extract and export rollback of checkpoint metadata storing
If we are certain that the checkpoint creation failed we remove the metadata from the list. To allow reusing this in the backup code add a new helper and export it. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
@@ -400,6 +400,24 @@ qemuCheckpointCreateCommon(virQEMUDriverPtr driver,
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* qemuCheckpointRollbackMetadata:
|
||||
* @vm: domain object
|
||||
* @chk: checkpoint object
|
||||
*
|
||||
* If @chk is not null remove the @chk object from the list of checkpoints of @vm.
|
||||
*/
|
||||
void
|
||||
qemuCheckpointRollbackMetadata(virDomainObjPtr vm,
|
||||
virDomainMomentObjPtr chk)
|
||||
{
|
||||
if (!chk)
|
||||
return;
|
||||
|
||||
virDomainCheckpointObjListRemove(vm->checkpoints, chk);
|
||||
}
|
||||
|
||||
|
||||
static virDomainMomentObjPtr
|
||||
qemuCheckpointCreate(virQEMUDriverPtr driver,
|
||||
virDomainObjPtr vm,
|
||||
@@ -415,7 +433,7 @@ qemuCheckpointCreate(virQEMUDriverPtr driver,
|
||||
qemuDomainObjEnterMonitor(driver, vm);
|
||||
rc = qemuMonitorTransaction(qemuDomainGetMonitor(vm), &actions);
|
||||
if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0) {
|
||||
virDomainCheckpointObjListRemove(vm->checkpoints, chk);
|
||||
qemuCheckpointRollbackMetadata(vm, chk);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -441,7 +459,7 @@ qemuCheckpointCreateFinalize(virQEMUDriverPtr driver,
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("unable to save metadata for checkpoint %s"),
|
||||
chk->def->name);
|
||||
virDomainCheckpointObjListRemove(vm->checkpoints, chk);
|
||||
qemuCheckpointRollbackMetadata(vm, chk);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
@@ -67,3 +67,7 @@ qemuCheckpointCreateFinalize(virQEMUDriverPtr driver,
|
||||
virQEMUDriverConfigPtr cfg,
|
||||
virDomainMomentObjPtr chk,
|
||||
bool update_current);
|
||||
|
||||
void
|
||||
qemuCheckpointRollbackMetadata(virDomainObjPtr vm,
|
||||
virDomainMomentObjPtr chk);
|
||||
|
||||
Reference in New Issue
Block a user