diff --git a/swift/proxy/controllers/base.py b/swift/proxy/controllers/base.py index e588355235..576bcf68c7 100644 --- a/swift/proxy/controllers/base.py +++ b/swift/proxy/controllers/base.py @@ -1839,9 +1839,11 @@ class Controller(object): if is_success(resp.status_int): self.app.logger.info(_('autocreate account %r'), path) clear_info_cache(self.app, req.environ, account) + return True else: self.app.logger.warning(_('Could not autocreate account %r'), path) + return False def GETorHEAD_base(self, req, server_type, node_iter, partition, path, concurrency=1, client_chunk_size=None): diff --git a/swift/proxy/controllers/container.py b/swift/proxy/controllers/container.py index 3a274b8443..0894829a4c 100644 --- a/swift/proxy/controllers/container.py +++ b/swift/proxy/controllers/container.py @@ -24,7 +24,7 @@ from swift.proxy.controllers.base import Controller, delay_denial, \ cors_validation, set_info_cache, clear_info_cache from swift.common.storage_policy import POLICIES from swift.common.swob import HTTPBadRequest, HTTPForbidden, \ - HTTPNotFound + HTTPNotFound, HTTPServerError class ContainerController(Controller): @@ -160,7 +160,8 @@ class ContainerController(Controller): account_partition, accounts, container_count = \ self.account_info(self.account_name, req) if not accounts and self.app.account_autocreate: - self.autocreate_account(req, self.account_name) + if not self.autocreate_account(req, self.account_name): + return HTTPServerError(request=req) account_partition, accounts, container_count = \ self.account_info(self.account_name, req) if not accounts: diff --git a/test/unit/proxy/test_server.py b/test/unit/proxy/test_server.py index f4470a4cd9..878ce33cba 100644 --- a/test/unit/proxy/test_server.py +++ b/test/unit/proxy/test_server.py @@ -7825,7 +7825,7 @@ class TestContainerController(unittest.TestCase): # fail to retrieve account info test_status_map( (503, 503, 503), # account_info fails on 503 - 404, missing_container=True) + 500, missing_container=True) # account fail after creation test_status_map( (404, 404, 404, # account_info fails on 404 @@ -7836,7 +7836,7 @@ class TestContainerController(unittest.TestCase): (503, 503, 404, # account_info fails on 404 503, 503, 503, # PUT account 503, 503, 404), # account_info fail - 404, missing_container=True) + 500, missing_container=True) # put fails test_status_map( (404, 404, 404, # account_info fails on 404