Skip to content

Commit

Permalink
Conform stack resource error so it gives a 4xx
Browse files Browse the repository at this point in the history
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
  • Loading branch information
SpamapS committed Sep 27, 2013
1 parent 6e7fa32 commit 9233d44
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 12 deletions.
6 changes: 4 additions & 2 deletions heat/engine/service.py
Expand Up @@ -259,7 +259,8 @@ def _stack_create(stack):
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)
Expand Down Expand Up @@ -307,7 +308,8 @@ def update_stack(self, cnxt, stack_identity, template, params,
# 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)
Expand Down
6 changes: 4 additions & 2 deletions heat/engine/stack_resource.py
Expand Up @@ -84,7 +84,8 @@ def create_with_template(self, child_template, user_params,
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
Expand Down Expand Up @@ -131,7 +132,8 @@ def update_with_template(self, child_template, user_params,
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
Expand Down
17 changes: 11 additions & 6 deletions heat/tests/test_engine_service.py
Expand Up @@ -486,9 +486,11 @@ def test_stack_create_total_resources_exceeds_max(self):
'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'
Expand Down Expand Up @@ -661,9 +663,12 @@ def test_stack_update_exceeds_resource_limit(self):

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'
Expand Down
6 changes: 4 additions & 2 deletions heat/tests/test_nested_stack.py
Expand Up @@ -280,8 +280,10 @@ def test_nested_stack_update_exceeds_limit(self):
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()
Expand Down

0 comments on commit 9233d44

Please sign in to comment.