[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