Make MIGRATION_IN use the new helper methods.
---
src/qemu/qemu_domain.c|2 +-
src/qemu/qemu_domain.h|1 -
src/qemu/qemu_migration.c | 97 ++--
3 files changed, 41 insertions(+), 59 deletions(-)
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index fee562d..d2f03dd 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -645,7 +645,7 @@ void qemuDomainSetNamespaceHooks(virCapsPtr caps)
caps-ns.href = qemuDomainDefNamespaceHref;
}
-void
+static void
qemuDomainObjSaveJob(struct qemud_driver *driver, virDomainObjPtr obj)
{
if (!virDomainObjIsActive(obj)) {
diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
index 2ba6007..45fae55 100644
--- a/src/qemu/qemu_domain.h
+++ b/src/qemu/qemu_domain.h
@@ -187,7 +187,6 @@ int qemuDomainObjEndAsyncJob(struct qemud_driver *driver,
void qemuDomainObjEndNestedJob(struct qemud_driver *driver,
virDomainObjPtr obj);
-void qemuDomainObjSaveJob(struct qemud_driver *driver, virDomainObjPtr obj);
void qemuDomainObjSetJobPhase(struct qemud_driver *driver,
virDomainObjPtr obj,
int phase);
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
index 9659e8d..6e7117b 100644
--- a/src/qemu/qemu_migration.c
+++ b/src/qemu/qemu_migration.c
@@ -1130,9 +1130,9 @@ qemuMigrationPrepareAny(struct qemud_driver *driver,
QEMU_MIGRATION_COOKIE_LOCKSTATE)))
goto cleanup;
-if (qemuDomainObjBeginAsyncJobWithDriver(driver, vm,
- QEMU_ASYNC_JOB_MIGRATION_IN) 0)
+if (qemuMigrationJobStart(driver, vm, QEMU_ASYNC_JOB_MIGRATION_IN) 0)
goto cleanup;
+qemuMigrationJobSetPhase(driver, vm, QEMU_MIGRATION_PHASE_PREPARE);
/* Domain starts inactive, even if the domain XML had an id field. */
vm-def-id = -1;
@@ -1190,28 +1190,19 @@ qemuMigrationPrepareAny(struct qemud_driver *driver,
event = virDomainEventNewFromObj(vm,
VIR_DOMAIN_EVENT_STARTED,
VIR_DOMAIN_EVENT_STARTED_MIGRATED);
-ret = 0;
-endjob:
-if (qemuDomainObjEndAsyncJob(driver, vm) == 0) {
-vm = NULL;
-} else if (!vm-persistent !virDomainObjIsActive(vm)) {
-virDomainRemoveInactive(driver-domains, vm);
+/* We keep the job active across API calls until the finish() call.
+ * This prevents any other APIs being invoked while incoming
+ * migration is taking place.
+ */
+if (qemuMigrationJobContinue(vm) == 0) {
vm = NULL;
+qemuReportError(VIR_ERR_OPERATION_FAILED,
+%s, _(domain disappeared));
+goto cleanup;
}
-/* We set a fake job active which is held across
- * API calls until the finish() call. This prevents
- * any other APIs being invoked while incoming
- * migration is taking place
- */
-if (vm
-virDomainObjIsActive(vm)) {
-priv-job.asyncJob = QEMU_ASYNC_JOB_MIGRATION_IN;
-qemuDomainObjSaveJob(driver, vm);
-priv-job.info.type = VIR_DOMAIN_JOB_UNBOUNDED;
-priv-job.start = now;
-}
+ret = 0;
cleanup:
virDomainDefFree(def);
@@ -1223,6 +1214,15 @@ cleanup:
qemuDomainEventQueue(driver, event);
qemuMigrationCookieFree(mig);
return ret;
+
+endjob:
+if (qemuMigrationJobFinish(driver, vm) == 0) {
+vm = NULL;
+} else if (!vm-persistent) {
+virDomainRemoveInactive(driver-domains, vm);
+vm = NULL;
+}
+goto cleanup;
}
@@ -2397,27 +2397,23 @@ qemuMigrationFinish(struct qemud_driver *driver,
virDomainPtr dom = NULL;
virDomainEventPtr event = NULL;
int newVM = 1;
-qemuDomainObjPrivatePtr priv = NULL;
qemuMigrationCookiePtr mig = NULL;
+virErrorPtr orig_err = NULL;
+
VIR_DEBUG(driver=%p, dconn=%p, vm=%p, cookiein=%s, cookieinlen=%d,
cookieout=%p, cookieoutlen=%p, flags=%lx, retcode=%d,
driver, dconn, vm, NULLSTR(cookiein), cookieinlen,
cookieout, cookieoutlen, flags, retcode);
-virErrorPtr orig_err = NULL;
-priv = vm-privateData;
-if (priv-job.asyncJob != QEMU_ASYNC_JOB_MIGRATION_IN) {
-qemuReportError(VIR_ERR_NO_DOMAIN,
-_(domain '%s' is not processing incoming migration),
vm-def-name);
+if (!qemuMigrationJobIsActive(vm, QEMU_ASYNC_JOB_MIGRATION_IN))
goto cleanup;
-}
-qemuDomainObjDiscardAsyncJob(driver, vm);
-if (!(mig = qemuMigrationEatCookie(driver, vm, cookiein, cookieinlen, 0)))
-goto cleanup;
+qemuMigrationJobStartPhase(driver, vm,
+ v3proto ? QEMU_MIGRATION_PHASE_FINISH3
+ : QEMU_MIGRATION_PHASE_FINISH2);
-if (qemuDomainObjBeginJobWithDriver(driver, vm,