diff options
author | Tim Burke <tim.burke@gmail.com> | 2018-05-30 15:52:16 -0700 |
---|---|---|
committer | Tim Burke <tim.burke@gmail.com> | 2018-12-11 15:22:21 -0800 |
commit | 68fc87ad21d63c713ed13aeb6a214357d2d61dd6 (patch) | |
tree | ca6c2326d27716e4f39bf8b0b71c202ddf28421a | |
parent | 2faab63dd789cb6d54eaa83fcdc04adda2f165b9 (diff) | |
download | swift-68fc87ad21d63c713ed13aeb6a214357d2d61dd6.tar.gz |
copy: Stop hanging per-request data on middleware instance
Change-Id: Ib7b208669e900b84a7759819ef76b7b5b7ce8c9a
Closes-Bug: 1774719
(cherry picked from commit 9ef2a828166aece6b374a97b0777b90c359fdebd)
-rw-r--r-- | swift/common/middleware/copy.py | 33 |
1 files changed, 15 insertions, 18 deletions
diff --git a/swift/common/middleware/copy.py b/swift/common/middleware/copy.py index d3718573b..af251f96a 100644 --- a/swift/common/middleware/copy.py +++ b/swift/common/middleware/copy.py @@ -317,10 +317,6 @@ class ServerSideCopyMiddleware(object): # If obj component is not present in req, do not proceed further. return self.app(env, start_response) - self.account_name = account - self.container_name = container - self.object_name = obj - try: # In some cases, save off original request method since it gets # mutated into PUT during handling. This way logging can display @@ -329,10 +325,12 @@ class ServerSideCopyMiddleware(object): return self.handle_PUT(req, start_response) elif req.method == 'COPY': req.environ['swift.orig_req_method'] = req.method - return self.handle_COPY(req, start_response) + return self.handle_COPY(req, start_response, + account, container, obj) elif req.method == 'POST' and self.object_post_as_copy: req.environ['swift.orig_req_method'] = req.method - return self.handle_object_post_as_copy(req, start_response) + return self.handle_object_post_as_copy(req, start_response, + account, container, obj) elif req.method == 'OPTIONS': # Does not interfere with OPTIONS response from # (account,container) servers and /info response. @@ -343,14 +341,13 @@ class ServerSideCopyMiddleware(object): return self.app(env, start_response) - def handle_object_post_as_copy(self, req, start_response): + def handle_object_post_as_copy(self, req, start_response, + account, container, obj): req.method = 'PUT' - req.path_info = '/v1/%s/%s/%s' % ( - self.account_name, self.container_name, self.object_name) + req.path_info = '/v1/%s/%s/%s' % (account, container, obj) req.headers['Content-Length'] = 0 req.headers.pop('Range', None) - req.headers['X-Copy-From'] = quote('/%s/%s' % (self.container_name, - self.object_name)) + req.headers['X-Copy-From'] = quote('/%s/%s' % (container, obj)) req.environ['swift.post_as_copy'] = True params = req.params # for post-as-copy always copy the manifest itself if source is *LO @@ -358,22 +355,22 @@ class ServerSideCopyMiddleware(object): req.params = params return self.handle_PUT(req, start_response) - def handle_COPY(self, req, start_response): + def handle_COPY(self, req, start_response, account, container, obj): if not req.headers.get('Destination'): return HTTPPreconditionFailed(request=req, body='Destination header required' )(req.environ, start_response) - dest_account = self.account_name + dest_account = account if 'Destination-Account' in req.headers: dest_account = req.headers.get('Destination-Account') dest_account = check_account_format(req, dest_account) - req.headers['X-Copy-From-Account'] = self.account_name - self.account_name = dest_account + req.headers['X-Copy-From-Account'] = account + account = dest_account del req.headers['Destination-Account'] dest_container, dest_object = _check_destination_header(req) - source = '/%s/%s' % (self.container_name, self.object_name) - self.container_name = dest_container - self.object_name = dest_object + source = '/%s/%s' % (container, obj) + container = dest_container + obj = dest_object # re-write the existing request as a PUT instead of creating a new one req.method = 'PUT' # As this the path info is updated with destination container, |