Skip to content

Commit 0029851

Browse files
committed
CLDSRV-750: add raftSessionID to server access logs
1 parent 6b0e2df commit 0029851

File tree

2 files changed

+31
-28
lines changed

2 files changed

+31
-28
lines changed

lib/metadata/metadataUtils.js

Lines changed: 30 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,15 @@ const { onlyOwnerAllowed } = require('../../constants');
1010
const { actionNeedQuotaCheck, actionWithDataDeletion } = require('arsenal/build/lib/policyEvaluator/RequestContext');
1111
const { processBytesToWrite, validateQuotas } = require('../api/apiUtils/quotas/quotaUtils');
1212

13-
function storeServerAccessLogInfo(request, authInfo, bucket) {
13+
function storeServerAccessLogInfo(request, bucket, raftSessionId) {
1414
/* eslint-disable no-param-reassign */
1515

1616
if (!request || !request.serverAccessLog) {
1717
return;
1818
}
1919

20+
request.serverAccessLog.raftSessionID = raftSessionId;
21+
2022
if (bucket) {
2123
request.serverAccessLog.bucketOwner = bucket.getOwner();
2224
request.serverAccessLog.bucketName = bucket.getName();
@@ -216,50 +218,51 @@ function standardMetadataValidateBucketAndObj(params, actionImplicitDenies, log,
216218
if (getDeleteMarker) {
217219
getOptions.getDeleteMarker = true;
218220
}
219-
return metadata.getBucketAndObjectMD(bucketName, objectKey, getOptions, log, (err, getResult) => {
220-
if (err) {
221-
// if some implicit iamAuthzResults, return AccessDenied
222-
// before leaking any state information
223-
if (actionImplicitDenies && Object.values(actionImplicitDenies).some(v => v === true)) {
224-
return next(errors.AccessDenied);
221+
return metadata.getBucketAndObjectMD(bucketName, objectKey, getOptions, log,
222+
(err, getResult, raftSessionId) => {
223+
if (err) {
224+
// if some implicit iamAuthzResults, return AccessDenied
225+
// before leaking any state information
226+
if (actionImplicitDenies && Object.values(actionImplicitDenies).some(v => v === true)) {
227+
return next(errors.AccessDenied);
228+
}
229+
return next(err);
225230
}
226-
return next(err);
227-
}
228-
return next(null, getResult);
229-
});
231+
return next(null, getResult, raftSessionId);
232+
});
230233
},
231-
(getResult, next) => {
234+
(getResult, raftSessionId, next) => {
232235
const bucket = getResult.bucket ?
233236
BucketInfo.deSerialize(getResult.bucket) : undefined;
234237
if (!bucket) {
235238
log.debug('bucketAttrs is undefined', {
236239
bucket: bucketName,
237240
method: 'metadataValidateBucketAndObj',
238241
});
239-
return next(errors.NoSuchBucket);
242+
return next(errors.NoSuchBucket, raftSessionId);
240243
}
241244
const validationError = validateBucket(bucket, params, log, actionImplicitDenies);
242245
if (validationError) {
243-
return next(validationError, bucket);
246+
return next(validationError, bucket, raftSessionId);
244247
}
245248
const objMD = getResult.obj ? JSON.parse(getResult.obj) : undefined;
246249
if (!objMD && versionId === 'null') {
247250
return getNullVersionFromMaster(bucketName, objectKey, log,
248-
(err, nullVer) => next(err, bucket, nullVer));
251+
(err, nullVer) => next(err, bucket, nullVer, raftSessionId));
249252
}
250-
return next(null, bucket, objMD);
253+
return next(null, bucket, objMD, raftSessionId);
251254
},
252-
(bucket, objMD, next) => {
255+
(bucket, objMD, raftSessionId, next) => {
253256
const objMetadata = objMD;
254257
const canonicalID = authInfo.getCanonicalID();
255258
if (!isObjAuthorized(bucket, objMetadata, requestType, canonicalID, authInfo, log, request,
256259
actionImplicitDenies)) {
257260
log.debug('access denied for user on object', { requestType });
258-
return next(errors.AccessDenied, bucket);
261+
return next(errors.AccessDenied, bucket, undefined, raftSessionId);
259262
}
260263

261264
if (!objMetadata) {
262-
return next(null, bucket, objMetadata);
265+
return next(null, bucket, objMetadata, raftSessionId);
263266
}
264267

265268
let returnTagCount = false;
@@ -276,25 +279,25 @@ function standardMetadataValidateBucketAndObj(params, actionImplicitDenies, log,
276279

277280
objMetadata.returnTagCount = returnTagCount;
278281
}
279-
return next(null, bucket, objMetadata);
282+
return next(null, bucket, objMetadata, raftSessionId);
280283
},
281-
(bucket, objMD, next) => {
284+
(bucket, objMD, raftSessionId, next) => {
282285
const needQuotaCheck = requestType => requestType.some(type => actionNeedQuotaCheck[type] ||
283286
actionWithDataDeletion[type]);
284287
const checkQuota = params.checkQuota === undefined ? needQuotaCheck(requestType) : params.checkQuota;
285288
// withVersionId cover cases when an object is being restored with a specific version ID.
286289
// In this case, the storage space was already accounted for when the RestoreObject API call
287290
// was made, so we don't need to add any inflight, but quota must be evaluated.
288291
if (!checkQuota) {
289-
return next(null, bucket, objMD);
292+
return next(null, bucket, objMD, raftSessionId);
290293
}
291294
const contentLength = processBytesToWrite(request.apiMethod, bucket, versionId,
292295
request?.parsedContentLength || 0, objMD, params.destObjMD);
293296
return validateQuotas(request, bucket, request.accountQuotas, requestType, request.apiMethod,
294-
contentLength, withVersionId, log, err => next(err, bucket, objMD));
297+
contentLength, withVersionId, log, err => next(err, bucket, objMD, raftSessionId));
295298
},
296-
], (err, bucket, objMD) => {
297-
storeServerAccessLogInfo(request, authInfo, bucket);
299+
], (err, bucket, objMD, raftSessionId) => {
300+
storeServerAccessLogInfo(request, bucket, raftSessionId);
298301
if (err) {
299302
// still return bucket for cors headers
300303
return callback(err, bucket);
@@ -316,8 +319,8 @@ function standardMetadataValidateBucketAndObj(params, actionImplicitDenies, log,
316319
*/
317320
function standardMetadataValidateBucket(params, actionImplicitDenies, log, callback) {
318321
const { bucketName } = params;
319-
return metadata.getBucket(bucketName, log, (err, bucket) => {
320-
storeServerAccessLogInfo(params.request, params.authInfo, bucket);
322+
return metadata.getBucket(bucketName, log, (err, bucket, raftSessionId) => { // Extract raft session id
323+
storeServerAccessLogInfo(params.request, bucket, raftSessionId);
321324
if (err) {
322325
// if some implicit actionImplicitDenies, return AccessDenied before
323326
// leaking any state information

lib/utilities/serverAccesssLogger.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,7 @@ function logServerAccess(params, req, res) {
306306
loggingTargetBucket: params.loggingEnabled ? params.loggingEnabled.TargetBucket : null,
307307
loggingTargetPrefix: params.loggingEnabled ? params.loggingEnabled.TargetPrefix : null,
308308
awsAccessKeyID: authInfo ? authInfo.getAccessKey() : null,
309-
raftSessionID: null, // TODO
309+
raftSessionID: params.raftSessionID || null,
310310
});
311311
}
312312

0 commit comments

Comments
 (0)