Skip to content

Commit 6dd7dc0

Browse files
committed
add support for "Server" and "x-noobaa-available-storage-classes" headers
Signed-off-by: Utkarsh Srivastava <[email protected]> make supported storage classes bucketspace specific Signed-off-by: Utkarsh Srivastava <[email protected]>
1 parent a7069fc commit 6dd7dc0

File tree

4 files changed

+40
-5
lines changed

4 files changed

+40
-5
lines changed

src/endpoint/s3/ops/s3_head_bucket.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
/* Copyright (C) 2016 NooBaa */
22
'use strict';
33

4+
const s3_utils = require("../s3_utils");
5+
46
/**
57
* http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketHEAD.html
68
*/
7-
async function head_bucket(req) {
8-
await req.object_sdk.read_bucket({ name: req.params.bucket });
9-
// only called to check for existence
10-
// no headers or reply needed
9+
async function head_bucket(req, res) {
10+
const bucket_info = await req.object_sdk.read_bucket({ name: req.params.bucket });
11+
s3_utils.set_response_supported_storage_classes(res, bucket_info.supported_storage_classes);
1112
}
1213

1314
module.exports = {

src/endpoint/s3/s3_utils.js

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ const DEFAULT_OBJECT_ACL = Object.freeze({
3636
const XATTR_SORT_SYMBOL = Symbol('XATTR_SORT_SYMBOL');
3737
const base64_regex = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;
3838

39+
const X_NOOBAA_AVAILABLE_STORAGE_CLASSES = 'x-noobaa-available-storage-classes';
40+
3941
/**
4042
* get_default_object_owner returns bucket_owner info if exists
4143
* else it'll return the default owner
@@ -322,6 +324,18 @@ function set_response_object_md(res, object_md) {
322324
}
323325
}
324326

327+
/**
328+
* @param {nb.S3Response} res
329+
* @param {Array<string>} [supported_storage_classes]
330+
*/
331+
function set_response_supported_storage_classes(res, supported_storage_classes) {
332+
if (!supported_storage_classes) {
333+
supported_storage_classes = [STORAGE_CLASS_STANDARD];
334+
}
335+
336+
res.setHeader(X_NOOBAA_AVAILABLE_STORAGE_CLASSES, supported_storage_classes);
337+
}
338+
325339
/**
326340
* @param {nb.S3Request} req
327341
* @returns {nb.StorageClass}
@@ -752,4 +766,4 @@ exports.parse_restore_request_days = parse_restore_request_days;
752766
exports.parse_version_id = parse_version_id;
753767
exports.get_object_owner = get_object_owner;
754768
exports.get_default_object_owner = get_default_object_owner;
755-
769+
exports.set_response_supported_storage_classes = set_response_supported_storage_classes;

src/sdk/bucketspace_fs.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ const { get_umasked_mode, isDirectory, validate_bucket_creation,
2525
entity_enum, translate_error_codes, update_config_file} = require('../util/native_fs_utils');
2626
const NoobaaEvent = require('../manage_nsfs/manage_nsfs_events_utils').NoobaaEvent;
2727
const { anonymous_access_key } = require('./object_sdk');
28+
const s3_utils = require('../endpoint/s3/s3_utils');
2829

2930
const dbg = require('../util/debug_module')(__filename);
3031
const bucket_semaphore = new KeysSemaphore(1);
@@ -153,6 +154,7 @@ class BucketSpaceFS extends BucketSpaceSimpleFS {
153154
id: bucket.owner_account,
154155
email: bucket.bucket_owner
155156
};
157+
bucket.supported_storage_classes = this._supported_storage_class();
156158
if (bucket.s3_policy) {
157159
for (const [s_index, statement] of bucket.s3_policy.Statement.entries()) {
158160
const statement_principal = statement.Principal || statement.NotPrincipal;
@@ -770,6 +772,22 @@ class BucketSpaceFS extends BucketSpaceSimpleFS {
770772
is_nsfs_non_containerized_user_anonymous(token) {
771773
return !token && process.env.NC_NSFS_NO_DB_ENV;
772774
}
775+
776+
/**
777+
* returns a list of storage class supported by this bucketspace
778+
* @returns {Array<string>}
779+
*/
780+
_supported_storage_class() {
781+
const storage_classes = [];
782+
if (!config.DENY_UPLOAD_TO_STORAGE_CLASS_STANDARD) {
783+
storage_classes.push(s3_utils.STORAGE_CLASS_STANDARD);
784+
}
785+
if (config.NSFS_GLACIER_ENABLED) {
786+
storage_classes.push(s3_utils.STORAGE_CLASS_GLACIER);
787+
}
788+
789+
return storage_classes;
790+
}
773791
}
774792

775793
module.exports = BucketSpaceFS;

src/util/http_utils.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,8 @@ async function parse_request_body(req, options) {
318318
}
319319

320320
function send_reply(req, res, reply, options) {
321+
res.setHeader('Server', 'NooBaa');
322+
321323
if (options.reply.type === 'raw') {
322324
// in this case the handler already replied
323325
dbg.log1('HTTP REPLY RAW', req.method, req.originalUrl);

0 commit comments

Comments
 (0)