@@ -70,6 +70,10 @@ function deleteBucket(authInfo, bucketMD, bucketName, canonicalID, request, log,
7070 return metadata . listObject ( bucketName , params , log ,
7171 ( err , list ) => {
7272 if ( err ) {
73+ if ( err . NoSuchBucket ) {
74+ log . debug ( 'metadata returned NoSuchBucket error: carrying on with the deletion' ) ;
75+ return next ( ) ;
76+ }
7377 log . error ( 'error from metadata' , { error : err } ) ;
7478 return next ( err ) ;
7579 }
@@ -115,6 +119,11 @@ function deleteBucket(authInfo, bucketMD, bucketName, canonicalID, request, log,
115119 } ) ;
116120 } ,
117121 function addDeleteFlagStep ( next ) {
122+ // If we originally got a NoSuchBucket error from metadata, we
123+ // don't need to update the bucket metadata since they don't exist
124+ if ( bucketMD === undefined ) {
125+ return next ( ) ;
126+ }
118127 log . trace ( 'adding deleted attribute to bucket attributes' ) ;
119128 // Remove transient flag if any so never have both transient
120129 // and deleted flags.
@@ -134,9 +143,17 @@ function deleteBucket(authInfo, bucketMD, bucketName, canonicalID, request, log,
134143 }
135144 return metadata . deleteBucket ( bucketName , log , err => {
136145 log . trace ( 'deleting bucket from metadata' ) ;
146+ if ( err && err . NoSuchBucket ) {
147+ log . debug ( 'metadata returned NoSuchBucket error: deletion is effectively a success' , err ) ;
148+ return cb ( ) ;
149+ }
137150 if ( err ) {
138151 return cb ( err ) ;
139152 }
153+
154+ // TODO: For the NoSuchBucket bypass, we are not attempting to delete the KMS master key.
155+ // Shoudn't this be another function in the waterfall?
156+ // Will we need to handle the possibility that the key does not exist?
140157 const serverSideEncryption = bucketMD . getServerSideEncryption ( ) ;
141158 if ( serverSideEncryption &&
142159 serverSideEncryption . algorithm === 'AES256' ) {
0 commit comments