From 07845ad68f83952bbae36b4b115ff6c433e81fa3 Mon Sep 17 00:00:00 2001 From: Clay Gerrard Date: Thu, 4 Oct 2012 18:50:39 -0500 Subject: Always use bdm in instance_block_mapping on Xen It doesn't seem that Xen will set the 'root_device_name' property on instances. This is causing instance_block_mapping to return early without evaluating the bdm before returning the list of device_names in use. I'm not sure why instance_block_mapping does this (optimization?) but on Xen at least it seems that it should not. Added a check for Xen compute_driver flag in instance_block_mapping to "guess" the root_device_name (similarlly to what is done in compute.utils for swap and ephemeral). fixes bug #1061944 Change-Id: If5b1a2b7377232c78f0629a3624552ecf6ceb0ee --- nova/tests/compute/test_compute_utils.py | 40 ++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 12 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/compute/test_compute_utils.py b/nova/tests/compute/test_compute_utils.py index 1573d4919..056450708 100644 --- a/nova/tests/compute/test_compute_utils.py +++ b/nova/tests/compute/test_compute_utils.py @@ -44,12 +44,21 @@ class ComputeValidateDeviceTestCase(test.TestCase): def setUp(self): super(ComputeValidateDeviceTestCase, self).setUp() self.context = context.RequestContext('fake', 'fake') - self.instance = { - 'uuid': 'fake', - 'root_device_name': '/dev/vda', - 'default_ephemeral_device': '/dev/vdb', - 'instance_type_id': 'fake', - } + # check if test name includes "xen" + if 'xen' in self.id(): + self.flags(compute_driver='xenapi.XenAPIDriver') + self.instance = { + 'uuid': 'fake', + 'root_device_name': None, + 'instance_type_id': 'fake', + } + else: + self.instance = { + 'uuid': 'fake', + 'root_device_name': '/dev/vda', + 'default_ephemeral_device': '/dev/vdb', + 'instance_type_id': 'fake', + } self.data = [] def fake_get(instance_type_id, ctxt=None): @@ -150,8 +159,6 @@ class ComputeValidateDeviceTestCase(test.TestCase): self.assertEqual(device, '/dev/vdc') def test_ephemeral_xenapi(self): - self.flags(compute_driver='xenapi.XenAPIDriver') - del self.instance['default_ephemeral_device'] self.instance_type = { 'ephemeral_gb': 10, 'swap': 0, @@ -162,8 +169,6 @@ class ComputeValidateDeviceTestCase(test.TestCase): self.assertEqual(device, '/dev/xvdc') def test_swap_xenapi(self): - self.flags(compute_driver='xenapi.XenAPIDriver') - del self.instance['default_ephemeral_device'] self.instance_type = { 'ephemeral_gb': 0, 'swap': 10, @@ -174,8 +179,6 @@ class ComputeValidateDeviceTestCase(test.TestCase): self.assertEqual(device, '/dev/xvdb') def test_swap_and_ephemeral_xenapi(self): - self.flags(compute_driver='xenapi.XenAPIDriver') - del self.instance['default_ephemeral_device'] self.instance_type = { 'ephemeral_gb': 10, 'swap': 10, @@ -185,6 +188,19 @@ class ComputeValidateDeviceTestCase(test.TestCase): device = self._validate_device() self.assertEqual(device, '/dev/xvdd') + def test_swap_and_one_attachment_xenapi(self): + self.instance_type = { + 'ephemeral_gb': 0, + 'swap': 10, + } + self.stubs.Set(instance_types, 'get_instance_type', + lambda instance_type_id, ctxt=None: self.instance_type) + device = self._validate_device() + self.assertEqual(device, '/dev/xvdb') + self.data.append(self._fake_bdm(device)) + device = self._validate_device() + self.assertEqual(device, '/dev/xvdd') + class UsageInfoTestCase(test.TestCase): -- cgit