This test case checks that live migration properly cleans up after itself if the migration were to fail for any reason. There are three stages to live migration:
- Prepare runs on the destination machine, and sets up the incoming qemu process for migration
- Perform runs on the source machine, and actually migrates the guest
- Finish runs on the destination machine, and cleans up after the migration is complete (or has failed).
If Prepare fails, the qemu process on the destination machine should be destroyed, and nothing further should be done. If Perform fails, then it should return a negative error code, which will be passed to Finish, which should clean up the qemu on the destination machine. Only if both Prepare and Perform succeeds should Finish start the VM on the destination machine and destroy the VM on the source machine.
How to test
- On the source machine, edit the guest so that it has a fairly large amount of memory (at least 2GB, more if you can spare it).
- On the source machine, start the guest.
- Once the guest has fully booted, find out the IP address of the guest (by logging into the guest and running ifconfig, or whatever is equivalent in the guest OS of your choice). From the source machine, start a ping to the guest:
$ ping <guest-IP>
- Download this code to the guest: File:Live-migration-memeater.c and compile it using
$ gcc -g -Wall live-migration-memeater.c -o live-migration-memeater
- Start the memchanger inside the guest by executing:
- Now on the source machine execute:
$ virsh migrate --live <guestname> qemu+ssh://<destination host>/system
- Shutdown the guest on the destination machine. Once it's successfully shut down, edit the guest on the source machine and give it random, differing amounts of memory: 1024MB, 2111MB, etc. Then repeat the test for these differing amounts of memory.
- Repeat the entire test for as many different guest OS's as are relevant. We would at least like to see the following guests:
- Fedora 12
- Fedora 11
- After executing the virsh migrate command, the guest should migrate over to the destination machine, and not be running anymore on the source machine. Use
virsh liston both machines to verify this. Additionally, the ping that was started in step 3 should continue uninterrupted. Note that this migration may take significantly longer than a migration of an idle guest.