Fix container delete throughput and 409 retries.

Fix race condition in _delete_container() where all elements of
object_queue have been removed, but the last one (per thread) may not
have actually been deleted yet when the container deletion thread calls
conn.delete_container(container).  Fixes bug 1032879.

Improves container deletion throughput by immediately deleting
containers with no objects instead of waiting for all pending object
deletes to complete.  Fixes bug 1032878.

Change-Id: I404229a4c608995294e0ada77724ac8afe8d6f3c
This commit is contained in:
Darrell Bishop 2012-08-03 19:27:07 -07:00
parent 1f6096e063
commit c87458e229

@ -215,16 +215,20 @@ def st_delete(parser, args, print_queue, error_queue):
def _delete_container(container, conn):
try:
marker = ''
had_objects = False
while True:
objects = [o['name'] for o in
conn.get_container(container, marker=marker)[1]]
if not objects:
break
had_objects = True
for obj in objects:
object_queue.put((container, obj))
marker = objects[-1]
while not object_queue.empty():
sleep(0.01)
if had_objects:
# By using join() instead of empty() we should avoid most
# occurrences of 409 below.
object_queue.join()
attempts = 1
while True:
try: