(canonicalID, bucketName, bucketMD, log, cb)
| 20 | |
| 21 | |
| 22 | function 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); |
no test coverage detected