When QEMU fails during incoming migration after we successfully started it (i.e., during Perform or Finish phase), we report a rather unhelpful message Unable to read from monitor: Connection reset by peer We already have a code that takes error messages from QEMU's error output but we disable it once QEMU successfully starts. This patch postpones this until the end of Finish phase during incoming migration so that we can report a much better error message: internal error: early end of file from monitor: possible problem: Unknown savevm section or instance '0000:00:05.0/virtio-balloon' 0 load of migration failed https://bugzilla.redhat.com/show_bug.cgi?id=1090093 Signed-off-by: Jiri Denemark <jdenemar@xxxxxxxxxx> --- src/qemu/qemu_migration.c | 2 ++ src/qemu/qemu_monitor.c | 7 ++++++- src/qemu/qemu_process.c | 6 ++++-- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index f2b421e..64f0d8d 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -4689,6 +4689,8 @@ qemuMigrationFinish(virQEMUDriverPtr driver, cleanup: virPortAllocatorRelease(driver->migrationPorts, port); if (vm) { + if (priv->mon) + qemuMonitorSetDomainLog(priv->mon, -1); VIR_FREE(priv->origname); virObjectUnlock(vm); } diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index d96b1b8..3bb6cb9 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -631,8 +631,11 @@ qemuMonitorIO(int watch, int fd, int events, void *opaque) error = true; } else { if (events & VIR_EVENT_HANDLE_WRITABLE) { - if (qemuMonitorIOWrite(mon) < 0) + if (qemuMonitorIOWrite(mon) < 0) { error = true; + if (errno == ECONNRESET) + hangup = true; + } events &= ~VIR_EVENT_HANDLE_WRITABLE; } @@ -642,6 +645,8 @@ qemuMonitorIO(int watch, int fd, int events, void *opaque) events &= ~VIR_EVENT_HANDLE_READABLE; if (got < 0) { error = true; + if (errno == ECONNRESET) + hangup = true; } else if (got == 0) { eof = true; } else { diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 38ed3fe..b1d8a32 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -4379,8 +4379,10 @@ int qemuProcessStart(virConnectPtr conn, goto cleanup; } - /* unset reporting errors from qemu log */ - qemuMonitorSetDomainLog(priv->mon, -1); + /* Keep watching qemu log for errors during incoming migration, otherwise + * unset reporting errors from qemu log. */ + if (!migrateFrom) + qemuMonitorSetDomainLog(priv->mon, -1); virCommandFree(cmd); VIR_FORCE_CLOSE(logfile); -- 2.1.0 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list