Re: [libvirt] [PATCH 02/10] qemu: Migration job on destination daemon

2011-07-22 Thread Eric Blake

On 07/18/2011 06:27 PM, Jiri Denemark wrote:

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(-)



ACK.

--
Eric Blake   ebl...@redhat.com+1-801-349-2682
Libvirt virtualization library http://libvirt.org

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH 02/10] qemu: Migration job on destination daemon

2011-07-18 Thread Jiri Denemark
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,