]> xenbits.xensource.com Git - libvirt.git/commitdiff
snapshot: qemu: Add async job type for snapshots
authorPeter Krempa <pkrempa@redhat.com>
Mon, 8 Oct 2012 14:34:19 +0000 (16:34 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Sat, 3 Nov 2012 13:57:43 +0000 (14:57 +0100)
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
src/qemu/qemu_domain.h
src/qemu/qemu_process.c

index d01e3667a41308c3178cf9726e45a107ecd1c34b..a5592b92c8d27338d234448f4e350176829f4f7e 100644 (file)
@@ -65,6 +65,7 @@ VIR_ENUM_IMPL(qemuDomainAsyncJob, QEMU_ASYNC_JOB_LAST,
               "migration in",
               "save",
               "dump",
+              "snapshot",
 );
 
 
@@ -79,6 +80,7 @@ qemuDomainAsyncJobPhaseToString(enum qemuDomainAsyncJob job,
 
     case QEMU_ASYNC_JOB_SAVE:
     case QEMU_ASYNC_JOB_DUMP:
+    case QEMU_ASYNC_JOB_SNAPSHOT:
     case QEMU_ASYNC_JOB_NONE:
     case QEMU_ASYNC_JOB_LAST:
         ; /* fall through */
@@ -101,6 +103,7 @@ qemuDomainAsyncJobPhaseFromString(enum qemuDomainAsyncJob job,
 
     case QEMU_ASYNC_JOB_SAVE:
     case QEMU_ASYNC_JOB_DUMP:
+    case QEMU_ASYNC_JOB_SNAPSHOT:
     case QEMU_ASYNC_JOB_NONE:
     case QEMU_ASYNC_JOB_LAST:
         ; /* fall through */
index 8a66f14ec9143c8b3bce5ed1d6dcc948d453d62a..9c2f67c7a758a3d7df5afce57d886832365d1f8f 100644 (file)
@@ -92,6 +92,7 @@ enum qemuDomainAsyncJob {
     QEMU_ASYNC_JOB_MIGRATION_IN,
     QEMU_ASYNC_JOB_SAVE,
     QEMU_ASYNC_JOB_DUMP,
+    QEMU_ASYNC_JOB_SNAPSHOT,
 
     QEMU_ASYNC_JOB_LAST
 };
index 3ac5282610497eb568accee82966dcaab07f9bca..d8cf4c31ac4c98267dbf0d3781da3cf342ba52ff 100644 (file)
@@ -3025,23 +3025,27 @@ 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.  */
-        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) ||
-             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", vm->def->name);
+         * 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,
+                                      QEMU_ASYNC_JOB_NONE) < 0) {
+                 VIR_WARN("Could not resume domain '%s' after migration to file",
+                          vm->def->name);
             }
         }
         break;