Here is a summary of the new migration scheme (copied from the commit msg of the first patch) migration source side --------------------- (1) spice_server_migrate_info (*): tell client to link to the target side - send SPICE_MSG_MAIN_MIGRATE_BEGIN. client_migrate_info cmd is asynchronous. (2) Complete client_migrate_info only when the client has been connected to the target - wait for SPICE_MSGC_MAIN_MIGRATE_(CONNECTED|CONNECT_ERROR) or a timeout. (3) spice_server_migrate_end: tell client migration it can switch to the target - send SPICE_MSG_MAIN_MIGRATE_END. (4) client cleans up all data related to the connection to the source and switches to the target. It sends SPICE_MSGC_MAIN_MIGRATE_END. migration target side --------------------- (1) the server identifies itself as a migraiton target since the client is linked with (connection_id != 0) (2) server doesn't start the channels' logic (channel->link) till it receives SPICE_MSGC_MAIN_MIGRATE_END from the client. * After migration starts, the target qemu is blocked and cannot accept new spice client connections. Thus, we trigger the connection to the target upon client_migrate_info command.
Since I haven't completed testing these patches, they are marked as RFC. Relevant branches are in cgit.freedesktop.org/~yhalperi/: qemu/mig.spice.v42 spice-protocol/0.8.mig spice/0.8.mig.v2 Yonit Halperin (19): server/spice.h: semi-seamless migration interface, RHBZ #738266 server: handle migration interface addition server: support async client_migrate_info monitor command configure: spice-protocol >= 0.8.2 (semi-seamless migration protocol) server,proto: tell the client to connect to the migration target before migraton starts spice.proto: add SPICE_MSG_MAIN_MIGRATE_END & SPICE_MSGC_MAIN_MIGRATE_END server: send SPICE_MSG_MAIN_MIGRATE_END on spice_server_migrate_end server: move SPICE_MSG_MAIN_INIT sending code to a separate routine server: move the linking of channels to a separate routine server: handling semi-seamless migration in the target side server: turn spice_server_migrate_start into a valid call client: rewrite surfaces cache client: RedPeer::HostAuthOptions::set_cert_subject client: handle SpiceMsgMainMigrationBegin for 0.8.2 client: handle SPICE_MSG_MAIN_MIGRATE_END client: main channel migration: do partial cleanup when switching hosts client: playback/record channels: implement on_disconnect client: display channel migration client: display channel - destroy all surfaces on disconnect client/application.cpp | 57 +----- client/audio_channels.h | 12 +- client/canvas.cpp | 25 +++- client/canvas.h | 152 ++------------- client/display_channel.cpp | 322 +++++++++++++++++++----------- client/display_channel.h | 31 ++-- client/playback_channel.cpp | 22 ++- client/record_channel.cpp | 39 +++-- client/red_channel.cpp | 61 ++++++ client/red_channel.h | 19 ++ client/red_client.cpp | 129 +++++++++++-- client/red_client.h | 13 ++ client/red_gdi_canvas.cpp | 4 +- client/red_gdi_canvas.h | 2 +- client/red_gl_canvas.cpp | 5 +- client/red_gl_canvas.h | 2 +- client/red_peer.cpp | 51 +++++ client/red_peer.h | 2 +- client/red_sw_canvas.cpp | 6 +- client/red_sw_canvas.h | 2 +- common/messages.h | 2 + configure.ac | 2 +- server/reds.c | 453 +++++++++++++++++++++++++++++++++---------- server/reds.h | 4 + server/spice-experimental.h | 3 - server/spice.h | 21 ++- spice.proto | 9 +- 27 files changed, 967 insertions(+), 483 deletions(-) -- 1.7.4.4 _______________________________________________ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel