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>
(cherry picked from commit 713012c178
)
This commit is contained in:
parent
97fb5a7ee3
commit
f344fd6ca7
1 changed files with 9 additions and 4 deletions
|
@ -114,6 +114,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)
|
||||||
|
@ -127,11 +128,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