On Wed, Sep 21, 2011 at 06:51:10PM +0300, Yonit Halperin wrote: > same as the previous version with the following changes: >
Reviewed-by: Alon Levy <al...@redhat.com> Looks good. > (1) I'm sending only the spice-server patches. I will send the client fixes > later. > (and then I will move the "Release 0.8.3" patch to the head). > (2) migration interface changes: > * spice_server_migrate_connect was added. > It is called on client_migrate_info cmd, if spice-server is new > (instead of spice_server_migrate_info). > * migrate_end_complete callback was added to the migration interface. > In case we will need it for future seamless migration implementation > * bump release to 0.8.3 > (3) fall back to the switch host scheme in case of client failure to connect > the target > (4) fix accessing the wrong ticket in the target side (legacy from old > seamless migration code) > (5) fix not calling to migrate_connect_complete callback when no client is > connected > > > reminder: > > 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_connect (*): tell client 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 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. > > Yonit Halperin (13): > server/spice.h: semi-seamless migration interface, RHBZ #738266 > server: handle migration interface addition > 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: call migrate_connect_complete callback when no client is > connected > server: turn spice_server_migrate_start into a valid call > server: fall back to switch host scheme in case semi-seamless > connection to target fails > Release 0.8.3 > > NEWS | 7 + > common/messages.h | 2 + > configure.ac | 4 +- > server/reds.c | 545 > +++++++++++++++++++++++++++++++++---------- > server/reds.h | 4 + > server/spice-experimental.h | 3 - > server/spice-server.syms | 4 + > server/spice.h | 29 +++- > spice.proto | 9 +- > 9 files changed, 474 insertions(+), 133 deletions(-) > > -- > 1.7.4.4 >