+++ This bug was initially created as a clone of Bug #836123 +++
Description of problem:
The current spice migration pathway is almost equivalent to automatically connecting the client to the migration target, and starting the session from scratch.
This pathway might result in unrecoverable data loss; Mainly usb/smartcard/copy-paste data that was on its way from the client to the guest and vice versa, when the non-live phase of the migration started.
Other data that can be lost is rendering commands. While this data loss can be recovered by sending the primary surface and other surfaces to the client after the client is connected to the target, it will be more efficient just not to lose this data, at least for a large part of the scenarios.
In order to support seamless migration, we need to be able to store the state of the src server, when the vm migration completes, and pass it to the target server. Passing this data will be done via client (i.e., src->client->target).
Migrating the spice server state requires changes in qemu and libvirt:
libvirt mustn't close the src qemu, till spice completes migrating the server state.
We will add a QMP event to qemu, for signaling spice migration completion.
libvirt will need to wait for this qmp event before closing the src qemu.
In order for spice to identify if the libvirt release supports this QMP event, we will add to spice's qemu arguments "seamless-migration=on". If this argument is not set, spice will fallback to the old migration pathway.
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.
For information on the advisory, and where to find the updated
files, follow the link below.
If the solution does not work for you, open a new bug report.