If you have trouble deleting an object storage bucket in Oracle Cloud Infrastructure you may have to clear old multipart uploads. The message may look something like this: Bucket named 'DR-Validation' has pending multipart uploads. Stop all multipart uploads first.
At the time the only way I could do this was through the API. Did not appear like the CLI or Console could clear out the upload. Below is a little python that may help. Below is an example just to show the idea. And of course if you have thousands of multipart uploads(yes its possible); you will need to change this was only for one or two.
```
#!/usr/bin/python #: Script Name : lobjectparts.py #: Author : Riaan Rossouw #: Date Created : June 13, 2019 #: Date Updated : July 18, 2019 #: Description : Python Script to list multipart uploads #: Examples : lobjectparts.py -t tenancy -r region -b bucket #: : lobjectparts.py --tenancy--region --bucket ## Will need the api modules ## new: https://oracle-cloud-infrastructure-python-sdk.readthedocs.io/en/latest/ ## old: https://oracle-bare-metal-cloud-services-python-sdk.readthedocs.io/en/latest/installation.html#install ## https://oracle-cloud-infrastructure-python-sdk.readthedocs.io/en/latest/api/object_storage/client/oci.object_storage.ObjectStorageClient.html from __future__ import print_function import os, optparse, sys, time, datetime import oci __version__ = '0.9.1' optdesc = 'This script is used to list multipart uploads in a bucket' parser = optparse.OptionParser(version='%prog version ' + __version__) parser.formatter.max_help_position = 50 parser.add_option('-t', '--tenancy', help='Specify Tenancy ocid', dest='tenancy', action='append') parser.add_option('-r', '--region', help='region', dest='region', action='append') parser.add_option('-b', '--bucket', help='bucket', dest='bucket', action='append') opts, args = parser.parse_args() def showMultipartUploads(identity, bucket_name): object_storage = oci.object_storage.ObjectStorageClient(config) namespace_name = object_storage.get_namespace().data uploads = object_storage.list_multipart_uploads(namespace_name, bucket_name, limit = 1000).data print(' {:35} | {:15} | {:30} | {:35} | {:20}'.format('bucket','namespace','object','time_created','upload_id')) for o in uploads: print(' {:35} | {:15} | {:30} | {:35} | {:20}'.format(o.bucket, o.namespace, o.object, str(o.time_created), o.upload_id)) confirm = input("Confirm if you want to abort this multipart upload (Y/N): ") if confirm == "Y": response = object_storage.abort_multipart_upload(o.namespace, o.bucket, o.object, o.upload_id).data else: print ("Chose to not do the abort action on this multipart upload at this time...") def main(): mandatories = ['tenancy','region','bucket'] for m in mandatories: if not opts.__dict__[m]: print ("mandatory option is missing\n") parser.print_help() exit(-1) print ('Multipart Uploads') config['region'] = opts.region[0] identity = oci.identity.IdentityClient(config) showMultipartUploads(identity, opts.bucket) if __name__ == '__main__': config = oci.config.from_file("/root/.oci/config","oci.api") main() ```