qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Gerd Hoffmann <kraxel@redhat.com>
To: qemu-devel@nongnu.org
Cc: Yonit Halperin <yhalperi@redhat.com>, Gerd Hoffmann <kraxel@redhat.com>
Subject: [Qemu-devel] [PATCH 04/14] spice migration: add QEVENT_SPICE_MIGRATE_COMPLETED
Date: Thu,  6 Sep 2012 09:21:30 +0200	[thread overview]
Message-ID: <1346916100-12958-5-git-send-email-kraxel@redhat.com> (raw)
In-Reply-To: <1346916100-12958-1-git-send-email-kraxel@redhat.com>

From: Yonit Halperin <yhalperi@redhat.com>

When migrating, libvirt queries the migration status, and upon migration
completions, it closes the migration src. On the other hand, when
migration is completed, spice transfers data from the src to destination
via the client. This data is required for keeping the spice session
after migration, without suffering from data loss and inconsistencies.
In order to allow this data transfer, we add QEVENT for signaling
libvirt that spice migration has completed, and libvirt needs to wait
for this event before quitting the src process.

Signed-off-by: Yonit Halperin <yhalperi@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 monitor.c       |    1 +
 monitor.h       |    1 +
 ui/spice-core.c |    9 ++++++++-
 3 files changed, 10 insertions(+), 1 deletions(-)

diff --git a/monitor.c b/monitor.c
index b17b1bb..413edf4 100644
--- a/monitor.c
+++ b/monitor.c
@@ -455,6 +455,7 @@ static const char *monitor_event_names[] = {
     [QEVENT_SUSPEND_DISK] = "SUSPEND_DISK",
     [QEVENT_WAKEUP] = "WAKEUP",
     [QEVENT_BALLOON_CHANGE] = "BALLOON_CHANGE",
+    [QEVENT_SPICE_MIGRATE_COMPLETED] = "SPICE_MIGRATE_COMPLETED",
 };
 QEMU_BUILD_BUG_ON(ARRAY_SIZE(monitor_event_names) != QEVENT_MAX)
 
diff --git a/monitor.h b/monitor.h
index 47d556b..5fc2983 100644
--- a/monitor.h
+++ b/monitor.h
@@ -43,6 +43,7 @@ typedef enum MonitorEvent {
     QEVENT_SUSPEND_DISK,
     QEVENT_WAKEUP,
     QEVENT_BALLOON_CHANGE,
+    QEVENT_SPICE_MIGRATE_COMPLETED,
 
     /* Add to 'monitor_event_names' array in monitor.c when
      * defining new events here */
diff --git a/ui/spice-core.c b/ui/spice-core.c
index 1a7a773..851e869 100644
--- a/ui/spice-core.c
+++ b/ui/spice-core.c
@@ -285,6 +285,7 @@ typedef struct SpiceMigration {
 } SpiceMigration;
 
 static void migrate_connect_complete_cb(SpiceMigrateInstance *sin);
+static void migrate_end_complete_cb(SpiceMigrateInstance *sin);
 
 static const SpiceMigrateInterface migrate_interface = {
     .base.type = SPICE_INTERFACE_MIGRATION,
@@ -292,7 +293,7 @@ static const SpiceMigrateInterface migrate_interface = {
     .base.major_version = SPICE_INTERFACE_MIGRATION_MAJOR,
     .base.minor_version = SPICE_INTERFACE_MIGRATION_MINOR,
     .migrate_connect_complete = migrate_connect_complete_cb,
-    .migrate_end_complete = NULL,
+    .migrate_end_complete = migrate_end_complete_cb,
 };
 
 static SpiceMigration spice_migrate;
@@ -305,6 +306,11 @@ static void migrate_connect_complete_cb(SpiceMigrateInstance *sin)
     }
     sm->connect_complete.cb = NULL;
 }
+
+static void migrate_end_complete_cb(SpiceMigrateInstance *sin)
+{
+    monitor_protocol_event(QEVENT_SPICE_MIGRATE_COMPLETED, NULL);
+}
 #endif
 
 /* config string parsing */
@@ -489,6 +495,7 @@ static void migration_state_notifier(Notifier *notifier, void *data)
     } else if (migration_has_finished(s)) {
 #ifndef SPICE_INTERFACE_MIGRATION
         spice_server_migrate_switch(spice_server);
+        monitor_protocol_event(QEVENT_SPICE_MIGRATE_COMPLETED, NULL);
 #else
         spice_server_migrate_end(spice_server, true);
     } else if (migration_has_failed(s)) {
-- 
1.7.1

  parent reply	other threads:[~2012-09-06  7:21 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-09-06  7:21 [Qemu-devel] [PULL 00/14] spice patch queue Gerd Hoffmann
2012-09-06  7:21 ` [Qemu-devel] [PATCH 01/14] spice: abort on invalid streaming cmdline params Gerd Hoffmann
2012-09-06  7:21 ` [Qemu-devel] [PATCH 02/14] spice: notify spice server on vm start/stop Gerd Hoffmann
2012-09-06  7:21 ` [Qemu-devel] [PATCH 03/14] spice: notify on vm state change only via spice_server_vm_start/stop Gerd Hoffmann
2012-09-06  7:21 ` Gerd Hoffmann [this message]
2012-09-06  7:21 ` [Qemu-devel] [PATCH 05/14] spice: add 'migrated' flag to spice info Gerd Hoffmann
2012-09-06  7:21 ` [Qemu-devel] [PATCH 06/14] spice: adding seamless-migration option to the command line Gerd Hoffmann
2012-09-06  7:21 ` [Qemu-devel] [PATCH 07/14] spice: increase the verbosity of spice section in "qemu --help" Gerd Hoffmann
2012-09-06  7:21 ` [Qemu-devel] [PATCH 08/14] qxl/update_area_io: guest_bug on invalid parameters Gerd Hoffmann
2012-09-06  7:21 ` [Qemu-devel] [PATCH 09/14] qxl: disallow unknown revisions Gerd Hoffmann
2012-09-06  7:21 ` [Qemu-devel] [PATCH 10/14] qxl: add QXL_IO_MONITORS_CONFIG_ASYNC Gerd Hoffmann
2012-09-28  9:51   ` Paolo Bonzini
2012-10-07  9:35     ` Alon Levy
2012-10-08 13:16       ` Paolo Bonzini
2012-09-06  7:21 ` [Qemu-devel] [PATCH 11/14] configure: print spice-protocol and spice-server versions Gerd Hoffmann
2012-09-06  7:21 ` [Qemu-devel] [PATCH 12/14] spice: make number of surfaces runtime-configurable Gerd Hoffmann
2012-09-06  7:21 ` [Qemu-devel] [PATCH 13/14] qxl: Add set_client_capabilities() interface to QXLInterface Gerd Hoffmann
2012-09-06  7:21 ` [Qemu-devel] [PATCH 14/14] Remove #ifdef QXL_COMMAND_FLAG_COMPAT_16BPP Gerd Hoffmann
2012-09-10 13:33 ` [Qemu-devel] [PULL 00/14] spice patch queue Aurelien Jarno

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1346916100-12958-5-git-send-email-kraxel@redhat.com \
    --to=kraxel@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=yhalperi@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).