summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-05-23 16:45:09 +0000
committerGerrit Code Review <review@openstack.org>2013-05-23 16:45:09 +0000
commitfd50761d3ed6181689d55ff63ca295ac9fc1a7d0 (patch)
tree6b6fb3a9e3346cd38d9b995429660cd88a1a8c9c
parent3bbf3b055818ee5ad2d36239288115bb803ac5e8 (diff)
parentf692f727236b7e3e97b657c048194870ddf88a47 (diff)
downloadnova-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.py49
-rw-r--r--nova/virt/xenapi/vm_utils.py23
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()