[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