MCPcopy
hub / github.com/scality/cloudserver / createAndStoreObject

Function createAndStoreObject

lib/api/apiUtils/object/createAndStoreObject.js:62–334  ·  view source on GitHub ↗

createAndStoreObject - store data, store metadata, and delete old data * and old metadata as necessary * @param {string} bucketName - name of bucket * @param {BucketInfo} bucketMD - BucketInfo instance * @param {string} objectKey - name of object * @param {object} objMD - object metadata * @pa

(bucketName, bucketMD, objectKey, objMD, authInfo,
        canonicalID, cipherBundle, request, isDeleteMarker, streamingV4Params,
        overheadField, log, originOp, callback)

Source from the content-addressed store, hash-verified

60 * result.versionId - unencrypted versionId returned by metadata
61 */
62function createAndStoreObject(bucketName, bucketMD, objectKey, objMD, authInfo,
63 canonicalID, cipherBundle, request, isDeleteMarker, streamingV4Params,
64 overheadField, log, originOp, callback) {
65 const putVersionId = request.headers['x-scal-s3-version-id'];
66 const isPutVersion = putVersionId || putVersionId === '';
67
68 const size = isDeleteMarker ? 0 : request.parsedContentLength;
69 // although the request method may actually be 'DELETE' if creating a
70 // delete marker, for our purposes we consider this to be a 'PUT'
71 // operation
72 const requestMethod = 'PUT';
73 const websiteRedirectHeader =
74 request.headers['x-amz-website-redirect-location'];
75 if (!validateWebsiteHeader(websiteRedirectHeader)) {
76 const err = errors.InvalidRedirectLocation;
77 log.debug('invalid x-amz-website-redirect-location' +
78 `value ${websiteRedirectHeader}`, { error: err });
79 return callback(err);
80 }
81
82 const metaHeaders = isDeleteMarker ? [] : getMetaHeaders(request.headers);
83 if (metaHeaders instanceof Error) {
84 log.debug('user metadata validation failed', {
85 error: metaHeaders,
86 method: 'createAndStoreObject',
87 });
88 return process.nextTick(() => callback(metaHeaders));
89 }
90 // if the request occurs within a Zenko deployment, we place a user-metadata
91 // field on the object
92 applyZenkoUserMD(metaHeaders);
93
94 log.trace('meta headers', { metaHeaders, method: 'objectPut' });
95 const objectKeyContext = {
96 bucketName,
97 owner: canonicalID,
98 namespace: request.namespace,
99 objectKey,
100 metaHeaders,
101 tagging: request.headers['x-amz-tagging'],
102 isDeleteMarker,
103 };
104 // If the request was made with a pre-signed url, the x-amz-acl 'header'
105 // might be in the query string rather than the actual headers so include
106 // it here
107 const headers = request.headers;
108 if (request.query && request.query['x-amz-acl']) {
109 headers['x-amz-acl'] = request.query['x-amz-acl'];
110 }
111 const metadataStoreParams = {
112 objectKey,
113 authInfo,
114 metaHeaders,
115 size,
116 headers,
117 isDeleteMarker,
118 replicationInfo: getReplicationInfo(config,
119 objectKey, bucketMD, false, size, null, null, authInfo),

Callers 4

objectPutFunction · 0.85
objectDeleteInternalFunction · 0.85
getObjMetadataAndDeleteFunction · 0.85

Calls 15

validateWebsiteHeaderFunction · 0.85
applyZenkoUserMDFunction · 0.85
getReplicationInfoFunction · 0.85
removeAWSChunkedFunction · 0.85
locationConstraintCheckFunction · 0.85
dataStoreFunction · 0.85
overwritingVersioningFunction · 0.85
versioningPreprocessingFunction · 0.85
decodeVIDFunction · 0.85
_storeInMDandDeleteDataFunction · 0.85
debugMethod · 0.80
traceMethod · 0.80

Tested by

no test coverage detected