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.
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
[email protected]
http://lists.freedesktop.org/mailman/listinfo/spice-devel