[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:52:40 PDT 2011
The first paragraph of the cover letter was omitted, here it is:
Hi,
this series of patches, and the spice-protocol and qemu patches that
will follow it, change spice migration protocol.
Spice client is required to connect to the migration target before/as
migration starts. Before, the client has connected to target upon
migration completion, however, the ticket
was set in the beginning, thus when migration time was >
ticket_expiration_time, spice failed to connect to the target.
Another requirement that is addressed in these patches is making the
host switching smoother and less noticable to the user.
On 09/19/2011 12:46 PM, Yonit Halperin wrote:
> 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(-)
>
More information about the Spice-devel
mailing list