]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Add support for job completed event
authorJiri Denemark <jdenemar@redhat.com>
Wed, 17 Feb 2016 23:12:33 +0000 (00:12 +0100)
committerJiri Denemark <jdenemar@redhat.com>
Tue, 8 Mar 2016 15:26:01 +0000 (16:26 +0100)
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
src/qemu/qemu_domain.c
src/qemu/qemu_domain.h
src/qemu/qemu_migration.c

index 99545a74aba8c68a9ce5f5cd03930a5b1ce245be..97de6f74cfba0b2a47df3de5851fc2fb7cc79ac1 100644 (file)
@@ -149,6 +149,30 @@ void qemuDomainEventQueue(virQEMUDriverPtr driver,
 }
 
 
+void
+qemuDomainEventEmitJobCompleted(virQEMUDriverPtr driver,
+                                virDomainObjPtr vm)
+{
+    qemuDomainObjPrivatePtr priv = vm->privateData;
+    virObjectEventPtr event;
+    virTypedParameterPtr params = NULL;
+    int nparams = 0;
+    int type;
+
+    if (!priv->job.completed)
+        return;
+
+    if (qemuDomainJobInfoToParams(priv->job.completed, &type,
+                                  &params, &nparams) < 0) {
+        VIR_WARN("Could not get stats for completed job; domain %s",
+                 vm->def->name);
+    }
+
+    event = virDomainEventJobCompletedNewFromObj(vm, params, nparams);
+    qemuDomainEventQueue(driver, event);
+}
+
+
 static int
 qemuDomainObjInitJob(qemuDomainObjPrivatePtr priv)
 {
index eceaf66b92757cc9e2e6ed9b6bf2ced2465f43ca..b6f493e5b325f1ac2132518f241fb96b2e795e92 100644 (file)
@@ -265,6 +265,8 @@ void qemuDomainEventFlush(int timer, void *opaque);
 
 void qemuDomainEventQueue(virQEMUDriverPtr driver,
                           virObjectEventPtr event);
+void qemuDomainEventEmitJobCompleted(virQEMUDriverPtr driver,
+                                     virDomainObjPtr vm);
 
 int qemuDomainObjBeginJob(virQEMUDriverPtr driver,
                           virDomainObjPtr obj,
index 7cbb228dd3674c60e0a844768f15b8209d5af7e1..38fa81c64306368dcd91f01d96fd1906d017c15d 100644 (file)
@@ -3866,7 +3866,7 @@ qemuMigrationConfirmPhase(virQEMUDriverPtr driver,
                           int retcode)
 {
     qemuMigrationCookiePtr mig;
-    virObjectEventPtr event = NULL;
+    virObjectEventPtr event;
     int rv = -1;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
     qemuDomainObjPrivatePtr priv = vm->privateData;
@@ -3921,6 +3921,8 @@ qemuMigrationConfirmPhase(virQEMUDriverPtr driver,
         event = virDomainEventLifecycleNewFromObj(vm,
                                          VIR_DOMAIN_EVENT_STOPPED,
                                          VIR_DOMAIN_EVENT_STOPPED_MIGRATED);
+        qemuDomainEventQueue(driver, event);
+        qemuDomainEventEmitJobCompleted(driver, vm);
     } else {
         virErrorPtr orig_err = virSaveLastError();
 
@@ -3935,6 +3937,7 @@ qemuMigrationConfirmPhase(virQEMUDriverPtr driver,
             event = virDomainEventLifecycleNewFromObj(vm,
                                                       VIR_DOMAIN_EVENT_RESUMED,
                                                       VIR_DOMAIN_EVENT_RESUMED_MIGRATED);
+            qemuDomainEventQueue(driver, event);
         }
 
         if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->caps) < 0)
@@ -3946,7 +3949,6 @@ qemuMigrationConfirmPhase(virQEMUDriverPtr driver,
     rv = 0;
 
  cleanup:
-    qemuDomainEventQueue(driver, event);
     virObjectUnref(cfg);
     return rv;
 }
@@ -6071,6 +6073,7 @@ qemuMigrationToFile(virQEMUDriverPtr driver, virDomainObjPtr vm,
     if (cmd && virCommandWait(cmd, NULL) < 0)
         goto cleanup;
 
+    qemuDomainEventEmitJobCompleted(driver, vm);
     ret = 0;
 
  cleanup: