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:
committed by
Claudiu Belu
parent
79b2b9427d
commit
3b62ab5e40
@@ -1975,7 +1975,10 @@ class ComputeManager(manager.Manager):
|
|||||||
# Get swap out of the list
|
# Get swap out of the list
|
||||||
swap = driver_block_device.get_swap(swap)
|
swap = driver_block_device.get_swap(swap)
|
||||||
|
|
||||||
|
root_device_name = instance.get('root_device_name')
|
||||||
|
|
||||||
return {'swap': swap,
|
return {'swap': swap,
|
||||||
|
'root_device_name': root_device_name,
|
||||||
'ephemerals': ephemerals,
|
'ephemerals': ephemerals,
|
||||||
'block_device_mapping': block_device_mapping}
|
'block_device_mapping': block_device_mapping}
|
||||||
|
|
||||||
|
|||||||
@@ -2793,6 +2793,7 @@ class ComputeTestCase(BaseTestCase):
|
|||||||
expected = {
|
expected = {
|
||||||
'swap': None,
|
'swap': None,
|
||||||
'ephemerals': [],
|
'ephemerals': [],
|
||||||
|
'root_device_name': None,
|
||||||
'block_device_mapping': [{
|
'block_device_mapping': [{
|
||||||
'connection_info': {
|
'connection_info': {
|
||||||
'driver_volume_type': 'rbd'
|
'driver_volume_type': 'rbd'
|
||||||
@@ -2824,6 +2825,7 @@ class ComputeTestCase(BaseTestCase):
|
|||||||
expected = {
|
expected = {
|
||||||
'swap': None,
|
'swap': None,
|
||||||
'ephemerals': [],
|
'ephemerals': [],
|
||||||
|
'root_device_name': None,
|
||||||
'block_device_mapping': [{
|
'block_device_mapping': [{
|
||||||
'connection_info': {
|
'connection_info': {
|
||||||
'driver_volume_type': 'rbd'
|
'driver_volume_type': 'rbd'
|
||||||
@@ -2888,7 +2890,8 @@ class ComputeTestCase(BaseTestCase):
|
|||||||
'virtual_name': 'ephemeral0'},
|
'virtual_name': 'ephemeral0'},
|
||||||
{'device_name': '/dev/vdc', 'num': 1, 'size': 2,
|
{'device_name': '/dev/vdc', 'num': 1, 'size': 2,
|
||||||
'virtual_name': 'ephemeral1'}],
|
'virtual_name': 'ephemeral1'}],
|
||||||
'block_device_mapping': []
|
'block_device_mapping': [],
|
||||||
|
'root_device_name': None
|
||||||
}
|
}
|
||||||
|
|
||||||
block_device_info = (
|
block_device_info = (
|
||||||
@@ -5423,6 +5426,7 @@ class ComputeTestCase(BaseTestCase):
|
|||||||
self.mox.StubOutWithMock(self.compute.driver, 'pre_live_migration')
|
self.mox.StubOutWithMock(self.compute.driver, 'pre_live_migration')
|
||||||
self.compute.driver.pre_live_migration(mox.IsA(c), mox.IsA(instance),
|
self.compute.driver.pre_live_migration(mox.IsA(c), mox.IsA(instance),
|
||||||
{'swap': None, 'ephemerals': [],
|
{'swap': None, 'ephemerals': [],
|
||||||
|
'root_device_name': None,
|
||||||
'block_device_mapping': []},
|
'block_device_mapping': []},
|
||||||
mox.IgnoreArg(),
|
mox.IgnoreArg(),
|
||||||
mox.IgnoreArg(),
|
mox.IgnoreArg(),
|
||||||
@@ -5492,7 +5496,8 @@ class ComputeTestCase(BaseTestCase):
|
|||||||
'rollback_live_migration_at_destination')
|
'rollback_live_migration_at_destination')
|
||||||
|
|
||||||
block_device_info = {
|
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(
|
self.compute.driver.get_instance_disk_info(
|
||||||
instance.name,
|
instance.name,
|
||||||
block_device_info=block_device_info).AndReturn('fake_disk')
|
block_device_info=block_device_info).AndReturn('fake_disk')
|
||||||
@@ -5668,6 +5673,7 @@ class ComputeTestCase(BaseTestCase):
|
|||||||
|
|
||||||
post_live_migration.assert_has_calls([
|
post_live_migration.assert_has_calls([
|
||||||
mock.call(c, instance, {'swap': None, 'ephemerals': [],
|
mock.call(c, instance, {'swap': None, 'ephemerals': [],
|
||||||
|
'root_device_name': None,
|
||||||
'block_device_mapping': []}, None)])
|
'block_device_mapping': []}, None)])
|
||||||
unfilter_instance.assert_has_calls([mock.call(instance, [])])
|
unfilter_instance.assert_has_calls([mock.call(instance, [])])
|
||||||
migration = {'source_compute': srchost,
|
migration = {'source_compute': srchost,
|
||||||
@@ -5826,6 +5832,7 @@ class ComputeTestCase(BaseTestCase):
|
|||||||
'rollback_live_migration_at_destination')
|
'rollback_live_migration_at_destination')
|
||||||
self.compute.driver.rollback_live_migration_at_destination(c,
|
self.compute.driver.rollback_live_migration_at_destination(c,
|
||||||
instance, [], {'swap': None, 'ephemerals': [],
|
instance, [], {'swap': None, 'ephemerals': [],
|
||||||
|
'root_device_name': None,
|
||||||
'block_device_mapping': []},
|
'block_device_mapping': []},
|
||||||
destroy_disks=True, migrate_data=None)
|
destroy_disks=True, migrate_data=None)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user