[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