Merge "Remove all DLO segments on upload of replacement"

This commit is contained in:
Jenkins 2015-07-02 00:04:50 +00:00 committed by Gerrit Code Review
commit 0df888ea55
2 changed files with 29 additions and 19 deletions
swiftclient
tests/unit

@ -1815,19 +1815,19 @@ class SwiftService(object):
if old_manifest or old_slo_manifest_paths:
drs = []
delobjsmap = {}
if old_manifest:
scontainer, sprefix = old_manifest.split('/', 1)
scontainer = unquote(scontainer)
sprefix = unquote(sprefix).rstrip('/') + '/'
delobjs = []
for delobj in conn.get_container(scontainer,
prefix=sprefix)[1]:
delobjs.append(delobj['name'])
for dr in self.delete(container=scontainer,
objects=delobjs):
drs.append(dr)
delobjsmap[scontainer] = []
for part in self.list(scontainer, {'prefix': sprefix}):
if not part["success"]:
raise part["error"]
delobjsmap[scontainer].extend(
seg['name'] for seg in part['listing'])
if old_slo_manifest_paths:
delobjsmap = {}
for seg_to_delete in old_slo_manifest_paths:
if seg_to_delete in new_slo_manifest_paths:
continue
@ -1836,10 +1836,18 @@ class SwiftService(object):
delobjs_cont = delobjsmap.get(scont, [])
delobjs_cont.append(sobj)
delobjsmap[scont] = delobjs_cont
for (dscont, dsobjs) in delobjsmap.items():
for dr in self.delete(container=dscont,
objects=dsobjs):
drs.append(dr)
del_segs = []
for dscont, dsobjs in delobjsmap.items():
for dsobj in dsobjs:
del_seg = self.thread_manager.segment_pool.submit(
self._delete_segment, dscont, dsobj,
results_queue=results_queue
)
del_segs.append(del_seg)
for del_seg in interruptable_as_completed(del_segs):
drs.append(del_seg.result())
res['segment_delete_results'] = drs
# return dict for printing

@ -491,11 +491,11 @@ class TestShell(unittest.TestCase):
expected_delete_calls = [
mock.call(
b'container1', b'old_seg1',
query_string=None, response_dict={}
response_dict={}
),
mock.call(
b'container2', b'old_seg2',
query_string=None, response_dict={}
response_dict={}
)
]
self.assertEqual(
@ -540,9 +540,11 @@ class TestShell(unittest.TestCase):
]
connection.return_value.get_container.side_effect = [
[None, [{'name': 'prefix_a', 'bytes': 0,
'last_modified': '123T456'},
{'name': 'prefix_b', 'bytes': 0,
'last_modified': '123T456'}]]
'last_modified': '123T456'}]],
# Have multiple pages worth of DLO segments
[None, [{'name': 'prefix_b', 'bytes': 0,
'last_modified': '123T456'}]],
[None, []]
]
connection.return_value.put_object.return_value = (
'd41d8cd98f00b204e9800998ecf8427e')
@ -557,11 +559,11 @@ class TestShell(unittest.TestCase):
expected_delete_calls = [
mock.call(
'container1', 'prefix_a',
query_string=None, response_dict={}
response_dict={}
),
mock.call(
'container1', 'prefix_b',
query_string=None, response_dict={}
response_dict={}
)
]
self.assertEqual(