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

Function metadataSearch

lib/api/metadataSearch.js:45–147  ·  view source on GitHub ↗

* metadataSearch - Return list of objects in bucket that meet the search query, supports v1 & v2 * @param {AuthInfo} authInfo - Instance of AuthInfo class with * requester's info * @param {object} request - http request object * @param {function} log - Werelogs r

(authInfo, request, log, callback)

Source from the content-addressed store, hash-verified

43 * @return {undefined}
44 */
45function metadataSearch(authInfo, request, log, callback) {
46 const params = request.query;
47 const bucketName = request.bucketName;
48 const v2 = params['list-type'];
49 if (v2 !== undefined && Number.parseInt(v2, 10) !== 2) {
50 return callback(errorInstances.InvalidArgument.customizeDescription('Invalid ' +
51 'List Type specified in Request'));
52 }
53 log.debug('processing request', { method: 'metadataSearch' });
54 const encoding = params['encoding-type'];
55 if (encoding !== undefined && encoding !== 'url') {
56 monitoring.promMetrics(
57 'GET', bucketName, 400, 'metadataSearch');
58 return callback(errorInstances.InvalidArgument.customizeDescription('Invalid ' +
59 'Encoding Method specified in Request'));
60 }
61 const requestMaxKeys = params['max-keys'] ?
62 Number.parseInt(params['max-keys'], 10) : 1000;
63 if (Number.isNaN(requestMaxKeys) || requestMaxKeys < 0) {
64 monitoring.promMetrics(
65 'GET', bucketName, 400, 'metadataSearch');
66 return callback(errors.InvalidArgument);
67 }
68 // AWS only returns 1000 keys even if max keys are greater.
69 // Max keys stated in response xml can be greater than actual
70 // keys returned.
71 const actualMaxKeys = Math.min(constants.listingHardLimit, requestMaxKeys);
72
73 const metadataValParams = {
74 authInfo,
75 bucketName,
76 requestType: request.apiMethods || 'metadataSearch',
77 request,
78 };
79 const listParams = {
80 listingType: 'DelimiterMaster',
81 maxKeys: actualMaxKeys,
82 delimiter: params.delimiter,
83 prefix: params.prefix,
84 };
85 try {
86 const validatedAst = validateSearchParams(params.search).ast;
87 listParams.mongifiedSearch = parseWhere(validatedAst);
88 } catch (err) {
89 log.debug(err.message, {
90 stack: err.stack,
91 });
92 monitoring.promMetrics(
93 'GET', bucketName, 400, 'metadataSearch');
94 return callback(errorInstances.InvalidArgument
95 .customizeDescription('Invalid sql where clause ' +
96 'sent as search query'));
97 }
98 if (v2) {
99 listParams.v2 = true;
100 listParams.startAfter = params['start-after'];
101 listParams.continuationToken =
102 decryptToken(params['continuation-token']);

Callers

nothing calls this directly

Calls 7

validateSearchParamsFunction · 0.85
parseWhereFunction · 0.85
decryptTokenFunction · 0.85
collectCorsHeadersFunction · 0.85
debugMethod · 0.80
handleResultFunction · 0.70

Tested by

no test coverage detected