[Bug 1888395] Fix merged to nova (stable/train)
OpenStack Infra
1888395 at bugs.launchpad.net
Fri Jun 4 15:52:51 UTC 2021
Reviewed: https://review.opendev.org/c/openstack/nova/+/759153
Committed: https://opendev.org/openstack/nova/commit/5a6fd88f7aaa18b9cbd7ab594b4e1dac0b7d22ca
Submitter: "Zuul (22348)"
Branch: stable/train
commit 5a6fd88f7aaa18b9cbd7ab594b4e1dac0b7d22ca
Author: root <shrike_ at mail.ru>
Date: Sat Jul 18 00:32:54 2020 -0400
Set migrate_data.vifs only when using multiple port bindings
In the rocky cycle nova was enhanced to support the multiple
port binding live migration workflow when neutron supports
the binding-extended API extension.
When the migration_data object was extended to support
multiple port bindings, populating the vifs field was used
as a sentinel to indicate that the new workflow should
be used.
In the train release
I734cc01dce13f9e75a16639faf890ddb1661b7eb
(SR-IOV Live migration indirect port support)
broke the semantics of the migrate_data object by
unconditionally populating the vifs field
This change restores the rocky semantics, which are depended
on by several parts of the code base, by only conditionally
populating vifs if neutron supports multiple port bindings.
Changes to patch:
- unit/virt/libvirt/fakelibvirt.py: Include partial pick from
change Ia3d7351c1805d98bcb799ab0375673c7f1cb8848 to add the
jobStats, complete_job and fail_job to fakelibvirt. The full
change was not cherry-picked as it was part of the numa aware
live migration feature in Victoria.
- renamed import of nova.network.neutron to
nova.network.neutronv2.api
- mocked nova.virt.libvirt.guest.Guest.get_job_info to return
fakelibvirt.VIR_DOMAIN_JOB_COMPLETED
- replaced from urllib import parse as urlparse with
import six.moves.urllib.parse as urlparse for py2.7
Conflicts:
nova/tests/functional/regressions/test_bug_1888395.py
nova/tests/unit/compute/test_compute.py
nova/tests/unit/compute/test_compute_mgr.py
nova/tests/unit/virt/test_virt_drivers.py
Co-Authored-By: Sean Mooney <work at seanmooney.info>
Change-Id: Ia00277ac8a68a635db85f9e0ce2c6d8df396e0d8
Closes-Bug: #1888395
(cherry picked from commit b8f3be6b3c5af91d215b4a0cecb9be098e8d8799)
(cherry picked from commit afa843c8a7e128489a8245ed7a1b391c022b3305)
--
You received this bug notification because you are a member of Ubuntu
OpenStack, which is subscribed to Ubuntu Cloud Archive.
https://bugs.launchpad.net/bugs/1888395
Title:
live migration of a vm using the single port binding work flow is
broken in train as a result of the introduction of sriov live
migration
Status in Ubuntu Cloud Archive:
Fix Released
Status in Ubuntu Cloud Archive train series:
Fix Committed
Status in Ubuntu Cloud Archive ussuri series:
Fix Released
Status in Ubuntu Cloud Archive victoria series:
Fix Released
Status in networking-opencontrail:
New
Status in OpenStack Compute (nova):
Fix Released
Status in OpenStack Compute (nova) train series:
In Progress
Status in OpenStack Compute (nova) ussuri series:
Fix Released
Status in nova package in Ubuntu:
Fix Released
Status in nova source package in Focal:
Fix Released
Status in nova source package in Groovy:
Fix Released
Bug description:
[Impact]
Live migration of instances in an environment that uses neutron
backends that do not support multiple port bindings will fail with
error 'NotImplemented', effectively rendering live-migration
inoperable in these environments.
This is fixed by first checking to ensure the backend supports the
multiple port bindings before providing the port bindings.
[Test Plan]
1. deploy a Train/Ussuri OpenStack cloud w/ at least 2 compute nodes
using an SDN that does not support multiple port bindings (e.g.
opencontrail).
2. Attempt to perform a live migration of an instance.
3. Observe that the live migration will fail without this fix due to
the trace below (NotImplementedError: Cannot load 'vif_type' in the
base class), and should succeed with this fix.
[Where problems could occur]
This affects the live migration code, so likely problems would arise
in this area. Specifically, the check introduced is guarding
information provided for instances using SR-IOV indirect migration.
Regressions would likely occur in the form of live migration errors
around features that rely on the multiple port bindings (e.g. the SR-
IOV) and not the more generic/common use case. Errors may be seen in
standard network providers that are included with distro packaging,
but may also be seen in scenarios where proprietary SDNs are used.
[Original Description]
it was working in queens but fails in train. nova compute at the target aborts with the exception:
Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/oslo_messaging/rpc/server.py", line 165, in _process_incoming
res = self.dispatcher.dispatch(message)
File "/usr/lib/python2.7/site-packages/oslo_messaging/rpc/dispatcher.py", line 274, in dispatch
return self._do_dispatch(endpoint, method, ctxt, args)
File "/usr/lib/python2.7/site-packages/oslo_messaging/rpc/dispatcher.py", line 194, in _do_dispatch
result = func(ctxt, **new_args)
File "/usr/lib/python2.7/site-packages/nova/exception_wrapper.py", line 79, in wrapped
function_name, call_dict, binary, tb)
File "/usr/lib/python2.7/site-packages/oslo_utils/excutils.py", line 220, in __exit__
self.force_reraise()
File "/usr/lib/python2.7/site-packages/oslo_utils/excutils.py", line 196, in force_reraise
six.reraise(self.type_, self.value, self.tb)
File "/usr/lib/python2.7/site-packages/nova/exception_wrapper.py", line 69, in wrapped
return f(self, context, *args, **kw)
File "/usr/lib/python2.7/site-packages/nova/compute/utils.py", line 1372, in decorated_function
return function(self, context, *args, **kwargs)
File "/usr/lib/python2.7/site-packages/nova/compute/manager.py", line 219, in decorated_function
kwargs['instance'], e, sys.exc_info())
File "/usr/lib/python2.7/site-packages/oslo_utils/excutils.py", line 220, in __exit__ self.force_reraise()
File "/usr/lib/python2.7/site-packages/oslo_utils/excutils.py", line 196, in force_reraise
six.reraise(self.type_, self.value, self.tb) File "/usr/lib/python2.7/site-packages/nova/compute/manager.py", line 207, in decorated_function
return function(self, context, *args, **kwargs)
File "/usr/lib/python2.7/site-packages/nova/compute/manager.py", line 7007, in pre_live_migration
bdm.save()
File "/usr/lib/python2.7/site-packages/oslo_utils/excutils.py", line 220, in __exit__
self.force_reraise()
File "/usr/lib/python2.7/site-packages/oslo_utils/excutils.py", line 196, in force_reraise
six.reraise(self.type_, self.value, self.tb)
File "/usr/lib/python2.7/site-packages/nova/compute/manager.py", line 6972, in pre_live_migration
migrate_data)
File "/usr/lib/python2.7/site-packages/nova/virt/libvirt/driver.py", line 9190, in pre_live_migration
instance, network_info, migrate_data)
File "/usr/lib/python2.7/site-packages/nova/virt/libvirt/driver.py", line 9071, in _pre_live_migration_plug_vifs
vif_plug_nw_info.append(migrate_vif.get_dest_vif())
File "/usr/lib/python2.7/site-packages/nova/objects/migrate_data.py", line 90, in get_dest_vif
vif['type'] = self.vif_type
File "/usr/lib/python2.7/site-packages/oslo_versionedobjects/base.py", line 67, in getter
self.obj_load_attr(name)
File "/usr/lib/python2.7/site-packages/oslo_versionedobjects/base.py", line 603, in obj_load_attr
_("Cannot load '%s' in the base class") % attrname)
NotImplementedError: Cannot load 'vif_type' in the base class
steps to reproduce:
- train centos 7 based deployment: 1 controller, 2 computes, libvirt + qemu-kvm, ceph shared storage, neutron with contrail vrouter virtual network;
- create and start a vm;
- live migrate it between computes.
expected result: vm migrates successfully.
rpm -qa | grep nova:
python2-novaclient-15.1.1-1.el7.noarch
openstack-nova-common-20.3.0-1.el7.noarch
python2-nova-20.3.0-1.el7.noarch
openstack-nova-compute-20.3.0-1.el7.noarch
To manage notifications about this bug go to:
https://bugs.launchpad.net/cloud-archive/+bug/1888395/+subscriptions
More information about the Ubuntu-openstack-bugs
mailing list