Fix: Bucket resource leak when cleanup

In the function of nuke_prefixed_buckets, if some err is thrown when deleting buckets, the left buckets remain uncleaned.
It is kind of resoruce leak on some charged platform. We have to clear them manually.

I know the original code is meant to give the user some hint by rasing error. But the resource leak of left buckets is a little annoying.

This PR would skip the problem point and continue the teardown process. The last client error would be saved and re-raised after the loop completes.

Signed-off-by: Pei <huangp0600@126.com>
Signed-off-by: Pei <phuang1@dev-new-3-3854897.slc07.dev.ebayc3.com>
This commit is contained in:
Pei 2020-05-05 01:07:27 -07:00
parent 47a3755378
commit 713012c178

View file

@ -113,6 +113,7 @@ def nuke_prefixed_buckets(prefix, client=None):
buckets = get_buckets_list(client, prefix) buckets = get_buckets_list(client, prefix)
err = None
if buckets != []: if buckets != []:
for bucket_name in buckets: for bucket_name in buckets:
objects_list = get_objects_list(bucket_name, client) objects_list = get_objects_list(bucket_name, client)
@ -126,11 +127,15 @@ def nuke_prefixed_buckets(prefix, client=None):
response = client.delete_object(Bucket=bucket_name,Key=obj[0],VersionId=obj[1]) response = client.delete_object(Bucket=bucket_name,Key=obj[0],VersionId=obj[1])
try: try:
response = client.delete_bucket(Bucket=bucket_name) response = client.delete_bucket(Bucket=bucket_name)
except ClientError: except ClientError as e:
# if DELETE times out, the retry may see NoSuchBucket # The exception shouldn't be raised when doing cleanup. Pass and continue
if response['Error']['Code'] != 'NoSuchBucket': # the bucket cleanup process. Otherwise left buckets wouldn't be cleared
raise ClientError # resulting in some kind of resource leak. err is used to hint user some
# exception once occurred.
err = e
pass pass
if err:
raise err
print('Done with cleanup of buckets in tests.') print('Done with cleanup of buckets in tests.')