forked from TrueCloudLab/s3-tests
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:
parent
47a3755378
commit
713012c178
1 changed files with 9 additions and 4 deletions
|
@ -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.')
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue