summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDr. David Alan Gilbert <dgilbert@redhat.com>2015-10-13 12:21:27 +0100
committerMichael Roth <mdroth@linux.vnet.ibm.com>2015-10-21 11:28:59 -0500
commitf62c10bd206b81644336f7e3c071ed76eab61ce6 (patch)
treed7f5a17c3e8082ab14408533ad1dd80051114936
parent8c4fa92d010db2ac88ed7a9e5bb51bbe43019872 (diff)
downloadqemu-f62c10bd206b81644336f7e3c071ed76eab61ce6.tar.gz
Migration: Generate the completed event only when we complete
The current migration-completed event is generated a bit too early, which means that an eager libvirt that's ready to go as soon as it sees the event ends up racing with the actual end of migration. This corresponds to RH bug: https://bugzilla.redhat.com/show_bug.cgi?id=1271145 Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Reviewed-by: Juan Quintela <quintela@redhat.com> Reviewed-by: Amit Shah <amit.shah@redhat.com> xSigned-off-by: Juan Quintela <quintela@redhat.com> (cherry picked from commit ed1f3e0090069dcb9458aa9e450df12bf8eba0b0) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
-rw-r--r--migration/migration.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/migration/migration.c b/migration/migration.c
index 662e77e4eb..c4a7d0b705 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -286,12 +286,12 @@ static void process_incoming_migration_co(void *opaque)
migrate_decompress_threads_join();
exit(EXIT_FAILURE);
}
- migrate_generate_event(MIGRATION_STATUS_COMPLETED);
qemu_announce_self();
/* Make sure all file formats flush their mutable metadata */
bdrv_invalidate_cache_all(&local_err);
if (local_err) {
+ migrate_generate_event(MIGRATION_STATUS_FAILED);
error_report_err(local_err);
migrate_decompress_threads_join();
exit(EXIT_FAILURE);
@@ -312,6 +312,12 @@ static void process_incoming_migration_co(void *opaque)
runstate_set(global_state_get_runstate());
}
migrate_decompress_threads_join();
+ /*
+ * This must happen after any state changes since as soon as an external
+ * observer sees this event they might start to prod at the VM assuming
+ * it's ready to use.
+ */
+ migrate_generate_event(MIGRATION_STATUS_COMPLETED);
}
void process_incoming_migration(QEMUFile *f)