On Tue, May 10, 2022 at 17:21:06 +0200, Jiri Denemark wrote:
When recovering from a failed post-copy migration, we need to go
through
all migration phases again, but don't need to repeat all the steps in
each phase. Let's create a new set of migration phases dedicated to
post-copy recovery so that we can easily distinguish between normal and
recovery code.
Signed-off-by: Jiri Denemark <jdenemar(a)redhat.com>
---
src/qemu/qemu_migration.c | 20 +++++++++++++++++++-
src/qemu/qemu_migration.h | 6 ++++++
src/qemu/qemu_process.c | 25 ++++++++++++++++++++++++-
3 files changed, 49 insertions(+), 2 deletions(-)
[...]
@@ -3680,6 +3692,17 @@ qemuProcessRecoverMigrationOut(virQEMUDriver
*driver,
/* migration completed, we need to kill the domain here */
*stopFlags |= VIR_QEMU_PROCESS_STOP_MIGRATED;
return -1;
+
+ case QEMU_MIGRATION_PHASE_CONFIRM_RESUME:
+ if (migStatus == VIR_DOMAIN_JOB_STATUS_HYPERVISOR_COMPLETED) {
+ *stopFlags |= VIR_QEMU_PROCESS_STOP_MIGRATED;
I'd consider this case to be success ...
+ return -1;
... so this technically violates the return values as you've previously
declared that:
* -1 on error, the domain will be killed,
Please add a comment that makes the reader aware that this is success
actually or modify the comment at the top of the function.
+ }
+ return 1;
+
Reviewed-by: Peter Krempa <pkrempa(a)redhat.com>