quickstart-taskcat-ci icon indicating copy to clipboard operation
quickstart-taskcat-ci copied to clipboard

empty-bucket lambda code may report empty bucket when bucket not empty

Open elerch opened this issue 4 years ago • 0 comments
trafficstars

   for page in result:
        try:
            for k in page['Contents']:
                objects.append({'Key': k['Key']})
                print('deleting objects')
                client.delete_objects(Bucket=bucket, Delete={'Objects': objects})
                objects = []
        except Exception as e:
            logging.error('Exception deleting objects from bucket: %s' % e)
            pass
    print('bucket empty')

It is conceivable here to have an exception, thus an object is not deleted. However, the function will report "bucket empty" even if an exception occurs.

A similar issue exists for the delete_versionedobjects function.

delete_versionedobjects function:

    for page in result:
        try:
            for k in page['Versions']:
                objects.append({'Key': k['Key'], 'VersionId': k['VersionId']})
            try:
                for k in page['DeleteMarkers']:
                    version = k['VersionId']
                    key = k['Key']
                    objects.append({'Key': key, 'VersionId': version})
            except Exception as e:
                # Note that I don't believe an exception can be thrown, so
                # this code should never execute. Leaving it here in case I
                # am wrong
                logging.error('Exception assembling delete markers: %s' % e)
                pass
            print('deleting objects')
            client.delete_objects(Bucket=bucket, Delete={'Objects': objects})
            # objects = []
        except Exception as e:
            logging.error('Exception deleting versioned objects: %s' % e)
            pass
    print('bucket empty')

elerch avatar Apr 07 '21 23:04 elerch