Conform stack resource error so it gives a 4xx

This exception was added and landed while the change to use
RequestLimitExceeded was still in progress. Giving a 5xx error when the
user has caused the problem directly is not what we want.

We leave the exception in place to allow the shared error message. I
also have hopes that we will be o-k with extra exceptions and just
extend RequestLimitExceeded when we have a similar situation.

Change-Id: Ic9b176625e6ad2b8c42c420dab79984d134304e5
Partial-Bug: #1230191
This commit is contained in:
Clint Byrum 2013-09-26 23:05:16 -07:00
parent 6e7fa3266a
commit 9233d44f95
4 changed files with 23 additions and 12 deletions

View File

@ -259,7 +259,8 @@ class EngineService(service.Service):
tmpl = parser.Template(template, files=files)
if len(tmpl[tpl.RESOURCES]) > cfg.CONF.max_resources_per_stack:
raise exception.StackResourceLimitExceeded()
raise exception.RequestLimitExceeded(
message=exception.StackResourceLimitExceeded.message)
# Extract the common query parameters
common_params = api.extract_args(args)
@ -307,7 +308,8 @@ class EngineService(service.Service):
# stack definition.
tmpl = parser.Template(template, files=files)
if len(tmpl[tpl.RESOURCES]) > cfg.CONF.max_resources_per_stack:
raise exception.StackResourceLimitExceeded()
raise exception.RequestLimitExceeded(
message=exception.StackResourceLimitExceeded.message)
stack_name = current_stack.name
common_params = api.extract_args(args)
env = environment.Environment(params)

View File

@ -84,7 +84,8 @@ class StackResource(resource.Resource):
if ((len(template[tmpl.RESOURCES]) +
self.stack.root_stack.total_resources() >
cfg.CONF.max_resources_per_stack)):
raise exception.StackResourceLimitExceeded()
raise exception.RequestLimitExceeded(
message=exception.StackResourceLimitExceeded.message)
self._outputs_to_attribs(child_template)
# Note we disable rollback for nested stacks, since they
@ -131,7 +132,8 @@ class StackResource(resource.Resource):
len(template[tmpl.RESOURCES]) - len(nested_stack.resources))
new_size = nested_stack.root_stack.total_resources() + res_diff
if new_size > cfg.CONF.max_resources_per_stack:
raise exception.StackResourceLimitExceeded()
raise exception.RequestLimitExceeded(
message=exception.StackResourceLimitExceeded.message)
# Note we disable rollback for nested stacks, since they
# should be rolled back by the parent stack on failure

View File

@ -486,9 +486,11 @@ class StackServiceCreateUpdateDeleteTest(HeatTestCase):
'C': {'Type': 'GenericResourceType'}}}
template = parser.Template(tpl)
cfg.CONF.set_override('max_resources_per_stack', 2)
self.assertRaises(exception.StackResourceLimitExceeded,
self.man.create_stack, self.ctx, stack_name,
template, params, None, {})
ex = self.assertRaises(exception.RequestLimitExceeded,
self.man.create_stack, self.ctx, stack_name,
template, params, None, {})
self.assertIn(exception.StackResourceLimitExceeded.message,
str(ex))
def test_stack_validate(self):
stack_name = 'service_create_test_validate'
@ -661,9 +663,12 @@ class StackServiceCreateUpdateDeleteTest(HeatTestCase):
cfg.CONF.set_override('max_resources_per_stack', 2)
self.assertRaises(exception.StackResourceLimitExceeded,
self.man.update_stack, self.ctx,
old_stack.identifier(), template, params, None, {})
ex = self.assertRaises(exception.RequestLimitExceeded,
self.man.update_stack, self.ctx,
old_stack.identifier(), template, params, None,
{})
self.assertIn(exception.StackResourceLimitExceeded.message,
str(ex))
def test_stack_update_verify_err(self):
stack_name = 'service_update_verify_err_test_stack'

View File

@ -280,8 +280,10 @@ Outputs:
new_res['Properties']['TemplateURL'] = (
'https://server.test/new.template')
prop_diff = {'TemplateURL': 'https://server.test/new.template'}
self.assertRaises(exception.StackResourceLimitExceeded,
rsrc.handle_update, new_res, {}, prop_diff)
ex = self.assertRaises(exception.RequestLimitExceeded,
rsrc.handle_update, new_res, {}, prop_diff)
self.assertIn(exception.StackResourceLimitExceeded.message,
str(ex))
rsrc.delete()
self.m.VerifyAll()