Skip to content

Commit bde1072

Browse files
committed
trying to fix delete on hard ghost bucket
1 parent a6cb9bd commit bde1072

File tree

3 files changed

+23
-1
lines changed

3 files changed

+23
-1
lines changed

lib/api/apiUtils/bucket/bucketDeletion.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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') {

lib/api/bucketDelete.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,14 @@ function bucketDelete(authInfo, request, log, cb) {
3535
(err, bucketMD) => {
3636
const corsHeaders = collectCorsHeaders(request.headers.origin,
3737
request.method, bucketMD);
38-
if (err) {
38+
if (err && !err.NoSuchBucket) {
3939
log.debug('error processing request',
4040
{ method: 'metadataValidateBucket', error: err });
4141
return cb(err, corsHeaders);
4242
}
43+
if (err && err.NoSuchBucket) {
44+
log.debug('bucket not found in metadata: carrying on with deletion', err);
45+
}
4346
log.trace('passed checks',
4447
{ method: 'metadataValidateBucket' });
4548
return deleteBucket(authInfo, bucketMD, bucketName,

lib/metadata/metadataUtils.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,8 @@ function standardMetadataValidateBucket(params, actionImplicitDenies, log, callb
260260
if (err) {
261261
return callback(err);
262262
}
263+
// In the NoSuchBucket case, we will not evaluate this, is this an issue?
264+
// Don't we already evaluate IAM policies anyway?
263265
const validationError = validateBucket(bucket, params, log, actionImplicitDenies);
264266
return callback(validationError, bucket);
265267
});

0 commit comments

Comments
 (0)