@ -13,6 +13,10 @@ const { ObjectStoreBuckets } = require("../../constants")
const uuid = require ( "uuid/v4" )
const streamPipeline = promisify ( stream . pipeline )
// use this as a temporary store of buckets that are being created
const STATE = {
bucketCreationPromises : { } ,
}
const CONTENT_TYPE_MAP = {
html : "text/html" ,
@ -81,13 +85,18 @@ exports.makeSureBucketExists = async (client, bucketName) => {
} )
. promise ( )
} catch ( err ) {
// bucket doesn't exist create it
if ( err . statusCode === 404 ) {
await client
const promises = STATE . bucketCreationPromises
if ( promises [ bucketName ] ) {
await promises [ bucketName ]
} else if ( err . statusCode === 404 ) {
// bucket doesn't exist create it
promises [ bucketName ] = client
. createBucket ( {
Bucket : bucketName ,
} )
. promise ( )
await promises [ bucketName ]
delete promises [ bucketName ]
// public buckets are quite hidden in the system, make sure
// no bucket is set accidentally
if ( PUBLIC_BUCKETS . includes ( bucketName ) ) {