[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