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
|
||||
Name: libvirt
|
||||
Version: 1.1.3.4
|
||||
Release: 3%{?dist}%{?extra_release}
|
||||
Release: 4%{?dist}%{?extra_release}
|
||||
License: LGPLv2+
|
||||
Group: Development/Libraries
|
||||
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)
|
||||
Patch0005: 0005-maint-fix-comma-style-issues-conf.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}
|
||||
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)
|
||||
%patch0005 -p1
|
||||
%patch0006 -p1
|
||||
# Fix migration failure occurring with VIR_DOMAIN_XML_MIGRATABLE (bz
|
||||
# #1075174)
|
||||
%patch0007 -p1
|
||||
|
||||
%build
|
||||
%if ! %{with_xen}
|
||||
|
@ -2136,6 +2142,9 @@ fi
|
|||
%endif
|
||||
|
||||
%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
|
||||
- Escape XML characters in volume XML (bz #1074528)
|
||||
|
||||
|
|
Loading…
Reference in New Issue