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

Function routeBackbeat

lib/routes/routeBackbeat.js:1706–1927  ·  view source on GitHub ↗
(clientIP, request, response, log)

Source from the content-addressed store, hash-verified

1704}
1705
1706function routeBackbeat(clientIP, request, response, log) {
1707 // Attach the apiMethod method to the request, so it can used by monitoring in the server
1708 // eslint-disable-next-line no-param-reassign
1709 request.apiMethod = 'routeBackbeat';
1710 const contentLength = request.headers['x-amz-decoded-content-length'] || request.headers['content-length'];
1711 // eslint-disable-next-line no-param-reassign
1712 request.parsedContentLength = Number.parseInt(contentLength?.toString() ?? '', 10);
1713
1714 log.debug('routing request');
1715 _normalizeBackbeatRequest(request);
1716
1717 log.addDefaultFields({
1718 clientIP,
1719 url: request.url,
1720 method: 'routeBackbeat',
1721 resourceType: request.resourceType,
1722 bucketName: request.bucketName,
1723 objectKey: request.objectKey,
1724 bytesReceived: request.parsedContentLength || 0,
1725 bodyLength: parseInt(request.headers['content-length'], 10) || 0,
1726 });
1727 if (request.serverAccessLog) {
1728 // eslint-disable-next-line no-param-reassign
1729 request.serverAccessLog.bucketName = request.bucketName;
1730 // eslint-disable-next-line no-param-reassign
1731 request.serverAccessLog.objectKey = request.objectKey;
1732 // eslint-disable-next-line no-param-reassign
1733 request.serverAccessLog.backbeat = true;
1734 // eslint-disable-next-line no-param-reassign
1735 request.serverAccessLog.analyticsAction = 'BACKBEAT_INVALID';
1736 }
1737
1738 const requestContexts = prepareRequestContexts('objectReplicate', request);
1739
1740 if (request.resourceType === 'expiration' || request.resourceType === 'batchdelete') {
1741 // Reassign a specific apiMethod, as it is needed for quota evaluation (at least), where
1742 // "routeBackbeat" cannot be used as it is used for all backbeat API operations...
1743 // eslint-disable-next-line no-param-reassign
1744 request.apiMethod = 'objectDelete';
1745
1746 // Request account quotas, as it will not be added for the 'objectReplicate' action which
1747 // is used by default for all backbeat operations
1748 requestContexts.forEach(context => {
1749 context._needQuota = true; // eslint-disable-line no-param-reassign
1750 });
1751 }
1752
1753 // Ensure backbeat operations like expiration can properly use quotas
1754 // eslint-disable-next-line no-param-reassign
1755 request.finalizerHooks = [];
1756
1757 // Extract all the _apiMethods and store them in an array
1758 const apiMethods = requestContexts ? requestContexts.map(context => context._apiMethod) : [];
1759 // Attach the names to the current request
1760 // eslint-disable-next-line no-param-reassign
1761 request.apiMethods = apiMethods;
1762
1763 // proxy api requests to Backbeat API server

Callers 1

routeBackbeat.jsFile · 0.85

Calls 12

prepareRequestContextsFunction · 0.85
routeBackbeatAPIProxyFunction · 0.85
_isObjectRequestFunction · 0.85
routeNonObjectRequestFunction · 0.85
debugMethod · 0.80
addDefaultFieldsMethod · 0.80
traceMethod · 0.80
errorMethod · 0.80
decodeVersionIdFunction · 0.50

Tested by

no test coverage detected