qemuMigrationCancelDriveMirror(virQEMUDriverPtr driver,
virDomainObjPtr vm,
bool check,
- qemuDomainAsyncJob asyncJob)
+ qemuDomainAsyncJob asyncJob,
+ virConnectPtr dconn)
{
virErrorPtr err = NULL;
int ret = -1;
}
while ((rv = qemuMigrationDriveMirrorCancelled(driver, vm, check)) != 1) {
+ if (check && !failed &&
+ dconn && virConnectIsAlive(dconn) <= 0) {
+ virReportError(VIR_ERR_OPERATION_FAILED, "%s",
+ _("Lost connection to destination host"));
+ failed = true;
+ }
+
if (rv < 0) {
failed = true;
if (rv == -2)
unsigned long speed,
unsigned int *migrate_flags,
size_t nmigrate_disks,
- const char **migrate_disks)
+ const char **migrate_disks,
+ virConnectPtr dconn)
{
qemuDomainObjPrivatePtr priv = vm->privateData;
int ret = -1;
goto cleanup;
}
+ if (dconn && virConnectIsAlive(dconn) <= 0) {
+ virReportError(VIR_ERR_OPERATION_FAILED, "%s",
+ _("Lost connection to destination host"));
+ goto cleanup;
+ }
+
if (virDomainObjWait(vm) < 0)
goto cleanup;
}
/* cancel any outstanding NBD jobs */
qemuMigrationCancelDriveMirror(driver, vm, false,
- QEMU_ASYNC_JOB_MIGRATION_OUT);
+ QEMU_ASYNC_JOB_MIGRATION_OUT, NULL);
virSetError(orig_err);
virFreeError(orig_err);
migrate_speed,
&migrate_flags,
nmigrate_disks,
- migrate_disks) < 0) {
+ migrate_disks,
+ dconn) < 0) {
goto cleanup;
}
} else {
/* cancel any outstanding NBD jobs */
if (mig && mig->nbd) {
if (qemuMigrationCancelDriveMirror(driver, vm, ret == 0,
- QEMU_ASYNC_JOB_MIGRATION_OUT) < 0)
+ QEMU_ASYNC_JOB_MIGRATION_OUT,
+ dconn) < 0)
ret = -1;
}
}
if (qemuMigrationCancelDriveMirror(driver, vm, false,
- QEMU_ASYNC_JOB_NONE) < 0)
+ QEMU_ASYNC_JOB_NONE, NULL) < 0)
goto endsyncjob;
ret = 0;