]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
conf: Add job parameter to virDomainObjIsFailedPostcopy
authorJiri Denemark <jdenemar@redhat.com>
Tue, 13 Dec 2022 15:43:53 +0000 (16:43 +0100)
committerJiri Denemark <jdenemar@redhat.com>
Fri, 6 Jan 2023 15:17:38 +0000 (16:17 +0100)
Unused for now, but this will change soon.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/conf/domain_conf.c
src/conf/domain_conf.h
src/qemu/qemu_driver.c
src/qemu/qemu_migration.c
src/qemu/qemu_process.c

index b43b8faef78183c0fcb310af811538d2c827b2c6..34eefc15903025ae544e0efa877a8b65ecbe3fa4 100644 (file)
@@ -27921,7 +27921,8 @@ virDomainObjGetState(virDomainObj *dom, int *reason)
 
 
 bool
-virDomainObjIsFailedPostcopy(virDomainObj *dom)
+virDomainObjIsFailedPostcopy(virDomainObj *dom,
+                             virDomainJobObj *job G_GNUC_UNUSED)
 {
     return ((dom->state.state == VIR_DOMAIN_PAUSED &&
              dom->state.reason == VIR_DOMAIN_PAUSED_POSTCOPY_FAILED) ||
@@ -27931,9 +27932,10 @@ virDomainObjIsFailedPostcopy(virDomainObj *dom)
 
 
 bool
-virDomainObjIsPostcopy(virDomainObj *dom)
+virDomainObjIsPostcopy(virDomainObj *dom,
+                       virDomainJobObj *job)
 {
-    if (virDomainObjIsFailedPostcopy(dom))
+    if (virDomainObjIsFailedPostcopy(dom, job))
         return true;
 
     return (dom->state.state == VIR_DOMAIN_PAUSED &&
index d59d6a6fa10c665f7903dea632b67a2b310ee24a..9e281692fffde14c23762896e99e3654fa9596f9 100644 (file)
@@ -3959,10 +3959,12 @@ virDomainObjGetState(virDomainObj *obj, int *reason)
         ATTRIBUTE_NONNULL(1);
 
 bool
-virDomainObjIsFailedPostcopy(virDomainObj *obj)
+virDomainObjIsFailedPostcopy(virDomainObj *obj,
+                             virDomainJobObj *job)
         ATTRIBUTE_NONNULL(1);
 bool
-virDomainObjIsPostcopy(virDomainObj *dom)
+virDomainObjIsPostcopy(virDomainObj *dom,
+                       virDomainJobObj *job)
         ATTRIBUTE_NONNULL(1);
 
 virSecurityLabelDef *
index f03764e69dc3ed844fb58d67a7d0f34bd2ee8554..f4bd081f3c43fdff9461b7fbed17437ecf5aedd7 100644 (file)
@@ -12609,7 +12609,7 @@ qemuDomainAbortJobFlags(virDomainPtr dom,
 
     if (flags & VIR_DOMAIN_ABORT_JOB_POSTCOPY &&
         (vm->job->asyncJob != VIR_ASYNC_JOB_MIGRATION_OUT ||
-         !virDomainObjIsPostcopy(vm))) {
+         !virDomainObjIsPostcopy(vm, vm->job))) {
         virReportError(VIR_ERR_OPERATION_INVALID, "%s",
                        _("current job is not outgoing migration in post-copy mode"));
         goto endjob;
@@ -12634,7 +12634,7 @@ qemuDomainAbortJobFlags(virDomainPtr dom,
         break;
 
     case VIR_ASYNC_JOB_MIGRATION_OUT:
-        if (virDomainObjIsPostcopy(vm))
+        if (virDomainObjIsPostcopy(vm, vm->job))
             ret = qemuDomainAbortJobPostcopy(vm, flags);
         else
             ret = qemuDomainAbortJobMigration(vm);
index 65565fcb5981aa8a14ab159dd226d15cd7e9078e..b118e95900bcdb60e0c9a9b9e4ba868e53ddb60e 100644 (file)
@@ -2292,7 +2292,7 @@ qemuMigrationAnyConnectionClosed(virDomainObj *vm,
         break;
 
     case QEMU_MIGRATION_PHASE_PERFORM3_DONE:
-        if (virDomainObjIsPostcopy(vm)) {
+        if (virDomainObjIsPostcopy(vm, vm->job)) {
             VIR_DEBUG("Migration protocol interrupted in post-copy mode");
             postcopy = true;
         } else {
@@ -2681,7 +2681,7 @@ qemuMigrationAnyCanResume(virDomainObj *vm,
         return false;
     }
 
-    if (!virDomainObjIsPostcopy(vm)) {
+    if (!virDomainObjIsPostcopy(vm, vm->job)) {
         virReportError(VIR_ERR_OPERATION_INVALID,
                        _("migration of domain %s is not in post-copy phase"),
                        vm->def->name);
@@ -2689,7 +2689,7 @@ qemuMigrationAnyCanResume(virDomainObj *vm,
     }
 
     if (vm->job->phase < QEMU_MIGRATION_PHASE_POSTCOPY_FAILED &&
-        !virDomainObjIsFailedPostcopy(vm)) {
+        !virDomainObjIsFailedPostcopy(vm, vm->job)) {
         virReportError(VIR_ERR_OPERATION_INVALID,
                        _("post-copy migration of domain %s has not failed"),
                        vm->def->name);
@@ -3902,7 +3902,7 @@ qemuMigrationSrcConfirmPhase(virQEMUDriver *driver,
     virCheckFlags(QEMU_MIGRATION_FLAGS, -1);
 
     if (retcode != 0 &&
-        virDomainObjIsPostcopy(vm) &&
+        virDomainObjIsPostcopy(vm, vm->job) &&
         currentData->stats.mig.status == QEMU_MONITOR_MIGRATION_STATUS_COMPLETED) {
         VIR_DEBUG("Finish phase failed, but QEMU reports post-copy migration is completed; forcing success");
         retcode = 0;
@@ -3910,7 +3910,7 @@ qemuMigrationSrcConfirmPhase(virQEMUDriver *driver,
 
     if (flags & VIR_MIGRATE_POSTCOPY_RESUME) {
         phase = QEMU_MIGRATION_PHASE_CONFIRM_RESUME;
-    } else if (virDomainObjIsFailedPostcopy(vm)) {
+    } else if (virDomainObjIsFailedPostcopy(vm, vm->job)) {
         /* Keep the original migration phase in case post-copy failed as the
          * job will stay active even though migration API finishes with an
          * error.
@@ -3970,7 +3970,7 @@ qemuMigrationSrcConfirmPhase(virQEMUDriver *driver,
         if (virDomainObjGetState(vm, &reason) == VIR_DOMAIN_PAUSED &&
             reason == VIR_DOMAIN_PAUSED_POSTCOPY) {
             qemuMigrationSrcPostcopyFailed(vm);
-        } else if (!virDomainObjIsFailedPostcopy(vm)) {
+        } else if (!virDomainObjIsFailedPostcopy(vm, vm->job)) {
             qemuMigrationSrcRestoreDomainState(driver, vm);
 
             qemuMigrationParamsReset(vm, VIR_ASYNC_JOB_MIGRATION_OUT,
@@ -4011,7 +4011,7 @@ qemuMigrationSrcConfirm(virQEMUDriver *driver,
          * job will stay active even though migration API finishes with an
          * error.
          */
-        if (virDomainObjIsFailedPostcopy(vm))
+        if (virDomainObjIsFailedPostcopy(vm, vm->job))
             phase = vm->job->phase;
         else if (cancelled)
             phase = QEMU_MIGRATION_PHASE_CONFIRM3_CANCELLED;
@@ -4029,7 +4029,7 @@ qemuMigrationSrcConfirm(virQEMUDriver *driver,
                                        cookiein, cookieinlen,
                                        flags, cancelled);
 
-    if (virDomainObjIsFailedPostcopy(vm)) {
+    if (virDomainObjIsFailedPostcopy(vm, vm->job)) {
         ignore_value(qemuMigrationJobSetPhase(vm, QEMU_MIGRATION_PHASE_POSTCOPY_FAILED));
         qemuMigrationJobContinue(vm, qemuProcessCleanupMigrationJob);
     } else {
@@ -6079,7 +6079,7 @@ qemuMigrationSrcPerformJob(virQEMUDriver *driver,
     if (ret < 0)
         virErrorPreserveLast(&orig_err);
 
-    if (virDomainObjIsFailedPostcopy(vm)) {
+    if (virDomainObjIsFailedPostcopy(vm, vm->job)) {
         ignore_value(qemuMigrationJobSetPhase(vm, QEMU_MIGRATION_PHASE_POSTCOPY_FAILED));
         qemuMigrationJobContinue(vm, qemuProcessCleanupMigrationJob);
     } else {
@@ -6167,7 +6167,7 @@ qemuMigrationSrcPerformPhase(virQEMUDriver *driver,
     ret = 0;
 
  cleanup:
-    if (ret < 0 && !virDomainObjIsFailedPostcopy(vm)) {
+    if (ret < 0 && !virDomainObjIsFailedPostcopy(vm, vm->job)) {
         qemuMigrationSrcRestoreDomainState(driver, vm);
         qemuMigrationParamsReset(vm, VIR_ASYNC_JOB_MIGRATION_OUT,
                                  jobPriv->migParams, vm->job->apiFlags);
@@ -6708,7 +6708,7 @@ qemuMigrationDstFinishActive(virQEMUDriver *driver,
         }
     }
 
-    if (virDomainObjIsFailedPostcopy(vm)) {
+    if (virDomainObjIsFailedPostcopy(vm, vm->job)) {
         ignore_value(qemuMigrationJobSetPhase(vm, QEMU_MIGRATION_PHASE_POSTCOPY_FAILED));
         virCloseCallbacksDomainRemove(vm, NULL, qemuProcessAutoDestroy);
         *finishJob = false;
index 0de6acebd145d501a5ef56abb09e143cefc8ac33..d8d842a355680472f753b7be8494d0544763a628 100644 (file)
@@ -1473,7 +1473,7 @@ qemuProcessHandleMigrationStatus(qemuMonitor *mon G_GNUC_UNUSED,
         break;
 
     case QEMU_MONITOR_MIGRATION_STATUS_POSTCOPY_RECOVER:
-        if (virDomainObjIsFailedPostcopy(vm)) {
+        if (virDomainObjIsFailedPostcopy(vm, vm->job)) {
             int eventType = -1;
             int eventDetail = -1;
 
@@ -1503,7 +1503,7 @@ qemuProcessHandleMigrationStatus(qemuMonitor *mon G_GNUC_UNUSED,
          * watching it in any thread. Let's make sure the migration is properly
          * finished in case we get a "completed" event.
          */
-        if (virDomainObjIsPostcopy(vm) &&
+        if (virDomainObjIsPostcopy(vm, vm->job) &&
             vm->job->phase == QEMU_MIGRATION_PHASE_POSTCOPY_FAILED &&
             vm->job->asyncOwner == 0) {
             qemuProcessEventSubmit(vm, QEMU_PROCESS_EVENT_UNATTENDED_MIGRATION,
@@ -3476,7 +3476,7 @@ qemuProcessRecoverMigrationIn(virQEMUDriver *driver,
         /* migration finished, we started resuming the domain but didn't
          * confirm success or failure yet; killing it seems safest unless
          * we already started guest CPUs or we were in post-copy mode */
-        if (virDomainObjIsPostcopy(vm))
+        if (virDomainObjIsPostcopy(vm, job))
             return 1;
 
         if (state != VIR_DOMAIN_RUNNING) {
@@ -3511,7 +3511,7 @@ qemuProcessRecoverMigrationOut(virQEMUDriver *driver,
                                int reason,
                                unsigned int *stopFlags)
 {
-    bool postcopy = virDomainObjIsPostcopy(vm);
+    bool postcopy = virDomainObjIsPostcopy(vm, job);
     bool resume = false;
 
     VIR_DEBUG("Active outgoing migration in phase %s",