Libvirt provides a portable, long term stable C API for managing the virtualization technologies provided by many operating systems. It includes support for QEMU, KVM, Xen, LXC, bhyve, Virtuozzo, VMware vCenter and ESX, VMware Desktop, Hyper-V, VirtualBox and the POWER Hypervisor.
Go to file
Shivaprasad G Bhat b39a1fe165 Close the source fd if the destination qemu exits during tunnelled migration
Tunnelled migration can hang if the destination qemu exits despite all the
ABI checks. This happens whenever the destination qemu exits before the
complete transfer is noticed by source qemu. The savevm state checks at
runtime can fail at destination and cause qemu to error out.
The source qemu cant notice it as the EPIPE is not propogated to it.
The qemuMigrationIOFunc() notices the stream being broken from virStreamSend()
and it cleans up the stream alone. The qemuMigrationWaitForCompletion() would
never get to 100% transfer completion.
The qemuMigrationWaitForCompletion() never breaks out as well since
the ssh connection to destination is healthy, and the source qemu also thinks
the migration is ongoing as the Fd to which it transfers, is never
closed or broken. So, the migration will hang forever. Even Ctrl-C on the
virsh migrate wouldn't be honoured. Close the source side FD when there is
an error in the stream. That way, the source qemu updates itself and
qemuMigrationWaitForCompletion() notices the failure.

Close the FD for all kinds of errors to be sure. The error message is not
copied for EPIPE so that the destination error is copied instead later.

Note:
Reproducible with repeated migrations between Power hosts running in different
subcores-per-core modes.

Signed-off-by: Shivaprasad G Bhat <sbhat@linux.vnet.ibm.com>
2015-10-16 13:26:32 +02:00
.gnulib@f39477dba7 maint: update to latest gnulib 2015-06-01 13:23:18 -06:00
build-aux bracket-spacing: Add syntax-check for unnecessary curly brackets 2014-11-14 17:13:36 +01:00
daemon Start daemon only after filesystems are mounted 2015-08-26 16:27:49 +02:00
docs NEWS: Unify date format 2015-10-14 18:18:03 +02:00
examples Add example that renames domain there and back 2015-09-04 18:55:01 +02:00
gnulib maint: fix date in local gnulib patch 2015-01-05 16:44:10 +00:00
include Introduce new VIR_DOMAIN_EVENT_DEFINED_RENAMED event 2015-08-14 10:50:20 +02:00
m4 virt-driver-vz: Require parallels-7.0.22 at least 2015-07-13 19:46:10 +03:00
po vz: remove storage driver as never used 2015-10-06 18:22:47 +03:00
src Close the source fd if the destination qemu exits during tunnelled migration 2015-10-16 13:26:32 +02:00
tests qemu: Fix qemu startup check for QEMU_CAPS_OBJECT_IOTHREAD 2015-10-16 06:55:45 -04:00
tools virsh: Use 'format' argument only when specified 2015-10-16 09:01:17 +02:00
.ctags
.dir-locals.el
.gitignore .gitignore: Ignore the correct rename example binary 2015-09-07 10:40:55 +02:00
.gitmodules
.mailmap maint: update .mailmap for recent contributions 2015-03-20 06:17:55 -06:00
AUTHORS.in AUTHORS: Add myself to the list of committers 2015-10-08 11:48:26 +02:00
autobuild.sh
autogen.sh maint: improve usage of autogen's --no-git 2015-02-06 11:35:29 -07:00
bootstrap maint: update to latest gnulib 2015-03-26 09:41:55 -06:00
bootstrap.conf bootstrap: Don't require python-config 2015-08-06 14:35:14 +02:00
cfg.mk tools: Introduce new client generic module vsh 2015-08-14 15:45:44 +02:00
ChangeLog-old
config-post.h
configure.ac Post-release version bump to 1.2.21 2015-10-02 16:14:26 +02:00
COPYING
COPYING.LESSER maint: Remove control characters from LGPL license file 2015-09-25 09:16:24 +02:00
HACKING maint: document use of zanata for translations 2015-06-10 15:26:44 -06:00
libvirt-admin.pc.in Add libvirt-admin library 2015-06-16 13:46:20 +02:00
libvirt-lxc.pc.in
libvirt-qemu.pc.in
libvirt.pc.in
libvirt.spec.in spec: Delete .git after applying patches 2015-10-06 15:54:47 -04:00
Makefile.am examples: Add missing build data for 'rename' 2015-09-07 09:00:19 +02:00
Makefile.nonreentrant
mingw-libvirt.spec.in parallels: substitute parallels with vz spec file and Makefile 2015-06-17 15:07:55 +03:00
README
README-hacking
run.in Add PKG_CONFIG_PATH to run.in script. 2014-06-26 14:32:35 +01:00
TODO

         LibVirt : simple API for virtualization

  Libvirt is a C toolkit to interact with the virtualization capabilities
of recent versions of Linux (and other OSes). It is free software
available under the GNU Lesser General Public License. Virtualization of
the Linux Operating System means the ability to run multiple instances of
Operating Systems concurrently on a single hardware system where the basic
resources are driven by a Linux instance. The library aim at providing
long term stable C API initially for the Xen paravirtualization but
should be able to integrate other virtualization mechanisms if needed.

Daniel Veillard <veillard@redhat.com>