[Spice-devel] [PATCH migration 00/19] semi-seamless migration for master

Alon Levy alevy at redhat.com
Tue Nov 1 14:37:32 PDT 2011


On Wed, Oct 12, 2011 at 12:38:50PM +0200, Yonit Halperin wrote:
> Hi,
> in the following patch series the same logic of semi-seamless for the 0.8 branch was
> adjusted to multiple clients (and to the refactoring of red_channel/reds/main_channel).
> The code differs from the 0.8 branch only for the server side. The client patches are the same,
> except for small conflicts solving.
> 

ACK series, with minor notes on the penultimate server patch, and
noting for all the client patches that they are simple cherrypicks and
applied cleanly to master.

> Migration scheme:
>     migration source side
>     ---------------------
>     (1) spice_server_migrate_connect: tell all clients (the ones that are capable) to link
>         to the target side - send SPICE_MSG_MAIN_MIGRATE_BEGIN.
>         It will be called on client_migrate_info cmd. client_migrate_info is asynchronous.
>     (2) Complete client_migrate_info only when all the above clients have been connected
>         to the target - wait for SPICE_MSGC_MAIN_MIGRATE_(CONNECTED|CONNECT_ERROR) or a timeout.
>     (3) spice_server_migrate_end: tell the clients they can switch to the target - 
>         (a) send SPICE_MSG_MAIN_MIGRATE_END to clients that are already connected to the target.
>             These clients clean up all data related to the connection to the source and switches to the target.
>             They send SPICE_MSGC_MAIN_MIGRATE_END.
>         (b) send SPICE_MSG_MAIN_SWITCH_HOST to clients that are not connected to the target
>                                                                     
>     migration target side
>     ---------------------
>     (1) a main_channel_client identifies itself as a migraiton target since the corresponding client is linked with (connection_id != 0)
>     (2) server doesn't start this channel client logic till it receives SPICE_MSGC_MAIN_MIGRATE_END from this client.
> 
>  Differences from 0.8 branch
>  ---------------------------
>  - Since we currently support sound/smartcard channels only for the first connected client, if a client A is connected to the target
>    before migration started, and another client B is migrated to this target, client A will be disconnected if they both have
>    sound/smartcard channel.
>  - The agent is broken for multiclient. I removed several conditions that linked between migration to the agent code.
>    They seemed to be unnecessary since I prevented msg sending at the target side to clients that their migraiton have
>    not yet been completed.
>  - I decided not to stop listening to new spice connection after spice_server_migrate_connect is called.
>    Instead, new connections that arrive after spice_server_migrate_connect and before spice_server_migrate_end,
>    will receive SWITCH_HOST when migration completes.
>    If it will be necessary, I will change the 0.8 branch as well.
> 
> Yonit
> 
> Yonit Halperin (19):
>   server: set & test channel capabilities in red_channel
>   server/spice.h: semi-seamless migration interface, RHBZ #738266
>   server: handle migration interface addition     (cherry picked from
>     commit 3ac0075cdac8fa42de47a7882022795e96cb1fee branch 0.8)
>   configure: spice-protocol >= 0.9.1 (semi-seamless migration protocol)
>         (cherry picked from commit
>     55ccc022ec9829523ebe36fdf0ec7c593ce76c22 branch 0.8)
>   server,proto: tell the clients to connect to the migration target
>     before migraton starts
>   spice.proto: add SPICE_MSG_MAIN_MIGRATE_END &
>     SPICE_MSGC_MAIN_MIGRATE_END     (cherry picked from commit
>     cfbd07710562e522179ae5a7085a789489a821bb branch 0.8)
>   server: handle spice_server_migrate_end
>   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: handle SpiceMsgMainMigrationBegin (semi-seamless migration)
>   client: handle SPICE_MSG_MAIN_MIGRATE_END
>   client: main channel migration: do partial cleanup when switching
>     hosts
>   client: playback/record channels: implement on_disconnect     (cherry
>     picked from commit d3ed9d5e9d52ddcadcb3c8c77dd827b50071d813 branch
>     0.8)
>   client: display channel migration     (cherry picked from commit
>     cad3c585444f940f60c12789f4174f2d32bec70f branch 0.8)
>   client: display channel - destroy all surfaces on disconnect
>   client: support semi-seamless migration between spice servers with
>     different protocols.
>   Release 0.9.2
> 
>  NEWS                        |    8 +
>  client/audio_channels.h     |   12 +-
>  client/canvas.cpp           |   25 ++-
>  client/canvas.h             |  152 +----------
>  client/display_channel.cpp  |  316 ++++++++++++++--------
>  client/display_channel.h    |   29 +--
>  client/playback_channel.cpp |   22 ++-
>  client/record_channel.cpp   |   39 ++-
>  client/red_channel.cpp      |   80 ++++++
>  client/red_channel.h        |   21 ++
>  client/red_client.cpp       |  156 ++++++++++--
>  client/red_client.h         |   17 +-
>  client/red_gdi_canvas.cpp   |    4 +-
>  client/red_gdi_canvas.h     |    2 +-
>  client/red_gl_canvas.cpp    |    4 +-
>  client/red_gl_canvas.h      |    2 +-
>  client/red_sw_canvas.cpp    |    6 +-
>  client/red_sw_canvas.h      |    2 +-
>  common/messages.h           |    2 +
>  configure.ac                |    4 +-
>  server/inputs_channel.c     |    4 +-
>  server/main_channel.c       |  331 +++++++++++++++--------
>  server/main_channel.h       |   38 ++-
>  server/red_channel.c        |  109 +++++++-
>  server/red_channel.h        |   39 ++-
>  server/red_tunnel_worker.c  |    3 +-
>  server/red_worker.c         |    3 +-
>  server/reds.c               |  636 +++++++++++++++++++++++++------------------
>  server/reds.h               |   22 +-
>  server/smartcard.c          |    4 +-
>  server/snd_worker.c         |   66 ++---
>  server/spice-experimental.h |    3 -
>  server/spice-server.syms    |    1 +
>  server/spice.h              |   27 ++-
>  server/spicevmc.c           |    4 +-
>  spice.proto                 |    9 +-
>  36 files changed, 1410 insertions(+), 792 deletions(-)
> 
> -- 
> 1.7.6.4
> 


More information about the Spice-devel mailing list