summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-09-29 03:15:10 +0000
committerGerrit Code Review <review@openstack.org>2013-09-29 03:15:10 +0000
commit5eea524d3ea6d29c2b6f34927c0130090e7ed44d (patch)
treec8e98b016a84c2db9b95bd8766ec3d85211d0f10
parent9befc70b219302a91f8ad007e9126b6f44451efc (diff)
parentdf39602c41605c4c68a47c6532a466ccc1a6633d (diff)
downloadswift-5eea524d3ea6d29c2b6f34927c0130090e7ed44d.tar.gz
Merge "bulk delete bug with trailing whitespace"
-rw-r--r--swift/common/middleware/bulk.py8
-rw-r--r--test/unit/common/middleware/test_bulk.py8
2 files changed, 9 insertions, 7 deletions
diff --git a/swift/common/middleware/bulk.py b/swift/common/middleware/bulk.py
index 27934800b..a6effaf99 100644
--- a/swift/common/middleware/bulk.py
+++ b/swift/common/middleware/bulk.py
@@ -241,6 +241,7 @@ class Bulk(object):
while data_remaining:
if '\n' in line:
obj_to_delete, line = line.split('\n', 1)
+ obj_to_delete = obj_to_delete.strip()
objs_to_delete.append(
{'name': unquote(obj_to_delete)})
else:
@@ -249,9 +250,10 @@ class Bulk(object):
line += data
else:
data_remaining = False
- if line.strip():
+ obj_to_delete = line.strip()
+ if obj_to_delete:
objs_to_delete.append(
- {'name': unquote(line)})
+ {'name': unquote(obj_to_delete)})
if len(objs_to_delete) > self.max_deletes_per_request:
raise HTTPRequestEntityTooLarge(
'Maximum Bulk Deletes: %d per request' %
@@ -308,7 +310,7 @@ class Bulk(object):
separator = '\r\n\r\n'
last_yield = time()
yield ' '
- obj_name = obj_to_delete['name'].strip()
+ obj_name = obj_to_delete['name']
if not obj_name:
continue
if len(failed_files) >= self.max_failed_deletes:
diff --git a/test/unit/common/middleware/test_bulk.py b/test/unit/common/middleware/test_bulk.py
index f5ae07a15..e51c4ee6a 100644
--- a/test/unit/common/middleware/test_bulk.py
+++ b/test/unit/common/middleware/test_bulk.py
@@ -553,18 +553,18 @@ class TestDelete(unittest.TestCase):
req.method = 'DELETE'
req.headers['Transfer-Encoding'] = 'chunked'
req.headers['Accept'] = 'application/json'
- req.environ['wsgi.input'] = StringIO('/c/f')
+ req.environ['wsgi.input'] = StringIO('/c/f%20')
list(self.bulk(req.environ, fake_start_response)) # iterate over resp
self.assertEquals(
- self.app.delete_paths, ['/delete_works/AUTH_Acc/c/f'])
+ self.app.delete_paths, ['/delete_works/AUTH_Acc/c/f '])
self.assertEquals(self.app.calls, 1)
def test_bulk_delete_get_objs(self):
- req = Request.blank('/delete_works/AUTH_Acc', body='1\r\n2\r\n')
+ req = Request.blank('/delete_works/AUTH_Acc', body='1%20\r\n2\r\n')
req.method = 'DELETE'
with patch.object(self.bulk, 'max_deletes_per_request', 2):
results = self.bulk.get_objs_to_delete(req)
- self.assertEquals(results, [{'name': '1\r'}, {'name': '2\r'}])
+ self.assertEquals(results, [{'name': '1 '}, {'name': '2'}])
with patch.object(bulk, 'MAX_PATH_LENGTH', 2):
results = []