Fix migration failure occurring with VIR_DOMAIN_XML_MIGRATABLE (bz #1075174)
parent
2b7e43f135
commit
9cd81dde07
|
@ -0,0 +1,135 @@
|
||||||
|
From ddbaa2a562b53ec3eb99820217df4d721ebfdefe Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
Date: Thu, 10 Oct 2013 10:53:56 +0200
|
||||||
|
Subject: [PATCH] qemu: Introduce qemuDomainDefCheckABIStability
|
||||||
|
|
||||||
|
https://bugzilla.redhat.com/show_bug.cgi?id=994364
|
||||||
|
|
||||||
|
Whenever we check for ABI stability, we have new xml (e.g. provided by
|
||||||
|
user, or obtained from snapshot, whatever) which we compare to old xml
|
||||||
|
and see if ABI won't break. However, if the new xml was produced via
|
||||||
|
virDomainGetXMLDesc(..., VIR_DOMAIN_XML_MIGRATABLE) it lacks some
|
||||||
|
devices, e.g. 'pci-root' controller. Hence, the ABI stability check
|
||||||
|
fails even though it is stable. Moreover, we can't simply fix
|
||||||
|
virDomainDefCheckABIStability because removing the correct devices is
|
||||||
|
task for the driver. For instance, qemu driver wants to remove the usb
|
||||||
|
controller too, while LXC driver doesn't. That's why we need special
|
||||||
|
qemu wrapper over virDomainDefCheckABIStability which removes the
|
||||||
|
correct devices from domain XML, produces MIGRATABLE xml and calls the
|
||||||
|
check ABI stability function.
|
||||||
|
|
||||||
|
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
(cherry picked from commit 7d704812b9c50cd3804dd1e7f9e2ea3e75fdc847)
|
||||||
|
---
|
||||||
|
src/qemu/qemu_domain.c | 22 ++++++++++++++++++++++
|
||||||
|
src/qemu/qemu_domain.h | 3 +++
|
||||||
|
src/qemu/qemu_driver.c | 10 ++--------
|
||||||
|
src/qemu/qemu_migration.c | 4 ++--
|
||||||
|
4 files changed, 29 insertions(+), 10 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
|
||||||
|
index 968e323..f3e2ba1 100644
|
||||||
|
--- a/src/qemu/qemu_domain.c
|
||||||
|
+++ b/src/qemu/qemu_domain.c
|
||||||
|
@@ -2342,3 +2342,25 @@ qemuDomainUpdateDeviceList(virQEMUDriverPtr driver,
|
||||||
|
priv->qemuDevices = aliases;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+bool
|
||||||
|
+qemuDomainDefCheckABIStability(virQEMUDriverPtr driver,
|
||||||
|
+ virDomainDefPtr src,
|
||||||
|
+ virDomainDefPtr dst)
|
||||||
|
+{
|
||||||
|
+ virDomainDefPtr migratableDefSrc = NULL;
|
||||||
|
+ virDomainDefPtr migratableDefDst = NULL;
|
||||||
|
+ const int flags = VIR_DOMAIN_XML_SECURE | VIR_DOMAIN_XML_UPDATE_CPU | VIR_DOMAIN_XML_MIGRATABLE;
|
||||||
|
+ bool ret = false;
|
||||||
|
+
|
||||||
|
+ if (!(migratableDefSrc = qemuDomainDefCopy(driver, src, flags)) ||
|
||||||
|
+ !(migratableDefDst = qemuDomainDefCopy(driver, dst, flags)))
|
||||||
|
+ goto cleanup;
|
||||||
|
+
|
||||||
|
+ ret = virDomainDefCheckABIStability(migratableDefSrc, migratableDefDst);
|
||||||
|
+
|
||||||
|
+cleanup:
|
||||||
|
+ virDomainDefFree(migratableDefSrc);
|
||||||
|
+ virDomainDefFree(migratableDefDst);
|
||||||
|
+ return ret;
|
||||||
|
+}
|
||||||
|
diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
|
||||||
|
index 04f08a3..77e0c20 100644
|
||||||
|
--- a/src/qemu/qemu_domain.h
|
||||||
|
+++ b/src/qemu/qemu_domain.h
|
||||||
|
@@ -369,4 +369,7 @@ extern virDomainDefParserConfig virQEMUDriverDomainDefParserConfig;
|
||||||
|
int qemuDomainUpdateDeviceList(virQEMUDriverPtr driver,
|
||||||
|
virDomainObjPtr vm);
|
||||||
|
|
||||||
|
+bool qemuDomainDefCheckABIStability(virQEMUDriverPtr driver,
|
||||||
|
+ virDomainDefPtr src,
|
||||||
|
+ virDomainDefPtr dst);
|
||||||
|
#endif /* __QEMU_DOMAIN_H__ */
|
||||||
|
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
||||||
|
index 58be308..d7f92f4 100644
|
||||||
|
--- a/src/qemu/qemu_driver.c
|
||||||
|
+++ b/src/qemu/qemu_driver.c
|
||||||
|
@@ -3085,7 +3085,7 @@ qemuDomainSaveInternal(virQEMUDriverPtr driver, virDomainPtr dom,
|
||||||
|
VIR_DOMAIN_XML_INACTIVE))) {
|
||||||
|
goto endjob;
|
||||||
|
}
|
||||||
|
- if (!virDomainDefCheckABIStability(vm->def, def)) {
|
||||||
|
+ if (!qemuDomainDefCheckABIStability(driver, vm->def, def)) {
|
||||||
|
virDomainDefFree(def);
|
||||||
|
goto endjob;
|
||||||
|
}
|
||||||
|
@@ -13030,7 +13030,6 @@ static int qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
|
||||||
|
qemuDomainObjPrivatePtr priv;
|
||||||
|
int rc;
|
||||||
|
virDomainDefPtr config = NULL;
|
||||||
|
- virDomainDefPtr migratableDef = NULL;
|
||||||
|
virQEMUDriverConfigPtr cfg = NULL;
|
||||||
|
virCapsPtr caps = NULL;
|
||||||
|
|
||||||
|
@@ -13147,11 +13146,7 @@ static int qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
|
||||||
|
/* Transitions 5, 6, 8, 9 */
|
||||||
|
/* Check for ABI compatibility. We need to do this check against
|
||||||
|
* the migratable XML or it will always fail otherwise */
|
||||||
|
- if (!(migratableDef = qemuDomainDefCopy(driver, vm->def,
|
||||||
|
- VIR_DOMAIN_XML_MIGRATABLE)))
|
||||||
|
- goto cleanup;
|
||||||
|
-
|
||||||
|
- if (config && !virDomainDefCheckABIStability(migratableDef, config)) {
|
||||||
|
+ if (config && !qemuDomainDefCheckABIStability(driver, vm->def, config)) {
|
||||||
|
virErrorPtr err = virGetLastError();
|
||||||
|
|
||||||
|
if (!(flags & VIR_DOMAIN_SNAPSHOT_REVERT_FORCE)) {
|
||||||
|
@@ -13356,7 +13351,6 @@ cleanup:
|
||||||
|
}
|
||||||
|
if (vm)
|
||||||
|
virObjectUnlock(vm);
|
||||||
|
- virDomainDefFree(migratableDef);
|
||||||
|
virObjectUnref(caps);
|
||||||
|
virObjectUnref(cfg);
|
||||||
|
|
||||||
|
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
|
||||||
|
index 58f90c2..2db5ed0 100644
|
||||||
|
--- a/src/qemu/qemu_migration.c
|
||||||
|
+++ b/src/qemu/qemu_migration.c
|
||||||
|
@@ -2043,7 +2043,7 @@ static char
|
||||||
|
VIR_DOMAIN_XML_INACTIVE)))
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
- if (!virDomainDefCheckABIStability(vm->def, def))
|
||||||
|
+ if (!qemuDomainDefCheckABIStability(driver, vm->def, def))
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
rv = qemuDomainDefFormatLive(driver, def, false, true);
|
||||||
|
@@ -2250,7 +2250,7 @@ qemuMigrationPrepareAny(virQEMUDriverPtr driver,
|
||||||
|
if (!newdef)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
- if (!virDomainDefCheckABIStability(*def, newdef)) {
|
||||||
|
+ if (!qemuDomainDefCheckABIStability(driver, *def, newdef)) {
|
||||||
|
virDomainDefFree(newdef);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
11
libvirt.spec
11
libvirt.spec
|
@ -367,7 +367,7 @@
|
||||||
Summary: Library providing a simple virtualization API
|
Summary: Library providing a simple virtualization API
|
||||||
Name: libvirt
|
Name: libvirt
|
||||||
Version: 1.1.3.4
|
Version: 1.1.3.4
|
||||||
Release: 3%{?dist}%{?extra_release}
|
Release: 4%{?dist}%{?extra_release}
|
||||||
License: LGPLv2+
|
License: LGPLv2+
|
||||||
Group: Development/Libraries
|
Group: Development/Libraries
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
|
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
|
||||||
|
@ -386,6 +386,9 @@ Patch0004: 0004-virNetServerRun-Notify-systemd-that-we-re-accepting-.patch
|
||||||
# Escape XML characters in volume XML (bz #1074528)
|
# Escape XML characters in volume XML (bz #1074528)
|
||||||
Patch0005: 0005-maint-fix-comma-style-issues-conf.patch
|
Patch0005: 0005-maint-fix-comma-style-issues-conf.patch
|
||||||
Patch0006: 0006-storage-use-valid-XML-for-awkward-volume-names.patch
|
Patch0006: 0006-storage-use-valid-XML-for-awkward-volume-names.patch
|
||||||
|
# Fix migration failure occurring with VIR_DOMAIN_XML_MIGRATABLE (bz
|
||||||
|
# #1075174)
|
||||||
|
Patch0007: 0007-qemu-Introduce-qemuDomainDefCheckABIStability.patch
|
||||||
|
|
||||||
%if %{with_libvirtd}
|
%if %{with_libvirtd}
|
||||||
Requires: libvirt-daemon = %{version}-%{release}
|
Requires: libvirt-daemon = %{version}-%{release}
|
||||||
|
@ -1178,6 +1181,9 @@ of recent versions of Linux (and other OSes).
|
||||||
# Escape XML characters in volume XML (bz #1074528)
|
# Escape XML characters in volume XML (bz #1074528)
|
||||||
%patch0005 -p1
|
%patch0005 -p1
|
||||||
%patch0006 -p1
|
%patch0006 -p1
|
||||||
|
# Fix migration failure occurring with VIR_DOMAIN_XML_MIGRATABLE (bz
|
||||||
|
# #1075174)
|
||||||
|
%patch0007 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%if ! %{with_xen}
|
%if ! %{with_xen}
|
||||||
|
@ -2136,6 +2142,9 @@ fi
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Mar 18 2014 Cole Robinson <crobinso@redhat.com> - 1.1.3.4-4
|
||||||
|
- Fix migration failure occurring with VIR_DOMAIN_XML_MIGRATABLE (bz #1075174)
|
||||||
|
|
||||||
* Mon Mar 10 2014 Cole Robinson <crobinso@redhat.com> - 1.1.3.4-3
|
* Mon Mar 10 2014 Cole Robinson <crobinso@redhat.com> - 1.1.3.4-3
|
||||||
- Escape XML characters in volume XML (bz #1074528)
|
- Escape XML characters in volume XML (bz #1074528)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue