[libvirt] [PATCHv2 07/26] snapshot: track current snapshot across restarts
Eric Blake
eblake at redhat.com
Thu Aug 18 16:08:15 UTC 2011
On 08/15/2011 05:33 PM, Eric Blake wrote:
> Audit all changes to the qemu vm->current_snapshot, and make them
> update the saved xml file for both the previous and the new
> snapshot, so that there is always at most one snapshot with
> <active>1</active> in the xml, and that snapshot is used as the
> current snapshot even across libvirtd restarts.
>
> @@ -8780,7 +8798,17 @@ static int qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
> goto cleanup;
> }
>
> - vm->current_snapshot = snap;
> + if (vm->current_snapshot) {
> + vm->current_snapshot->def->current = false;
> + if (qemuDomainSnapshotWriteMetadata(vm, vm->current_snapshot,
> + driver->snapshotDir)< 0)
> + goto cleanup;
> + vm->current_snapshot = NULL;
> + /* XXX Should we restore vm->current_snapshot after this point
> + * in the failure cases where we know there was no change? */
> + }
> +
> + snap->def->current = true;
>
Another fix to squash in - after assigning vm->current_snapshot to NULL,
restarting from a stopped state needs to start from the correct snapshot.
diff --git i/src/qemu/qemu_driver.c w/src/qemu/qemu_driver.c
index 8f1086a..b8202ae 100644
--- i/src/qemu/qemu_driver.c
+++ w/src/qemu/qemu_driver.c
@@ -9140,7 +9140,7 @@ static int
qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
virDomainObjAssignDef(vm, config, false);
rc = qemuProcessStart(snapshot->domain->conn, driver, vm,
NULL,
- true, false, -1, NULL,
vm->current_snapshot,
+ true, false, -1, NULL, snap,
VIR_VM_OP_CREATE);
virDomainAuditStart(vm, "from-snapshot", rc >= 0);
if (rc < 0)
--
Eric Blake eblake at redhat.com +1-801-349-2682
Libvirt virtualization library http://libvirt.org
More information about the libvir-list
mailing list