Bug 1318722
Summary: | live migration without shared storage fails in pre_live_migration after upgrade to 2015.1.2-18.2 | |||
---|---|---|---|---|
Product: | Red Hat OpenStack | Reporter: | Martin Schuppert <mschuppe> | |
Component: | openstack-nova | Assignee: | Lee Yarwood <lyarwood> | |
Status: | CLOSED ERRATA | QA Contact: | Prasanth Anbalagan <panbalag> | |
Severity: | urgent | Docs Contact: | ||
Priority: | high | |||
Version: | 7.0 (Kilo) | CC: | adhingra, berrange, dasmith, dmaley, eglynn, kchamart, kimi.zhang, lyarwood, sbauza, scorcora, sferdjao, sgordon, srevivo, vromanso | |
Target Milestone: | async | Keywords: | ZStream | |
Target Release: | 7.0 (Kilo) | |||
Hardware: | Unspecified | |||
OS: | Unspecified | |||
Whiteboard: | ||||
Fixed In Version: | openstack-nova-2015.1.3-8.el7ost | Doc Type: | Bug Fix | |
Doc Text: | Story Points: | --- | ||
Clone Of: | ||||
: | 1318766 1318767 1318768 (view as bug list) | Environment: | ||
Last Closed: | 2016-04-26 16:54:24 UTC | Type: | Bug | |
Regression: | --- | Mount Type: | --- | |
Documentation: | --- | CRM: | ||
Verified Versions: | Category: | --- | ||
oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | ||
Cloudforms Team: | --- | Target Upstream Version: | ||
Embargoed: | ||||
Bug Depends On: | ||||
Bug Blocks: | 1318766, 1318767, 1318768 |
Description
Martin Schuppert
2016-03-17 15:18:24 UTC
disk_info is: 2016-03-17 11:37:42.637 6497 DEBUG nova.virt.libvirt.driver [req-8c0157c2-adf7-41c4-bbf3-7117c96d5fa8 4b730783a9af469b8168a8e8a58e510f 342bdc50ad5c415594975e762bdd8456 - - -] disk_info: u'[{"disk_size": 1703936, "backing_file": "7aadcb85f689579f6b1cf9b7d21bfaed4212f42f", "virt_disk _size": 1073741824, "path": "/var/lib/nova/instances/8e972bd1-7e82-4868-9ac4-b80cc2eb098e/disk", "type": "qcow2", "over_committed_disk_size": 1072037888}]' pre_live_migration /usr/lib/python2.7/site-packages/nova/virt/libvirt/driver.py:6000 This is happening due to self.driver.get_instance_disk_info being called by the compute manager when block_migration is enabled : nova/compute/manager.py 5293 def _do_live_migration(self, context, dest, instance, block_migration, 5294 migrate_data): 5295 # Create a local copy since we'll be modifying the dictionary 5296 migrate_data = dict(migrate_data or {}) 5297 try: 5298 if block_migration: 5299 block_device_info = self._get_instance_block_device_info( 5300 context, instance) 5301 disk = self.driver.get_instance_disk_info( 5302 instance, block_device_info=block_device_info) 5303 else: 5304 disk = None 5305 5306 pre_migration_data = self.compute_rpcapi.pre_live_migration( 5307 context, instance, 5308 block_migration, disk, dest, migrate_data) 5309 migrate_data['pre_live_migration_result'] = pre_migration_data nova/virt/libvirt/driver.py 6418 def get_instance_disk_info(self, instance, 6419 block_device_info=None): 6420 try: 6421 dom = self._host.get_domain(instance) 6422 xml = dom.XMLDesc(0) 6423 except libvirt.libvirtError as ex: 6424 error_code = ex.get_error_code() 6425 msg = (_('Error from libvirt while getting description of ' 6426 '%(instance_name)s: [Error Code %(error_code)s] ' 6427 '%(ex)s') % 6428 {'instance_name': instance.name, 6429 'error_code': error_code, 6430 'ex': ex}) 6431 LOG.warn(msg) 6432 raise exception.InstanceNotFound(instance_id=instance.name) 6433 6434 return jsonutils.dumps( 6435 self._get_instance_disk_info(instance.name, xml, 6436 block_device_info)) This sets disk_info to an encoded JSON string (for example u'[{"foo":"bar},{"bar":"foo"}]'), causing the failure documented in c#0. The get_instance_disk_info method switched back to plain strings for Liberty with the following change : libvirt: Remove unnecessary JSON conversions https://review.openstack.org/#/c/177437/6 Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://rhn.redhat.com/errata/RHBA-2016-0694.html |