summaryrefslogtreecommitdiff
path: root/swiftclient/service.py
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2015-07-02 00:04:50 +0000
committerGerrit Code Review <review@openstack.org>2015-07-02 00:04:50 +0000
commit0df888ea5527214621649604054076b03045cd7a (patch)
treebb4cd0bcdd08f457893fe6ec6dfa5353e1fa0de9 /swiftclient/service.py
parent70afe207cf1022e120c49622b3e6a9740cf2eb05 (diff)
parentd931ec1381b6160c06036c6038f247c8619392ef (diff)
downloadpython-swiftclient-0df888ea5527214621649604054076b03045cd7a.tar.gz
Merge "Remove all DLO segments on upload of replacement"
Diffstat (limited to 'swiftclient/service.py')
-rw-r--r--swiftclient/service.py32
1 files changed, 20 insertions, 12 deletions
diff --git a/swiftclient/service.py b/swiftclient/service.py
index 2760a08..ba21a49 100644
--- a/swiftclient/service.py
+++ b/swiftclient/service.py
@@ -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