diff options
author | Jenkins <jenkins@review.openstack.org> | 2013-05-23 16:45:09 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2013-05-23 16:45:09 +0000 |
commit | fd50761d3ed6181689d55ff63ca295ac9fc1a7d0 (patch) | |
tree | 6b6fb3a9e3346cd38d9b995429660cd88a1a8c9c | |
parent | 3bbf3b055818ee5ad2d36239288115bb803ac5e8 (diff) | |
parent | f692f727236b7e3e97b657c048194870ddf88a47 (diff) | |
download | nova-fd50761d3ed6181689d55ff63ca295ac9fc1a7d0.tar.gz nova-fd50761d3ed6181689d55ff63ca295ac9fc1a7d0.tar.xz nova-fd50761d3ed6181689d55ff63ca295ac9fc1a7d0.zip |
Merge "xenapi: Disable VDI size check when root_gb=0"
-rw-r--r-- | nova/tests/virt/xenapi/test_vm_utils.py | 49 | ||||
-rw-r--r-- | nova/virt/xenapi/vm_utils.py | 23 |
2 files changed, 60 insertions, 12 deletions
diff --git a/nova/tests/virt/xenapi/test_vm_utils.py b/nova/tests/virt/xenapi/test_vm_utils.py index 57f031a4c..4a7370dd9 100644 --- a/nova/tests/virt/xenapi/test_vm_utils.py +++ b/nova/tests/virt/xenapi/test_vm_utils.py @@ -20,6 +20,7 @@ import contextlib import fixtures import mox +from nova.compute import flavors from nova import exception from nova import test from nova import utils @@ -365,3 +366,51 @@ class ResizeHelpersTestCase(test.TestCase): self.mox.ReplayAll() vm_utils._resize_part_and_fs("fake", 0, 20, 30) + + +class CheckVDISizeTestCase(test.TestCase): + def setUp(self): + super(CheckVDISizeTestCase, self).setUp() + self.context = 'fakecontext' + self.session = 'fakesession' + self.instance = dict(uuid='fakeinstance') + self.vdi_uuid = 'fakeuuid' + + def test_not_too_large(self): + self.mox.StubOutWithMock(flavors, 'extract_instance_type') + flavors.extract_instance_type(self.instance).AndReturn( + dict(root_gb=1)) + + self.mox.StubOutWithMock(vm_utils, '_get_vdi_chain_size') + vm_utils._get_vdi_chain_size(self.session, + self.vdi_uuid).AndReturn(1073741824) + + self.mox.ReplayAll() + + vm_utils._check_vdi_size(self.context, self.session, self.instance, + self.vdi_uuid) + + def test_too_large(self): + self.mox.StubOutWithMock(flavors, 'extract_instance_type') + flavors.extract_instance_type(self.instance).AndReturn( + dict(root_gb=1)) + + self.mox.StubOutWithMock(vm_utils, '_get_vdi_chain_size') + vm_utils._get_vdi_chain_size(self.session, + self.vdi_uuid).AndReturn(1073741825) + + self.mox.ReplayAll() + + self.assertRaises(exception.InstanceTypeDiskTooSmall, + vm_utils._check_vdi_size, self.context, self.session, + self.instance, self.vdi_uuid) + + def test_zero_root_gb_disables_check(self): + self.mox.StubOutWithMock(flavors, 'extract_instance_type') + flavors.extract_instance_type(self.instance).AndReturn( + dict(root_gb=0)) + + self.mox.ReplayAll() + + vm_utils._check_vdi_size(self.context, self.session, self.instance, + self.vdi_uuid) diff --git a/nova/virt/xenapi/vm_utils.py b/nova/virt/xenapi/vm_utils.py index 69a944b9b..fde075000 100644 --- a/nova/virt/xenapi/vm_utils.py +++ b/nova/virt/xenapi/vm_utils.py @@ -1192,21 +1192,20 @@ def _get_vdi_chain_size(session, vdi_uuid): def _check_vdi_size(context, session, instance, vdi_uuid): - size_bytes = _get_vdi_chain_size(session, vdi_uuid) - - # FIXME(jk0): this was copied directly from compute.manager.py, let's - # refactor this to a common area instance_type = flavors.extract_instance_type(instance) - allowed_size_gb = instance_type['root_gb'] - allowed_size_bytes = allowed_size_gb * 1024 * 1024 * 1024 + allowed_size = instance_type['root_gb'] * (1024 ** 3) + + if not allowed_size: + # root_gb=0 indicates that we're disabling size checks + return - LOG.debug(_("image_size_bytes=%(size_bytes)d, allowed_size_bytes=" - "%(allowed_size_bytes)d"), locals(), instance=instance) + size = _get_vdi_chain_size(session, vdi_uuid) + if size > allowed_size: + LOG.error(_("Image size %(size)d exceeded instance_type " + "allowed size %(allowed_size)d"), + {'size': size, 'allowed_size': allowed_size}, + instance=instance) - if size_bytes > allowed_size_bytes: - LOG.info(_("Image size %(size_bytes)d exceeded instance_type " - "allowed size %(allowed_size_bytes)d"), - locals(), instance=instance) raise exception.InstanceTypeDiskTooSmall() |