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(a)redhat.com>
---
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