On 05/22/14 16:28, Jiri Denemark wrote:
On Thu, May 22, 2014 at 16:14:22 +0200, Peter Krempa wrote:
> On 05/22/14 13:55, Jiri Denemark wrote:
>> This is similar to the previous commit in that we need to explicitly
>> send migrate_cancel when libvirt detects an error other than those
>> reported by query-migrate. However, the possibility to hit such error is
>> pretty small.
>>
>> Signed-off-by: Jiri Denemark <jdenemar(a)redhat.com>
>> ---
>> src/qemu/qemu_migration.c | 21 ++++++++++++++++++++-
>> 1 file changed, 20 insertions(+), 1 deletion(-)
>>
>> diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
>> index ae18acb..5754f73 100644
>> --- a/src/qemu/qemu_migration.c
>> +++ b/src/qemu/qemu_migration.c
>> @@ -4704,6 +4704,7 @@ qemuMigrationToFile(virQEMUDriverPtr driver,
virDomainObjPtr vm,
>> int pipeFD[2] = { -1, -1 };
>> unsigned long saveMigBandwidth = priv->migMaxBandwidth;
>> char *errbuf = NULL;
>> + virErrorPtr orig_err = NULL;
>>
>> /* Increase migration bandwidth to unlimited since target is a file.
>> * Failure to change migration speed is not fatal. */
>> @@ -4806,8 +4807,17 @@ qemuMigrationToFile(virQEMUDriverPtr driver,
virDomainObjPtr vm,
>>
>> rc = qemuMigrationWaitForCompletion(driver, vm, asyncJob, NULL, false);
>>
>> - if (rc < 0)
>> + if (rc < 0) {
>> + if (rc == -2) {
>> + orig_err = virSaveLastError();
>> + virCommandAbort(cmd);
>
> Shouldn't we abort the migration in qemu before killing the I/O helper?
> Qemu will get a sigpipe probably after we do that. Not sure wether
> that's worth dealing with as the migration is still going to fail.
Hmm, good question. Do we even need to abort I/O helper as I guess
cancelling the migration will result in EOF on the I/O helper's input?
Well and a counter-example is if qemu get's stuck, then you at least
abort the iohelper and then get stuck a few lines below on the monitor.
>> + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) == 0) {
>> + qemuMonitorMigrateCancel(priv->mon);
>> + qemuDomainObjExitMonitor(driver, vm);
>> + }
>> + }
Jirka