Make _get_instance_block_device_info preserve root_device_name

On hard reboots,
nova.compute.manager.ComputeManager._get_instance_block_device_info will
faithfully reconstruct all of the block_device_info attributes that
the instance needs, except for the root_device_name.  This causes
the instance to effectively lose its disk configurations on hard
reboots.

This patch set will preserve the root_device_name if it is defined
for the instance.

Conflicts:
	nova/tests/unit/compute/test_compute.py

(cherry picked from commit ee435b4267)

Closes-Bug: #1378132
Change-Id: Ia36b1d6170ad120f794aa16d41ed4275b4b11f22
This commit is contained in:
Nicolas Simonds
2014-10-06 15:24:58 -07:00
committed by Claudiu Belu
parent 79b2b9427d
commit 3b62ab5e40
2 changed files with 12 additions and 2 deletions

View File

@@ -1975,7 +1975,10 @@ class ComputeManager(manager.Manager):
# Get swap out of the list
swap = driver_block_device.get_swap(swap)
root_device_name = instance.get('root_device_name')
return {'swap': swap,
'root_device_name': root_device_name,
'ephemerals': ephemerals,
'block_device_mapping': block_device_mapping}

View File

@@ -2793,6 +2793,7 @@ class ComputeTestCase(BaseTestCase):
expected = {
'swap': None,
'ephemerals': [],
'root_device_name': None,
'block_device_mapping': [{
'connection_info': {
'driver_volume_type': 'rbd'
@@ -2824,6 +2825,7 @@ class ComputeTestCase(BaseTestCase):
expected = {
'swap': None,
'ephemerals': [],
'root_device_name': None,
'block_device_mapping': [{
'connection_info': {
'driver_volume_type': 'rbd'
@@ -2888,7 +2890,8 @@ class ComputeTestCase(BaseTestCase):
'virtual_name': 'ephemeral0'},
{'device_name': '/dev/vdc', 'num': 1, 'size': 2,
'virtual_name': 'ephemeral1'}],
'block_device_mapping': []
'block_device_mapping': [],
'root_device_name': None
}
block_device_info = (
@@ -5423,6 +5426,7 @@ class ComputeTestCase(BaseTestCase):
self.mox.StubOutWithMock(self.compute.driver, 'pre_live_migration')
self.compute.driver.pre_live_migration(mox.IsA(c), mox.IsA(instance),
{'swap': None, 'ephemerals': [],
'root_device_name': None,
'block_device_mapping': []},
mox.IgnoreArg(),
mox.IgnoreArg(),
@@ -5492,7 +5496,8 @@ class ComputeTestCase(BaseTestCase):
'rollback_live_migration_at_destination')
block_device_info = {
'swap': None, 'ephemerals': [], 'block_device_mapping': []}
'swap': None, 'ephemerals': [], 'block_device_mapping': [],
'root_device_name': None}
self.compute.driver.get_instance_disk_info(
instance.name,
block_device_info=block_device_info).AndReturn('fake_disk')
@@ -5668,6 +5673,7 @@ class ComputeTestCase(BaseTestCase):
post_live_migration.assert_has_calls([
mock.call(c, instance, {'swap': None, 'ephemerals': [],
'root_device_name': None,
'block_device_mapping': []}, None)])
unfilter_instance.assert_has_calls([mock.call(instance, [])])
migration = {'source_compute': srchost,
@@ -5826,6 +5832,7 @@ class ComputeTestCase(BaseTestCase):
'rollback_live_migration_at_destination')
self.compute.driver.rollback_live_migration_at_destination(c,
instance, [], {'swap': None, 'ephemerals': [],
'root_device_name': None,
'block_device_mapping': []},
destroy_disks=True, migrate_data=None)