[Spice-devel] [RFC PATCH spice 0.8 00/19] semi-seamless migration (RHBZ #738266, 725009)
Yonit Halperin
yhalperi at redhat.com
Mon Sep 19 02:46:53 PDT 2011
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
More information about the Spice-devel
mailing list