quota: remove QuotaDriver.destroy_all_by_project()
Removes the unnecessary QuotaDriver.destroy_all_by_project() and destroy_all_by_project_and_users() methods. nova.objects.Quotas already had these methods and this patch changes the one place that was calling the old QuotaDriver method (from the nova API /quota_sets endpoint) to just call the nova.objects.Quotas methods of the same name. Note that the NoopQuotaDriver's destroy_all_by_project() and destroy_all_by_project_and_user() methods were no-ops. Now the quota-sets API will be calling the objects.Quotas.destroy_xxx() methods which will raise ProjectUserQuotaNotFound instead of returning a 204. If the user is calling DELETE /os-quota-sets and there is the Noop quota driver configured, and the response is a 404 Not Found, do we really care? In the future, we should be getting rid of the os-quota-sets API entirely and using Keystone's /limits API. One more set of methods gone from QuotaDriver... Change-Id: Ifc0a409bd179807db18f2e7b59ea9d4d67e9a798
This commit is contained in:
parent
1aa758e522
commit
8153cddad1
|
@ -275,7 +275,7 @@ class QuotaSetsController(wsgi.Controller):
|
||||||
params = urlparse.parse_qs(req.environ.get('QUERY_STRING', ''))
|
params = urlparse.parse_qs(req.environ.get('QUERY_STRING', ''))
|
||||||
user_id = params.get('user_id', [None])[0]
|
user_id = params.get('user_id', [None])[0]
|
||||||
if user_id:
|
if user_id:
|
||||||
QUOTAS.destroy_all_by_project_and_user(context,
|
objects.Quotas.destroy_all_by_project_and_user(
|
||||||
id, user_id)
|
context, id, user_id)
|
||||||
else:
|
else:
|
||||||
QUOTAS.destroy_all_by_project(context, id)
|
objects.Quotas.destroy_all_by_project(context, id)
|
||||||
|
|
|
@ -612,26 +612,6 @@ class DbQuotaDriver(object):
|
||||||
quotas=quotas_exceeded, usages={},
|
quotas=quotas_exceeded, usages={},
|
||||||
headroom=headroom)
|
headroom=headroom)
|
||||||
|
|
||||||
def destroy_all_by_project_and_user(self, context, project_id, user_id):
|
|
||||||
"""Destroy all quotas associated with a project and user.
|
|
||||||
|
|
||||||
:param context: The request context, for access checks.
|
|
||||||
:param project_id: The ID of the project being deleted.
|
|
||||||
:param user_id: The ID of the user being deleted.
|
|
||||||
"""
|
|
||||||
|
|
||||||
objects.Quotas.destroy_all_by_project_and_user(context, project_id,
|
|
||||||
user_id)
|
|
||||||
|
|
||||||
def destroy_all_by_project(self, context, project_id):
|
|
||||||
"""Destroy all quotas associated with a project.
|
|
||||||
|
|
||||||
:param context: The request context, for access checks.
|
|
||||||
:param project_id: The ID of the project being deleted.
|
|
||||||
"""
|
|
||||||
|
|
||||||
objects.Quotas.destroy_all_by_project(context, project_id)
|
|
||||||
|
|
||||||
|
|
||||||
class NoopQuotaDriver(object):
|
class NoopQuotaDriver(object):
|
||||||
"""Driver that turns quotas calls into no-ops and pretends that quotas
|
"""Driver that turns quotas calls into no-ops and pretends that quotas
|
||||||
|
@ -805,23 +785,6 @@ class NoopQuotaDriver(object):
|
||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def destroy_all_by_project_and_user(self, context, project_id, user_id):
|
|
||||||
"""Destroy all quotas associated with a project and user.
|
|
||||||
|
|
||||||
:param context: The request context, for access checks.
|
|
||||||
:param project_id: The ID of the project being deleted.
|
|
||||||
:param user_id: The ID of the user being deleted.
|
|
||||||
"""
|
|
||||||
pass
|
|
||||||
|
|
||||||
def destroy_all_by_project(self, context, project_id):
|
|
||||||
"""Destroy all quotas associated with a project.
|
|
||||||
|
|
||||||
:param context: The request context, for access checks.
|
|
||||||
:param project_id: The ID of the project being deleted.
|
|
||||||
"""
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class BaseResource(object):
|
class BaseResource(object):
|
||||||
"""Describe a single resource for quota checking."""
|
"""Describe a single resource for quota checking."""
|
||||||
|
@ -1116,28 +1079,6 @@ class QuotaEngine(object):
|
||||||
context, self._resources, project_values=project_values,
|
context, self._resources, project_values=project_values,
|
||||||
user_values=user_values, project_id=project_id, user_id=user_id)
|
user_values=user_values, project_id=project_id, user_id=user_id)
|
||||||
|
|
||||||
def destroy_all_by_project_and_user(self, context, project_id, user_id):
|
|
||||||
"""Destroy all quotas, usages, and reservations associated with a
|
|
||||||
project and user.
|
|
||||||
|
|
||||||
:param context: The request context, for access checks.
|
|
||||||
:param project_id: The ID of the project being deleted.
|
|
||||||
:param user_id: The ID of the user being deleted.
|
|
||||||
"""
|
|
||||||
|
|
||||||
self._driver.destroy_all_by_project_and_user(context,
|
|
||||||
project_id, user_id)
|
|
||||||
|
|
||||||
def destroy_all_by_project(self, context, project_id):
|
|
||||||
"""Destroy all quotas, usages, and reservations associated with a
|
|
||||||
project.
|
|
||||||
|
|
||||||
:param context: The request context, for access checks.
|
|
||||||
:param project_id: The ID of the project being deleted.
|
|
||||||
"""
|
|
||||||
|
|
||||||
self._driver.destroy_all_by_project(context, project_id)
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def resources(self):
|
def resources(self):
|
||||||
return sorted(self._resources.keys())
|
return sorted(self._resources.keys())
|
||||||
|
|
|
@ -275,7 +275,7 @@ class QuotaSetsTestV21(BaseQuotaSetsTest):
|
||||||
body = {'quota_set': self.default_quotas}
|
body = {'quota_set': self.default_quotas}
|
||||||
self._quotas_update_bad_request_case(body)
|
self._quotas_update_bad_request_case(body)
|
||||||
|
|
||||||
@mock.patch.object(quota.QUOTAS, 'destroy_all_by_project')
|
@mock.patch('nova.objects.Quotas.destroy_all_by_project')
|
||||||
def test_quotas_delete(self, mock_destroy_all_by_project):
|
def test_quotas_delete(self, mock_destroy_all_by_project):
|
||||||
req = self._get_http_request()
|
req = self._get_http_request()
|
||||||
res = self.controller.delete(req, 1234)
|
res = self.controller.delete(req, 1234)
|
||||||
|
@ -470,7 +470,7 @@ class UserQuotasTestV21(BaseQuotaSetsTest):
|
||||||
self.assertRaises(webob.exc.HTTPBadRequest, self.controller.update,
|
self.assertRaises(webob.exc.HTTPBadRequest, self.controller.update,
|
||||||
req, 'update_me', body=body)
|
req, 'update_me', body=body)
|
||||||
|
|
||||||
@mock.patch.object(quota.QUOTAS, "destroy_all_by_project_and_user")
|
@mock.patch('nova.objects.Quotas.destroy_all_by_project_and_user')
|
||||||
def test_user_quotas_delete(self, mock_destroy_all_by_project_and_user):
|
def test_user_quotas_delete(self, mock_destroy_all_by_project_and_user):
|
||||||
url = '/v2/fake4/os-quota-sets/1234?user_id=1'
|
url = '/v2/fake4/os-quota-sets/1234?user_id=1'
|
||||||
req = self._get_http_request(url)
|
req = self._get_http_request(url)
|
||||||
|
|
|
@ -317,13 +317,6 @@ class FakeDriver(object):
|
||||||
self.called.append(('limit_check_project_and_user', context, resources,
|
self.called.append(('limit_check_project_and_user', context, resources,
|
||||||
project_values, user_values, project_id, user_id))
|
project_values, user_values, project_id, user_id))
|
||||||
|
|
||||||
def destroy_all_by_project_and_user(self, context, project_id, user_id):
|
|
||||||
self.called.append(('destroy_all_by_project_and_user', context,
|
|
||||||
project_id, user_id))
|
|
||||||
|
|
||||||
def destroy_all_by_project(self, context, project_id):
|
|
||||||
self.called.append(('destroy_all_by_project', context, project_id))
|
|
||||||
|
|
||||||
|
|
||||||
class BaseResourceTestCase(test.TestCase):
|
class BaseResourceTestCase(test.TestCase):
|
||||||
def test_no_flag(self):
|
def test_no_flag(self):
|
||||||
|
@ -567,28 +560,6 @@ class QuotaEngineTestCase(test.TestCase):
|
||||||
None, None)],
|
None, None)],
|
||||||
driver.called)
|
driver.called)
|
||||||
|
|
||||||
def test_destroy_all_by_project_and_user(self):
|
|
||||||
context = FakeContext(None, None)
|
|
||||||
driver = FakeDriver()
|
|
||||||
quota_obj = self._make_quota_obj(driver)
|
|
||||||
quota_obj.destroy_all_by_project_and_user(context,
|
|
||||||
'test_project', 'fake_user')
|
|
||||||
|
|
||||||
self.assertEqual(driver.called, [
|
|
||||||
('destroy_all_by_project_and_user', context, 'test_project',
|
|
||||||
'fake_user'),
|
|
||||||
])
|
|
||||||
|
|
||||||
def test_destroy_all_by_project(self):
|
|
||||||
context = FakeContext(None, None)
|
|
||||||
driver = FakeDriver()
|
|
||||||
quota_obj = self._make_quota_obj(driver)
|
|
||||||
quota_obj.destroy_all_by_project(context, 'test_project')
|
|
||||||
|
|
||||||
self.assertEqual(driver.called, [
|
|
||||||
('destroy_all_by_project', context, 'test_project'),
|
|
||||||
])
|
|
||||||
|
|
||||||
def test_resources(self):
|
def test_resources(self):
|
||||||
quota_obj = self._make_quota_obj(None)
|
quota_obj = self._make_quota_obj(None)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue