Merge "Catch an exception on resource routing update"

This commit is contained in:
Jenkins 2017-02-27 02:46:38 +00:00 committed by Gerrit Code Review
commit d809ff98c8
2 changed files with 25 additions and 0 deletions

View File

@ -197,6 +197,22 @@ class RoutingController(rest.RestController):
return utils.format_api_error(
400, _('There is no such resource type'))
# the pod with new pod_id should exist in pod table
if 'pod_id' in update_dict:
new_pod_id = update_dict.get('pod_id')
try:
# find the pod through the pod_id and verify whether it exists
db_api.get_pod(context, new_pod_id)
except t_exc.ResourceNotFound:
return utils.format_api_error(
400, _("The pod %(new_pod_id)s doesn't"
" exist") % {'new_pod_id': new_pod_id})
except Exception as e:
LOG.exception(_LE('Failed to update resource routing: '
'%(exception)s '), {'exception': e})
return utils.format_api_error(
500, _('Failed to update resource routing'))
try:
routing_updated = db_api.update_resource_routing(
context, _id, update_dict)

View File

@ -391,5 +391,14 @@ class RoutingControllerTest(unittest.TestCase):
res = self.controller.put(-123, **body_update1)
self._validate_error_code(res, 404)
# failure case, the pod where the new pod_id lays on
# should exist in pod table
# a variable used for later test
new_pod_id = uuidutils.generate_uuid()
body_update6 = {'routing': {'pod_id': new_pod_id}}
res = self.controller.put(id, **body_update6)
self._validate_error_code(res, 400)
def tearDown(self):
core.ModelBase.metadata.drop_all(core.get_engine())