From 28b793271fef258990ccb126d73cc2c5d94bfb6c Mon Sep 17 00:00:00 2001 From: Casey Bodley Date: Mon, 22 Apr 2019 15:34:23 -0400 Subject: [PATCH] nuke_prefixed_buckets() ignores 404 from bucket delete if a bucket delete request times out, the retry will likely get a 404 NoSuchBucket response. ignore that error and treat this as a success Signed-off-by: Casey Bodley --- s3tests/functional/__init__.py | 8 +++++++- s3tests_boto3/functional/__init__.py | 9 ++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/s3tests/functional/__init__.py b/s3tests/functional/__init__.py index 05e3a6b..4727285 100644 --- a/s3tests/functional/__init__.py +++ b/s3tests/functional/__init__.py @@ -91,7 +91,13 @@ def nuke_prefixed_buckets_on_conn(prefix, name, conn): )) # key.set_canned_acl('private') bucket.delete_key(key.name, version_id = key.version_id) - bucket.delete() + try: + bucket.delete() + except boto.exception.S3ResponseError as e: + # if DELETE times out, the retry may see NoSuchBucket + if e.error_code != 'NoSuchBucket': + raise e + pass success = True except boto.exception.S3ResponseError as e: if e.error_code != 'AccessDenied': diff --git a/s3tests_boto3/functional/__init__.py b/s3tests_boto3/functional/__init__.py index 9f7f193..d892d64 100644 --- a/s3tests_boto3/functional/__init__.py +++ b/s3tests_boto3/functional/__init__.py @@ -1,6 +1,7 @@ import boto3 from botocore import UNSIGNED from botocore.client import Config +from botocore.exceptions import ClientError from botocore.handlers import disable_signing import ConfigParser import os @@ -123,7 +124,13 @@ def nuke_prefixed_buckets(prefix, client=None): delete_markers = get_delete_markers_list(bucket_name, client) for obj in delete_markers: response = client.delete_object(Bucket=bucket_name,Key=obj[0],VersionId=obj[1]) - client.delete_bucket(Bucket=bucket_name) + try: + client.delete_bucket(Bucket=bucket_name) + except ClientError, e: + # if DELETE times out, the retry may see NoSuchBucket + if e.response['Error']['Code'] != 'NoSuchBucket': + raise e + pass print('Done with cleanup of buckets in tests.')