Skip to content

Commit 1c704a9

Browse files
committed
Merge branch 'improvement/CLDSRV-792' into q/9.2
2 parents 747bfb5 + 2c791e2 commit 1c704a9

File tree

11 files changed

+39
-20
lines changed

11 files changed

+39
-20
lines changed

.github/docker/config.s3c.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363
],
6464
"enableVeeamRoute": false,
6565
"serverAccessLogs": {
66-
"enabled": true,
66+
"mode": "ENABLED",
6767
"outputFile": "/logs/server-access.log"
6868
}
6969
}

.github/docker/docker-compose.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ services:
4646
- S3QUOTA
4747
- QUOTA_ENABLE_INFLIGHTS
4848
- S3_VERSION_ID_ENCODING_TYPE
49-
- S3_ENABLE_SERVER_ACCESS_LOGS=true
49+
- S3_SERVER_ACCESS_LOGS_MODE=ENABLED
5050
env_file:
5151
- creds.env
5252
depends_on:

config.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@
151151
"objectPutRetention": true
152152
},
153153
"serverAccessLogs": {
154-
"enabled": false,
154+
"mode": "DISABLED",
155155
"outputFile": "/logs/server-access.log",
156156
"highWaterMarkBytes": 10485760,
157157
"retryReopenDelayMS": 1000,

lib/Config.js

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -574,9 +574,16 @@ function parseIntegrityChecks(config) {
574574
return integrityChecks;
575575
}
576576

577+
const serverAccessLogsModes = {
578+
DISABLED: 'DISABLED',
579+
LOG_ONLY: 'LOG_ONLY',
580+
ENABLED: 'ENABLED',
581+
};
582+
577583
function parseServerAccessLogs(config) {
584+
const validModes = Object.values(serverAccessLogsModes);
578585
const res = {
579-
enabled: false,
586+
mode: serverAccessLogsModes.DISABLED,
580587
outputFile: '/logs/server-access.log',
581588
highWaterMarkBytes: 10485760,
582589
retryReopenDelayMS: 1000,
@@ -585,7 +592,7 @@ function parseServerAccessLogs(config) {
585592

586593
if (config && config.serverAccessLogs) {
587594
const settings = [
588-
{ key: 'enabled', type: 'boolean' },
595+
{ key: 'mode', type: 'string' },
589596
{ key: 'outputFile', type: 'string' },
590597
{ key: 'highWaterMarkBytes', type: 'number' },
591598
{ key: 'retryReopenDelayMS', type: 'number' },
@@ -599,10 +606,17 @@ function parseServerAccessLogs(config) {
599606
res[setting.key] = config.serverAccessLogs[setting.key];
600607
}
601608
});
609+
610+
if ('mode' in config.serverAccessLogs) {
611+
assert(validModes.includes(config.serverAccessLogs.mode),
612+
`bad config: serverAccessLogs.mode must be one of: ${validModes.join(', ')}`);
613+
}
602614
}
603615

604-
if (process.env.S3_ENABLE_SERVER_ACCESS_LOGS === 'true') {
605-
res.enabled = true;
616+
if (process.env.S3_SERVER_ACCESS_LOGS_MODE) {
617+
assert(validModes.includes(process.env.S3_SERVER_ACCESS_LOGS_MODE),
618+
`bad config: S3_SERVER_ACCESS_LOGS_MODE must be one of: ${validModes.join(', ')}`);
619+
res.mode = process.env.S3_SERVER_ACCESS_LOGS_MODE;
606620
}
607621

608622
return res;
@@ -2171,6 +2185,7 @@ module.exports = {
21712185
locationConstraintAssert,
21722186
ConfigObject: Config,
21732187
config: new Config(),
2188+
serverAccessLogsModes,
21742189
requestsConfigAssert,
21752190
bucketNotifAssert,
21762191
azureGetStorageAccountName,

lib/api/bucketGetLogging.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ const { standardMetadataValidateBucket } = require('../metadata/metadataUtils');
22
const { checkExpectedBucketOwner } = require('./apiUtils/authorization/bucketOwner');
33
const monitoring = require('../utilities/monitoringHandler');
44
const { waterfall } = require('async');
5-
const { config } = require('../Config');
5+
const { config, serverAccessLogsModes } = require('../Config');
66
const { errorInstances } = require('arsenal');
77

88
const BucketLoggingStatusNotFoundBody = '<?xml version="1.0" encoding="UTF-8"?>\n' +
@@ -11,7 +11,7 @@ const BucketLoggingStatusNotFoundBody = '<?xml version="1.0" encoding="UTF-8"?>\
1111
function bucketGetLogging(authInfo, request, log, callback) {
1212
log.debug('processing request', { method: 'bucketGetLogging' });
1313

14-
if (!config.serverAccessLogs || !config.serverAccessLogs.enabled) {
14+
if (!config.serverAccessLogs || config.serverAccessLogs.mode !== serverAccessLogsModes.ENABLED) {
1515
return callback(errorInstances.NotImplemented);
1616
}
1717

lib/api/bucketPutLogging.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ const BucketLoggingStatus = require('arsenal').models.BucketLoggingStatus;
55
const metadata = require('../metadata/wrapper');
66
const monitoring = require('../utilities/monitoringHandler');
77
const { errorInstances } = require('arsenal');
8-
const { config } = require('../Config');
8+
const { config, serverAccessLogsModes } = require('../Config');
99

1010
const ERROR_MSG_SOURCE_TARGET_BUCKET_OWNER_MISMATCH =
1111
'The owner for the bucket to be logged and the target bucket must be the same.';
1212

1313
function bucketPutLogging(authInfo, request, log, callback) {
1414
log.debug('processing request', { method: 'bucketPutLogging' });
1515

16-
if (!config.serverAccessLogs || !config.serverAccessLogs.enabled) {
16+
if (!config.serverAccessLogs || config.serverAccessLogs.mode !== serverAccessLogsModes.ENABLED) {
1717
return callback(errorInstances.NotImplemented);
1818
}
1919

lib/server.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const monitoringClient = require('./utilities/monitoringHandler');
99
const logger = require('./utilities/logger');
1010
const { internalHandlers } = require('./utilities/internalHandlers');
1111
const { clientCheck, healthcheckHandler } = require('./utilities/healthcheckHandler');
12-
const _config = require('./Config').config;
12+
const { config: _config, serverAccessLogsModes } = require('./Config');
1313
const { blacklistedPrefixes } = require('../constants');
1414
const api = require('./api/api');
1515
const dataWrapper = require('./data/wrapper');
@@ -124,7 +124,10 @@ class S3Server {
124124
const requestStartTime = process.hrtime.bigint();
125125

126126
// Skip server access logs for heartbeat and backbeat.
127-
if (_config.serverAccessLogs && _config.serverAccessLogs.enabled && !req.url.startsWith('/_/')) {
127+
const isLoggingEnabled = _config.serverAccessLogs
128+
&& (_config.serverAccessLogs.mode === serverAccessLogsModes.LOG_ONLY
129+
|| _config.serverAccessLogs.mode === serverAccessLogsModes.ENABLED);
130+
if (isLoggingEnabled && !req.url.startsWith('/_/')) {
128131
// eslint-disable-next-line no-param-reassign
129132
req.serverAccessLog = {
130133
enabled: false,
@@ -394,7 +397,8 @@ class S3Server {
394397
}
395398

396399
try {
397-
if (_config.serverAccessLogs.enabled) {
400+
if (_config.serverAccessLogs.mode === serverAccessLogsModes.LOG_ONLY
401+
|| _config.serverAccessLogs.mode === serverAccessLogsModes.ENABLED) {
398402
var serverAccessLogger = new ServerAccessLogger(
399403
_config.serverAccessLogs.outputFile,
400404
_config.serverAccessLogs.highWaterMarkBytes,

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@zenko/cloudserver",
3-
"version": "9.2.3",
3+
"version": "9.2.4",
44
"description": "Zenko CloudServer, an open-source Node.js implementation of a server handling the Amazon S3 protocol",
55
"main": "index.js",
66
"engines": {

tests/functional/config.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
"port": 6379
99
},
1010
"serverAccessLogs": {
11-
"enabled": true,
11+
"mode": "ENABLED",
1212
"outputFile": "/logs/server-access.log"
1313
}
1414
}

tests/unit/api/bucketGetLogging.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ const otherAuthInfo = makeAuthInfo('accessKey2');
1111
const bucketName = 'bucketgetloggingtest';
1212
const targetBucket = 'loggingbucket';
1313
const namespace = 'default';
14-
const { config } = require('../../../lib/Config');
14+
const { config, serverAccessLogsModes } = require('../../../lib/Config');
1515

16-
config.serverAccessLogs.enabled = true;
16+
config.serverAccessLogs.mode = serverAccessLogsModes.ENABLED;
1717

1818
const testBucketPutRequest = {
1919
bucketName,

0 commit comments

Comments
 (0)