From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40802) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zmc1G-00068J-55 for qemu-devel@nongnu.org; Thu, 15 Oct 2015 02:28:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Zmc1E-0007MV-J0 for qemu-devel@nongnu.org; Thu, 15 Oct 2015 02:28:06 -0400 Received: from mx1.redhat.com ([209.132.183.28]:34459) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zmc1E-0007MR-DU for qemu-devel@nongnu.org; Thu, 15 Oct 2015 02:28:04 -0400 Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (Postfix) with ESMTPS id 1E5A6C0BFD26 for ; Thu, 15 Oct 2015 06:28:04 +0000 (UTC) From: Juan Quintela Date: Thu, 15 Oct 2015 08:27:58 +0200 Message-Id: <1444890480-6371-2-git-send-email-quintela@redhat.com> In-Reply-To: <1444890480-6371-1-git-send-email-quintela@redhat.com> References: <1444890480-6371-1-git-send-email-quintela@redhat.com> Subject: [Qemu-devel] [PULL 1/3] Migration: Generate the completed event only when we complete List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: amit.shah@redhat.com, dgilbert@redhat.com From: "Dr. David Alan Gilbert" 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 Reviewed-by: Juan Quintela Reviewed-by: Amit Shah xSigned-off-by: Juan Quintela --- migration/migration.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/migration/migration.c b/migration/migration.c index b7de9b7..3d40f24 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -294,12 +294,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); @@ -320,6 +320,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) -- 2.4.3