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 > _______________________________________________ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel