yahoo-eng-team team mailing list archive
-
yahoo-eng-team team
-
Mailing list archive
-
Message #47847
[Bug 1551925] Re: NotImplementedError: Cannot load 'serial_listen_addr' in the base class
Reviewed: https://review.openstack.org/286828
Committed: https://git.openstack.org/cgit/openstack/nova/commit/?id=2e2732557a1f8ed38e2ee1b041670cc15ce74377
Submitter: Jenkins
Branch: master
commit 2e2732557a1f8ed38e2ee1b041670cc15ce74377
Author: Matt Riedemann <mriedem@xxxxxxxxxx>
Date: Tue Mar 1 15:30:40 2016 -0500
libvirt: check for optional LibvirtLiveMigrateData attrs before loading
The _live_migration_operation method is accessing the nullable
attributes 'serial_listen_addr' and 'target_connect_addr' on the
LibvirtLiveMigrateData object which might not be set on the object.
Since they aren't lazy-loadable, this results in a NotImplementedError
if the attribute aren't set. This is fixed by adding conditional checks
in _live_migration_operation for the nullable attributes. Note that
bdms is nullable=False in the LiveMigrateDataObject and should be set
when the migrate_data object comes to the virt driver, so the test case
is updated in this case to fix the bdms attribute access.
There was a test hitting this, but because the libvirt driver runs
_live_migration_operation in a thread, the error was just being
logged and the test would pass.
So to fix that, the SpawnIsSynchronous fixture is used in the test
class to make the _live_migration_operation synchronous for that
test.
However, that doesn't fully resolve the gap in the test because
of the @catch_notimplemented decorator used on the test case. That
is meant for virt drivers which don't implement the live_migration
method but it can also allow silent failures in object attribute
access from bubbling up as failures. So this change also removes
that decorator from the test case.
Note that the tests themselves are pretty hacky in this case anyway
since while they are meant to be generic per virt driver, the
object passed down is LibvirtLiveMigrateData, which won't be
correct for xenapi, for example.
Closes-Bug: #1551925
Change-Id: I2744e99617d4e4834bb8372fa62dbad7686b1301
** Changed in: nova
Status: In Progress => Fix Released
--
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to OpenStack Compute (nova).
https://bugs.launchpad.net/bugs/1551925
Title:
NotImplementedError: Cannot load 'serial_listen_addr' in the base
class
Status in OpenStack Compute (nova):
Fix Released
Bug description:
This is seen in unit test runs:
http://logs.openstack.org/59/284959/5/gate/gate-nova-
python27/8ab5da7/console.html
2016-03-01 14:54:26.205 | {1} nova.tests.unit.virt.test_virt_drivers.LibvirtConnTestCase.test_live_migration [0.190245s] ... ok
2016-03-01 14:54:26.205 |
2016-03-01 14:54:26.205 | Captured stderr:
2016-03-01 14:54:26.206 | ~~~~~~~~~~~~~~~~
2016-03-01 14:54:26.206 | Traceback (most recent call last):
2016-03-01 14:54:26.206 | File "/home/jenkins/workspace/gate-nova-python27/.tox/py27/local/lib/python2.7/site-packages/eventlet/hubs/hub.py", line 457, in fire_timers
2016-03-01 14:54:26.206 | timer()
2016-03-01 14:54:26.206 | File "/home/jenkins/workspace/gate-nova-python27/.tox/py27/local/lib/python2.7/site-packages/eventlet/hubs/timer.py", line 58, in __call__
2016-03-01 14:54:26.206 | cb(*args, **kw)
2016-03-01 14:54:26.206 | File "/home/jenkins/workspace/gate-nova-python27/.tox/py27/local/lib/python2.7/site-packages/eventlet/greenthread.py", line 214, in main
2016-03-01 14:54:26.206 | result = function(*args, **kwargs)
2016-03-01 14:54:26.206 | File "nova/utils.py", line 1160, in context_wrapper
2016-03-01 14:54:26.206 | return func(*args, **kwargs)
2016-03-01 14:54:26.206 | File "nova/virt/libvirt/driver.py", line 6088, in _live_migration_operation
2016-03-01 14:54:26.207 | instance=instance)
2016-03-01 14:54:26.207 | File "/home/jenkins/workspace/gate-nova-python27/.tox/py27/local/lib/python2.7/site-packages/oslo_utils/excutils.py", line 220, in __exit__
2016-03-01 14:54:26.207 | self.force_reraise()
2016-03-01 14:54:26.207 | File "/home/jenkins/workspace/gate-nova-python27/.tox/py27/local/lib/python2.7/site-packages/oslo_utils/excutils.py", line 196, in force_reraise
2016-03-01 14:54:26.207 | six.reraise(self.type_, self.value, self.tb)
2016-03-01 14:54:26.207 | File "nova/virt/libvirt/driver.py", line 6014, in _live_migration_operation
2016-03-01 14:54:26.207 | serial_listen_addr = migrate_data.serial_listen_addr
2016-03-01 14:54:26.207 | File "/home/jenkins/workspace/gate-nova-python27/.tox/py27/local/lib/python2.7/site-packages/oslo_versionedobjects/base.py", line 67, in getter
2016-03-01 14:54:26.207 | self.obj_load_attr(name)
2016-03-01 14:54:26.207 | File "/home/jenkins/workspace/gate-nova-python27/.tox/py27/local/lib/python2.7/site-packages/oslo_versionedobjects/base.py", line 580, in obj_load_attr
2016-03-01 14:54:26.207 | _("Cannot load '%s' in the base class") % attrname)
2016-03-01 14:54:26.207 | NotImplementedError: Cannot load 'serial_listen_addr' in the base class
2016-03-01 14:54:26.208 |
The error is squashed since the
nova.tests.unit.virt.test_virt_drivers._VirtDriverTestCase that
defines the test ignores NotImplementedError:
https://github.com/openstack/nova/blob/9ab6840af64d6af58baf51040afe86a3324221e5/nova/tests/unit/virt/test_virt_drivers.py#L659
The code is unconditionally loading the attribute:
https://github.com/openstack/nova/blob/1345d0fe1cad5093d49a58b6f0b7f4cb650f61d8/nova/virt/libvirt/driver.py#L5946
But the attribute is optional:
https://github.com/openstack/nova/blob/1345d0fe1cad5093d49a58b6f0b7f4cb650f61d8/nova/objects/migrate_data.py#L124
To manage notifications about this bug go to:
https://bugs.launchpad.net/nova/+bug/1551925/+subscriptions
References