[libvirt] [PATCHv2 07/20] snapshot: qemu: Add async job type for snapshots

Eric Blake eblake at redhat.com
Fri Nov 2 17:21:44 UTC 2012


On 11/01/2012 10:22 AM, Peter Krempa wrote:
> The new external system checkpoints will require an async job while the
> snapshot is taken. This patch adds QEMU_ASYNC_JOB_SNAPSHOT to track this
> job type.
> ---
>  src/qemu/qemu_domain.c  |  3 +++
>  src/qemu/qemu_domain.h  |  1 +
>  src/qemu/qemu_process.c | 19 +++++++++++++++++++
>  3 files changed, 23 insertions(+)
> 

> +++ b/src/qemu/qemu_process.c
> @@ -3046,6 +3046,25 @@ qemuProcessRecoverJob(struct qemud_driver *driver,
>          }
>          break;
> 
> +    case QEMU_ASYNC_JOB_SNAPSHOT:
> +        qemuDomainObjEnterMonitor(driver, vm);
> +        ignore_value(qemuMonitorMigrateCancel(priv->mon));
> +        qemuDomainObjExitMonitor(driver, vm);
> +         /* resume the domain but only if it was paused as a result of
> +          * creating the snapshot. */
> +        if (state == VIR_DOMAIN_PAUSED &&
> +            ((job->asyncJob == QEMU_ASYNC_JOB_SNAPSHOT &&

In this particular case branch, job->asyncJob is always equal to
QEMU_ASYNC_JOB_SNAPSHOT.

> +              reason == VIR_DOMAIN_PAUSED_MIGRATION) ||

Don't you mean VIR_DOMAIN_PAUSED_SNAPSHOT here?

I think you can simplify the code by squashing this in for less
redundant code.  ACK with this change:

diff --git i/src/qemu/qemu_process.c w/src/qemu/qemu_process.c
index 67a7157..84be755 100644
--- i/src/qemu/qemu_process.c
+++ w/src/qemu/qemu_process.c
@@ -3025,18 +3025,21 @@ qemuProcessRecoverJob(struct qemud_driver *driver,

     case QEMU_ASYNC_JOB_SAVE:
     case QEMU_ASYNC_JOB_DUMP:
+    case QEMU_ASYNC_JOB_SNAPSHOT:
         qemuDomainObjEnterMonitor(driver, vm);
         ignore_value(qemuMonitorMigrateCancel(priv->mon));
         qemuDomainObjExitMonitor(driver, vm);
         /* resume the domain but only if it was paused as a result of
-         * running save/dump operation.  Although we are recovering an
-         * async job, this function is run at startup and must resume
-         * things using sync monitor connections.  */
+         * running a migration-to-file operation.  Although we are
+         * recovering an async job, this function is run at startup
+         * and must resume things using sync monitor connections.  */
         if (state == VIR_DOMAIN_PAUSED &&
             ((job->asyncJob == QEMU_ASYNC_JOB_DUMP &&
               reason == VIR_DOMAIN_PAUSED_DUMP) ||
              (job->asyncJob == QEMU_ASYNC_JOB_SAVE &&
               reason == VIR_DOMAIN_PAUSED_SAVE) ||
+             (job->asyncJob == QEMU_ASYNC_JOB_SNAPSHOT &&
+              reason == VIR_DOMAIN_PAUSED_SNAPSHOT) ||
              reason == VIR_DOMAIN_PAUSED_UNKNOWN)) {
             if (qemuProcessStartCPUs(driver, vm, conn,
                                      VIR_DOMAIN_RUNNING_UNPAUSED,
@@ -3046,25 +3049,6 @@ qemuProcessRecoverJob(struct qemud_driver *driver,
         }
         break;

-    case QEMU_ASYNC_JOB_SNAPSHOT:
-        qemuDomainObjEnterMonitor(driver, vm);
-        ignore_value(qemuMonitorMigrateCancel(priv->mon));
-        qemuDomainObjExitMonitor(driver, vm);
-         /* resume the domain but only if it was paused as a result of
-          * creating the snapshot. */
-        if (state == VIR_DOMAIN_PAUSED &&
-            ((job->asyncJob == QEMU_ASYNC_JOB_SNAPSHOT &&
-              reason == VIR_DOMAIN_PAUSED_MIGRATION) ||
-             reason == VIR_DOMAIN_PAUSED_UNKNOWN)) {
-            if (qemuProcessStartCPUs(driver, vm, conn,
-                                     VIR_DOMAIN_RUNNING_UNPAUSED,
-                                     QEMU_ASYNC_JOB_NONE) < 0) {
-                VIR_WARN("Could not resume domain %s after snapshot",
-                         vm->def->name);
-            }
-        }
-        break;
-
     case QEMU_ASYNC_JOB_NONE:
     case QEMU_ASYNC_JOB_LAST:
         break;


-- 
Eric Blake   eblake at redhat.com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 617 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20121102/6c400101/attachment-0001.sig>


More information about the libvir-list mailing list