Handle MarkerNotFound better in Flavor API
When the specified marker is not found, we should catch the MarkerNotFound exception and respond with a HTTP 400 Bad Request with sufficient information back to the user. This will avoid spilling unwanted tracebacks in the logs as well. Change-Id: I90a658384f8814096271a193a0f3abd028062b5d Partial-Bug: 1238519
This commit is contained in:
committed by
Gerrit Code Review
parent
29d037a3d3
commit
73e337b17d
@@ -140,9 +140,13 @@ class Controller(wsgi.Controller):
|
||||
msg = _('Invalid minDisk filter [%s]') % req.params['minDisk']
|
||||
raise webob.exc.HTTPBadRequest(explanation=msg)
|
||||
|
||||
limited_flavors = flavors.get_all_flavors_sorted_list(context,
|
||||
filters=filters, sort_key=sort_key, sort_dir=sort_dir,
|
||||
limit=limit, marker=marker)
|
||||
try:
|
||||
limited_flavors = flavors.get_all_flavors_sorted_list(context,
|
||||
filters=filters, sort_key=sort_key, sort_dir=sort_dir,
|
||||
limit=limit, marker=marker)
|
||||
except exception.MarkerNotFound:
|
||||
msg = _('marker [%s] not found') % marker
|
||||
raise webob.exc.HTTPBadRequest(explanation=msg)
|
||||
|
||||
return limited_flavors
|
||||
|
||||
|
||||
@@ -148,9 +148,13 @@ class FlavorsController(wsgi.Controller):
|
||||
req.params['min_disk'])
|
||||
raise webob.exc.HTTPBadRequest(explanation=msg)
|
||||
|
||||
limited_flavors = flavors.get_all_flavors_sorted_list(context,
|
||||
filters=filters, sort_key=sort_key, sort_dir=sort_dir,
|
||||
limit=limit, marker=marker)
|
||||
try:
|
||||
limited_flavors = flavors.get_all_flavors_sorted_list(context,
|
||||
filters=filters, sort_key=sort_key, sort_dir=sort_dir,
|
||||
limit=limit, marker=marker)
|
||||
except exception.MarkerNotFound:
|
||||
msg = _('marker [%s] not found') % marker
|
||||
raise webob.exc.HTTPBadRequest(explanation=msg)
|
||||
|
||||
return limited_flavors
|
||||
|
||||
|
||||
@@ -67,6 +67,9 @@ def fake_flavor_get_by_flavor_id(flavorid, ctxt=None):
|
||||
def fake_get_all_flavors_sorted_list(context=None, inactive=False,
|
||||
filters=None, sort_key='flavorid',
|
||||
sort_dir='asc', limit=None, marker=None):
|
||||
if marker in ['99999']:
|
||||
raise exception.MarkerNotFound(marker)
|
||||
|
||||
def reject_min(db_attr, filter_attr):
|
||||
return (filter_attr in filters and
|
||||
int(flavor[db_attr]) < int(filters[filter_attr]))
|
||||
@@ -247,6 +250,11 @@ class FlavorsTest(test.TestCase):
|
||||
}
|
||||
self.assertThat(flavor, matchers.DictMatches(expected))
|
||||
|
||||
def test_get_flavor_list_with_invalid_marker(self):
|
||||
req = fakes.HTTPRequestV3.blank('/flavors?limit=1&marker=99999')
|
||||
self.assertRaises(webob.exc.HTTPBadRequest,
|
||||
self.controller.index, req)
|
||||
|
||||
def test_get_flavor_detail_with_limit(self):
|
||||
req = fakes.HTTPRequestV3.blank('/flavors/detail?limit=1')
|
||||
response = self.controller.index(req)
|
||||
|
||||
@@ -57,6 +57,9 @@ def fake_flavor_get_by_flavor_id(flavorid, ctxt=None):
|
||||
def fake_get_all_flavors_sorted_list(context=None, inactive=False,
|
||||
filters=None, sort_key='flavorid',
|
||||
sort_dir='asc', limit=None, marker=None):
|
||||
if marker in ['99999']:
|
||||
raise exception.MarkerNotFound(marker)
|
||||
|
||||
def reject_min(db_attr, filter_attr):
|
||||
return (filter_attr in filters and
|
||||
int(flavor[db_attr]) < int(filters[filter_attr]))
|
||||
@@ -231,6 +234,11 @@ class FlavorsTest(test.TestCase):
|
||||
}
|
||||
self.assertThat(flavor, matchers.DictMatches(expected))
|
||||
|
||||
def test_get_flavor_list_with_invalid_marker(self):
|
||||
req = fakes.HTTPRequest.blank('/v2/fake/flavors?marker=99999')
|
||||
self.assertRaises(webob.exc.HTTPBadRequest,
|
||||
self.controller.index, req)
|
||||
|
||||
def test_get_flavor_detail_with_limit(self):
|
||||
req = fakes.HTTPRequest.blank('/v2/fake/flavors/detail?limit=1')
|
||||
response = self.controller.index(req)
|
||||
|
||||
Reference in New Issue
Block a user