MCPcopy Index your code
hub / github.com/scality/cloudserver / addToUsersBucket

Function addToUsersBucket

lib/api/apiUtils/bucket/bucketCreation.js:22–82  ·  view source on GitHub ↗
(canonicalID, bucketName, bucketMD, log, cb)

Source from the content-addressed store, hash-verified

20
21
22function addToUsersBucket(canonicalID, bucketName, bucketMD, log, cb) {
23 // BACKWARD: Simplify once do not have to deal with old
24 // usersbucket name and old splitter
25
26 // Get new format usersBucket to see if it exists
27 return metadata.getBucket(usersBucket, log, (err, usersBucketAttrs) => {
28 if (err && !err.is.NoSuchBucket && !err.is.BucketAlreadyExists) {
29 return cb(err);
30 }
31 const splitter = usersBucketAttrs ?
32 constants.splitter : constants.oldSplitter;
33 let key = createKeyForUserBucket(canonicalID, splitter, bucketName);
34 const omVal = {
35 creationDate: new Date().toJSON(),
36 ingestion: bucketMD.getIngestion(),
37 };
38 // If the new format usersbucket does not exist, try to put the
39 // key in the old usersBucket using the old splitter.
40 // Otherwise put the key in the new format usersBucket
41 const usersBucketBeingCalled = usersBucketAttrs ?
42 usersBucket : oldUsersBucket;
43 return metadata.putObjectMD(usersBucketBeingCalled, key,
44 omVal, {}, log, err => {
45 if (err?.is?.NoSuchBucket) {
46 // There must be no usersBucket so createBucket
47 // one using the new format
48 log.trace('users bucket does not exist, ' +
49 'creating users bucket');
50 key = `${canonicalID}${constants.splitter}` +
51 `${bucketName}`;
52 const creationDate = new Date().toJSON();
53 const freshBucket = new BucketInfo(usersBucket,
54 userBucketOwner, userBucketOwner, creationDate,
55 BucketInfo.currentModelVersion());
56 return metadata.createBucket(usersBucket,
57 freshBucket, log, err => {
58 // Note: In the event that two
59 // users' requests try to create the
60 // usersBucket at the same time,
61 // this will prevent one of the users
62 // from getting a BucketAlreadyExists
63 // error with respect
64 // to the usersBucket.
65 // TODO: move to `.is` once BKTCLT-9 is done and bumped in Cloudserver
66 if (err && !err.BucketAlreadyExists) {
67 log.error('error from metadata', {
68 error: err,
69 });
70 return cb(err);
71 }
72 log.trace('Users bucket created');
73 // Finally put the key in the new format
74 // usersBucket
75 return metadata.putObjectMD(usersBucket,
76 key, omVal, {}, log, cb);
77 });
78 }
79 return cb(err);

Callers 2

freshStartCreateBucketFunction · 0.85
cleanUpBucketFunction · 0.85

Calls 3

createKeyForUserBucketFunction · 0.85
traceMethod · 0.80
errorMethod · 0.80

Tested by

no test coverage detected