Browse Source

Fixing an issue with bucket creation, sometimes many calls will be made at once for checking bucket exists, just manage this by storing the state of promise.

master
mike12345567 6 years ago
parent
commit
415b48856f
  1. 15
      packages/server/src/utilities/fileSystem/utilities.js

15
packages/server/src/utilities/fileSystem/utilities.js

@ -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)) {

Loading…
Cancel
Save