quota: remove QuotaEngine.register_resources()

The QuotaEngine.register_resources() method was not necessary. I've
simply added a resources kwarg to the QuotaEngine constructor and we now
construct the dict of resource objects to initialize the resources the
quota engine cares about.

One more method to the QuotaDriver, gone.

Change-Id: I818bbfb9493714341283042a21d5aefd90c094cb
This commit is contained in:
Jay Pipes 2018-10-30 12:10:56 -04:00
parent f13debf2f0
commit 10ca429a62
2 changed files with 63 additions and 77 deletions

View File

@ -871,9 +871,18 @@ class CountableResource(AbsoluteResource):
class QuotaEngine(object):
"""Represent the set of recognized quotas."""
def __init__(self, quota_driver=None):
"""Initialize a Quota object."""
self._resources = {}
def __init__(self, quota_driver=None, resources=None):
"""Initialize a Quota object.
:param quota_driver: a QuotaDriver object (only used in testing. if
None (default), instantiates a driver from the
CONF.quota.driver option)
:param resources: iterable of Resource objects
"""
resources = resources or []
self._resources = {
resource.name: resource for resource in resources
}
# NOTE(mriedem): quota_driver is ever only supplied in tests with a
# fake driver.
self.__driver = quota_driver
@ -890,12 +899,6 @@ class QuotaEngine(object):
self._resources[resource.name] = resource
def register_resources(self, resources):
"""Register a list of resources."""
for resource in resources:
self.register_resource(resource)
def get_defaults(self, context):
"""Retrieve the default quotas.
@ -1209,36 +1212,40 @@ def _security_group_rule_count_by_group(context, security_group_id):
return {'user': {'security_group_rules': count}}
QUOTAS = QuotaEngine()
resources = [
CountableResource('instances', _instances_cores_ram_count, 'instances'),
CountableResource('cores', _instances_cores_ram_count, 'cores'),
CountableResource('ram', _instances_cores_ram_count, 'ram'),
CountableResource('security_groups', _security_group_count,
'security_groups'),
CountableResource('fixed_ips', _fixed_ip_count, 'fixed_ips'),
CountableResource('floating_ips', _floating_ip_count,
'floating_ips'),
AbsoluteResource('metadata_items', 'metadata_items'),
AbsoluteResource('injected_files', 'injected_files'),
AbsoluteResource('injected_file_content_bytes',
'injected_file_content_bytes'),
AbsoluteResource('injected_file_path_bytes',
'injected_file_path_length'),
CountableResource('security_group_rules',
_security_group_rule_count_by_group,
'security_group_rules'),
CountableResource('key_pairs', _keypair_get_count_by_user, 'key_pairs'),
CountableResource('server_groups', _server_group_count, 'server_groups'),
CountableResource('server_group_members',
_server_group_count_members_by_user,
'server_group_members'),
]
QUOTAS.register_resources(resources)
QUOTAS = QuotaEngine(
resources=[
CountableResource(
'instances', _instances_cores_ram_count, 'instances'),
CountableResource(
'cores', _instances_cores_ram_count, 'cores'),
CountableResource(
'ram', _instances_cores_ram_count, 'ram'),
CountableResource(
'security_groups', _security_group_count, 'security_groups'),
CountableResource(
'fixed_ips', _fixed_ip_count, 'fixed_ips'),
CountableResource(
'floating_ips', _floating_ip_count, 'floating_ips'),
AbsoluteResource(
'metadata_items', 'metadata_items'),
AbsoluteResource(
'injected_files', 'injected_files'),
AbsoluteResource(
'injected_file_content_bytes', 'injected_file_content_bytes'),
AbsoluteResource(
'injected_file_path_bytes', 'injected_file_path_length'),
CountableResource(
'security_group_rules', _security_group_rule_count_by_group,
'security_group_rules'),
CountableResource(
'key_pairs', _keypair_get_count_by_user, 'key_pairs'),
CountableResource(
'server_groups', _server_group_count, 'server_groups'),
CountableResource(
'server_group_members', _server_group_count_members_by_user,
'server_group_members'),
],
)
def _valid_method_call_check_resource(name, method, resources):

View File

@ -383,14 +383,10 @@ class BaseResourceTestCase(test.TestCase):
class QuotaEngineTestCase(test.TestCase):
def test_init(self):
quota_obj = quota.QuotaEngine()
self.assertEqual(quota_obj._resources, {})
self.assertIsInstance(quota_obj._driver, quota.DbQuotaDriver)
def test_init_override_obj(self):
quota_obj = quota.QuotaEngine(quota_driver=FakeDriver)
self.assertEqual(quota_obj._resources, {})
self.assertEqual(quota_obj._driver, FakeDriver)
def test_register_resource(self):
@ -400,37 +396,19 @@ class QuotaEngineTestCase(test.TestCase):
self.assertEqual(quota_obj._resources, dict(test_resource=resource))
def test_register_resources(self):
quota_obj = quota.QuotaEngine()
resources = [
quota.AbsoluteResource('test_resource1'),
quota.AbsoluteResource('test_resource2'),
quota.AbsoluteResource('test_resource3'),
]
quota_obj.register_resources(resources)
self.assertEqual(quota_obj._resources, dict(
test_resource1=resources[0],
test_resource2=resources[1],
test_resource3=resources[2],
))
def _make_quota_obj(self, driver):
quota_obj = quota.QuotaEngine(quota_driver=driver)
resources = [
def _get_quota_engine(self, driver, resources=None):
resources = resources or [
quota.AbsoluteResource('test_resource4'),
quota.AbsoluteResource('test_resource3'),
quota.AbsoluteResource('test_resource2'),
quota.AbsoluteResource('test_resource1'),
]
quota_obj.register_resources(resources)
return quota_obj
]
return quota.QuotaEngine(quota_driver=driver, resources=resources)
def test_get_defaults(self):
context = FakeContext(None, None)
driver = FakeDriver()
quota_obj = self._make_quota_obj(driver)
quota_obj = self._get_quota_engine(driver)
result = quota_obj.get_defaults(context)
self.assertEqual(driver.called, [
@ -441,7 +419,7 @@ class QuotaEngineTestCase(test.TestCase):
def test_get_class_quotas(self):
context = FakeContext(None, None)
driver = FakeDriver()
quota_obj = self._make_quota_obj(driver)
quota_obj = self._get_quota_engine(driver)
result1 = quota_obj.get_class_quotas(context, 'test_class')
self.assertEqual(driver.called, [
@ -453,7 +431,7 @@ class QuotaEngineTestCase(test.TestCase):
def test_get_user_quotas(self):
context = FakeContext(None, None)
driver = FakeDriver()
quota_obj = self._make_quota_obj(driver)
quota_obj = self._get_quota_engine(driver)
result1 = quota_obj.get_user_quotas(context, 'test_project',
'fake_user')
result2 = quota_obj.get_user_quotas(context, 'test_project',
@ -474,7 +452,7 @@ class QuotaEngineTestCase(test.TestCase):
def test_get_project_quotas(self):
context = FakeContext(None, None)
driver = FakeDriver()
quota_obj = self._make_quota_obj(driver)
quota_obj = self._get_quota_engine(driver)
result1 = quota_obj.get_project_quotas(context, 'test_project')
result2 = quota_obj.get_project_quotas(context, 'test_project',
quota_class='test_class',
@ -493,7 +471,7 @@ class QuotaEngineTestCase(test.TestCase):
def test_count_as_dict_no_resource(self):
context = FakeContext(None, None)
driver = FakeDriver()
quota_obj = self._make_quota_obj(driver)
quota_obj = self._get_quota_engine(driver)
self.assertRaises(exception.QuotaResourceUnknown,
quota_obj.count_as_dict, context, 'test_resource5',
True, foo='bar')
@ -501,7 +479,7 @@ class QuotaEngineTestCase(test.TestCase):
def test_count_as_dict_wrong_resource(self):
context = FakeContext(None, None)
driver = FakeDriver()
quota_obj = self._make_quota_obj(driver)
quota_obj = self._get_quota_engine(driver)
self.assertRaises(exception.QuotaResourceUnknown,
quota_obj.count_as_dict, context, 'test_resource1',
True, foo='bar')
@ -514,9 +492,10 @@ class QuotaEngineTestCase(test.TestCase):
context = FakeContext(None, None)
driver = FakeDriver()
quota_obj = self._make_quota_obj(driver)
quota_obj.register_resource(
quota.CountableResource('test_resource5', fake_count_as_dict))
resources = [
quota.CountableResource('test_resource5', fake_count_as_dict),
]
quota_obj = self._get_quota_engine(driver, resources)
result = quota_obj.count_as_dict(context, 'test_resource5', True,
foo='bar')
@ -525,7 +504,7 @@ class QuotaEngineTestCase(test.TestCase):
def test_limit_check(self):
context = FakeContext(None, None)
driver = FakeDriver()
quota_obj = self._make_quota_obj(driver)
quota_obj = self._get_quota_engine(driver)
quota_obj.limit_check(context, test_resource1=4, test_resource2=3,
test_resource3=2, test_resource4=1)
@ -541,7 +520,7 @@ class QuotaEngineTestCase(test.TestCase):
def test_limit_check_project_and_user(self):
context = FakeContext(None, None)
driver = FakeDriver()
quota_obj = self._make_quota_obj(driver)
quota_obj = self._get_quota_engine(driver)
project_values = dict(test_resource1=4, test_resource2=3)
user_values = dict(test_resource3=2, test_resource4=1)
quota_obj.limit_check_project_and_user(context,
@ -556,7 +535,7 @@ class QuotaEngineTestCase(test.TestCase):
driver.called)
def test_resources(self):
quota_obj = self._make_quota_obj(None)
quota_obj = self._get_quota_engine(None)
self.assertEqual(quota_obj.resources,
['test_resource1', 'test_resource2',