Revert "Remove quota_class db API calls"
This reverts commit 9c285c4bc7.
The quota_classes API was used to set default quota values
so it shouldn't have been removed, so reverting a series
of changes that removed the API and it's internal code.
Related mailing list thread on the topic:
http://lists.openstack.org/pipermail/openstack-dev/2014-May/035383.html
Partial-Bug: #1299517
Change-Id: I69e374cd0363bb7481c5bc96f1ba6415ac50fa81
This commit is contained in:
@@ -1082,6 +1082,34 @@ def quota_update(context, project_id, resource, limit, user_id=None):
|
||||
###################
|
||||
|
||||
|
||||
def quota_class_create(context, class_name, resource, limit):
|
||||
"""Create a quota class for the given name and resource."""
|
||||
return IMPL.quota_class_create(context, class_name, resource, limit)
|
||||
|
||||
|
||||
def quota_class_get(context, class_name, resource):
|
||||
"""Retrieve a quota class or raise if it does not exist."""
|
||||
return IMPL.quota_class_get(context, class_name, resource)
|
||||
|
||||
|
||||
def quota_class_get_default(context):
|
||||
"""Retrieve all default quotas."""
|
||||
return IMPL.quota_class_get_default(context)
|
||||
|
||||
|
||||
def quota_class_get_all_by_name(context, class_name):
|
||||
"""Retrieve all quotas associated with a given quota class."""
|
||||
return IMPL.quota_class_get_all_by_name(context, class_name)
|
||||
|
||||
|
||||
def quota_class_update(context, class_name, resource, limit):
|
||||
"""Update a quota class or raise if it does not exist."""
|
||||
return IMPL.quota_class_update(context, class_name, resource, limit)
|
||||
|
||||
|
||||
###################
|
||||
|
||||
|
||||
def quota_usage_get(context, project_id, resource, user_id=None):
|
||||
"""Retrieve a quota usage or raise if it does not exist."""
|
||||
return IMPL.quota_usage_get(context, project_id, resource, user_id=user_id)
|
||||
|
||||
@@ -2867,6 +2867,68 @@ def quota_update(context, project_id, resource, limit, user_id=None):
|
||||
###################
|
||||
|
||||
|
||||
@require_context
|
||||
def quota_class_get(context, class_name, resource):
|
||||
result = model_query(context, models.QuotaClass, read_deleted="no").\
|
||||
filter_by(class_name=class_name).\
|
||||
filter_by(resource=resource).\
|
||||
first()
|
||||
|
||||
if not result:
|
||||
raise exception.QuotaClassNotFound(class_name=class_name)
|
||||
|
||||
return result
|
||||
|
||||
|
||||
def quota_class_get_default(context):
|
||||
rows = model_query(context, models.QuotaClass, read_deleted="no").\
|
||||
filter_by(class_name=_DEFAULT_QUOTA_NAME).\
|
||||
all()
|
||||
|
||||
result = {'class_name': _DEFAULT_QUOTA_NAME}
|
||||
for row in rows:
|
||||
result[row.resource] = row.hard_limit
|
||||
|
||||
return result
|
||||
|
||||
|
||||
@require_context
|
||||
def quota_class_get_all_by_name(context, class_name):
|
||||
rows = model_query(context, models.QuotaClass, read_deleted="no").\
|
||||
filter_by(class_name=class_name).\
|
||||
all()
|
||||
|
||||
result = {'class_name': class_name}
|
||||
for row in rows:
|
||||
result[row.resource] = row.hard_limit
|
||||
|
||||
return result
|
||||
|
||||
|
||||
@require_admin_context
|
||||
def quota_class_create(context, class_name, resource, limit):
|
||||
quota_class_ref = models.QuotaClass()
|
||||
quota_class_ref.class_name = class_name
|
||||
quota_class_ref.resource = resource
|
||||
quota_class_ref.hard_limit = limit
|
||||
quota_class_ref.save()
|
||||
return quota_class_ref
|
||||
|
||||
|
||||
@require_admin_context
|
||||
def quota_class_update(context, class_name, resource, limit):
|
||||
result = model_query(context, models.QuotaClass, read_deleted="no").\
|
||||
filter_by(class_name=class_name).\
|
||||
filter_by(resource=resource).\
|
||||
update({'hard_limit': limit})
|
||||
|
||||
if not result:
|
||||
raise exception.QuotaClassNotFound(class_name=class_name)
|
||||
|
||||
|
||||
###################
|
||||
|
||||
|
||||
@require_context
|
||||
def quota_usage_get(context, project_id, resource, user_id=None):
|
||||
query = model_query(context, models.QuotaUsage, read_deleted="no").\
|
||||
|
||||
@@ -5418,6 +5418,63 @@ class QuotaTestCase(test.TestCase, ModelsObjectComparatorMixin):
|
||||
'project1', 'resource1', 42)
|
||||
|
||||
|
||||
class QuotaClassTestCase(test.TestCase, ModelsObjectComparatorMixin):
|
||||
|
||||
def setUp(self):
|
||||
super(QuotaClassTestCase, self).setUp()
|
||||
self.ctxt = context.get_admin_context()
|
||||
|
||||
def test_quota_class_get_default(self):
|
||||
params = {
|
||||
'test_resource1': '10',
|
||||
'test_resource2': '20',
|
||||
'test_resource3': '30',
|
||||
}
|
||||
for res, limit in params.items():
|
||||
db.quota_class_create(self.ctxt, 'default', res, limit)
|
||||
|
||||
defaults = db.quota_class_get_default(self.ctxt)
|
||||
self.assertEqual(defaults, dict(class_name='default',
|
||||
test_resource1=10,
|
||||
test_resource2=20,
|
||||
test_resource3=30))
|
||||
|
||||
def test_quota_class_create(self):
|
||||
qc = db.quota_class_create(self.ctxt, 'class name', 'resource', 42)
|
||||
self.assertEqual(qc.class_name, 'class name')
|
||||
self.assertEqual(qc.resource, 'resource')
|
||||
self.assertEqual(qc.hard_limit, 42)
|
||||
|
||||
def test_quota_class_get(self):
|
||||
qc = db.quota_class_create(self.ctxt, 'class name', 'resource', 42)
|
||||
qc_db = db.quota_class_get(self.ctxt, 'class name', 'resource')
|
||||
self._assertEqualObjects(qc, qc_db)
|
||||
|
||||
def test_quota_class_get_nonexistent(self):
|
||||
self.assertRaises(exception.QuotaClassNotFound, db.quota_class_get,
|
||||
self.ctxt, 'nonexistent', 'resource')
|
||||
|
||||
def test_quota_class_get_all_by_name(self):
|
||||
for i in range(3):
|
||||
for j in range(3):
|
||||
db.quota_class_create(self.ctxt, 'class%d' % i,
|
||||
'resource%d' % j, j)
|
||||
for i in range(3):
|
||||
classes = db.quota_class_get_all_by_name(self.ctxt, 'class%d' % i)
|
||||
self.assertEqual(classes, {'class_name': 'class%d' % i,
|
||||
'resource0': 0, 'resource1': 1, 'resource2': 2})
|
||||
|
||||
def test_quota_class_update(self):
|
||||
db.quota_class_create(self.ctxt, 'class name', 'resource', 42)
|
||||
db.quota_class_update(self.ctxt, 'class name', 'resource', 43)
|
||||
self.assertEqual(db.quota_class_get(self.ctxt, 'class name',
|
||||
'resource').hard_limit, 43)
|
||||
|
||||
def test_quota_class_update_nonexistent(self):
|
||||
self.assertRaises(exception.QuotaClassNotFound, db.quota_class_update,
|
||||
self.ctxt, 'class name', 'resource', 42)
|
||||
|
||||
|
||||
class S3ImageTestCase(test.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
|
||||
Reference in New Issue
Block a user