Skip to content

Commit c7b0461

Browse files
committed
Move code to lifecycle_utils.js and removed ceph-s3 tests
Signed-off-by: Aayush Chouhan <[email protected]>
1 parent 4847f20 commit c7b0461

File tree

7 files changed

+216
-220
lines changed

7 files changed

+216
-220
lines changed

src/endpoint/s3/ops/s3_put_object.js

+8-1
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,14 @@ async function put_object(req, res) {
8080
};
8181
}
8282
res.setHeader('ETag', `"${reply.etag}"`);
83-
await http_utils.set_expiration_header(req, res); // setting expiration header for bucket lifecycle
83+
84+
const object_info = {
85+
key: req.params.key,
86+
create_time: new Date().getTime(),
87+
size: size,
88+
tagging: tagging,
89+
};
90+
await http_utils.set_expiration_header(req, res, object_info); // setting expiration header for bucket lifecycle
8491

8592
if (reply.seq) {
8693
res.seq = reply.seq;

src/manage_nsfs/nc_lifecycle.js

+5-60
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ class NCLifecycle {
271271

272272
if (candidates.delete_candidates?.length > 0) {
273273
const expiration = lifecycle_rule.expiration ? this._get_expiration_time(lifecycle_rule.expiration) : 0;
274-
const filter_func = this._build_lifecycle_filter({filter: lifecycle_rule.filter, expiration});
274+
const filter_func = lifecycle_utils.build_lifecycle_filter({filter: lifecycle_rule.filter, expiration});
275275
dbg.log0('process_rule: calling delete_multiple_objects, num of objects to be deleted', candidates.delete_candidates.length);
276276
const delete_res = await this._call_op_and_update_status({
277277
bucket_name,
@@ -478,7 +478,7 @@ class NCLifecycle {
478478
if (rule_state.is_finished) return [];
479479
const expiration = this._get_expiration_time(lifecycle_rule.expiration);
480480
if (expiration < 0) return [];
481-
const filter_func = this._build_lifecycle_filter({filter: lifecycle_rule.filter, expiration});
481+
const filter_func = lifecycle_utils.build_lifecycle_filter({filter: lifecycle_rule.filter, expiration});
482482

483483
const filtered_objects = [];
484484
// TODO list_objects does not accept a filter and works in batch sizes of 1000. should handle batching
@@ -537,7 +537,7 @@ class NCLifecycle {
537537
const versions_list = params.versions_list;
538538
const candidates = [];
539539
const expiration = lifecycle_rule.expiration?.days ? this._get_expiration_time(lifecycle_rule.expiration) : 0;
540-
const filter_func = this._build_lifecycle_filter({filter: lifecycle_rule.filter, expiration});
540+
const filter_func = lifecycle_utils.build_lifecycle_filter({filter: lifecycle_rule.filter, expiration});
541541
for (let i = 0; i < versions_list.objects.length - 1; i++) {
542542
if (this.filter_expired_delete_marker(versions_list.objects[i], versions_list.objects[i + 1], filter_func)) {
543543
candidates.push(versions_list.objects[i]);
@@ -640,7 +640,7 @@ class NCLifecycle {
640640
}
641641
const versions_list = params.versions_list;
642642

643-
const filter_func = this._build_lifecycle_filter({filter: lifecycle_rule.filter, expiration: 0});
643+
const filter_func = lifecycle_utils.build_lifecycle_filter({filter: lifecycle_rule.filter, expiration: 0});
644644
const num_newer_versions = lifecycle_rule.noncurrent_version_expiration.newer_noncurrent_versions;
645645
const num_non_current_days = lifecycle_rule.noncurrent_version_expiration.noncurrent_days;
646646
const delete_candidates = [];
@@ -674,7 +674,7 @@ class NCLifecycle {
674674
const expiration = lifecycle_rule.abort_incomplete_multipart_upload.days_after_initiation;
675675
const res = [];
676676

677-
const filter_func = this._build_lifecycle_filter({filter, expiration});
677+
const filter_func = lifecycle_utils.build_lifecycle_filter({filter, expiration});
678678
let dir_handle;
679679
//TODO this is almost identical to list_uploads except for error handling and support for pagination. should modify list-upload and use it in here instead
680680
try {
@@ -720,29 +720,6 @@ class NCLifecycle {
720720
///////// FILTER HELPERS ////////
721721
////////////////////////////////////
722722

723-
/**
724-
* @typedef {{
725-
* filter: Object
726-
* expiration: Number
727-
* }} filter_params
728-
*
729-
* @param {filter_params} params
730-
* @returns
731-
*/
732-
_build_lifecycle_filter(params) {
733-
/**
734-
* @param {Object} object_info
735-
*/
736-
return function(object_info) {
737-
if (params.filter?.prefix && !object_info.key.startsWith(params.filter.prefix)) return false;
738-
if (params.expiration && object_info.age < params.expiration) return false;
739-
if (params.filter?.tags && !_file_contain_tags(object_info, params.filter.tags)) return false;
740-
if (params.filter?.object_size_greater_than && object_info.size < params.filter.object_size_greater_than) return false;
741-
if (params.filter?.object_size_less_than && object_info.size > params.filter.object_size_less_than) return false;
742-
return true;
743-
};
744-
}
745-
746723
/**
747724
* get the expiration time in days of an object
748725
* if rule is set with date, then rule is applied for all objects after that date
@@ -1468,38 +1445,6 @@ class NCLifecycle {
14681445
}
14691446
}
14701447

1471-
//////////////////
1472-
// TAGS HELPERS //
1473-
//////////////////
1474-
1475-
/**
1476-
* checks if tag query_tag is in the list tag_set
1477-
* @param {Object} query_tag
1478-
* @param {Array<Object>} tag_set
1479-
*/
1480-
function _list_contain_tag(query_tag, tag_set) {
1481-
for (const t of tag_set) {
1482-
if (t.key === query_tag.key && t.value === query_tag.value) return true;
1483-
}
1484-
return false;
1485-
}
1486-
1487-
/**
1488-
* checks if object has all the tags in filter_tags
1489-
* @param {Object} object_info
1490-
* @param {Array<Object>} filter_tags
1491-
* @returns
1492-
*/
1493-
function _file_contain_tags(object_info, filter_tags) {
1494-
if (object_info.tags === undefined) return false;
1495-
for (const tag of filter_tags) {
1496-
if (!_list_contain_tag(tag, object_info.tags)) {
1497-
return false;
1498-
}
1499-
}
1500-
return true;
1501-
}
1502-
15031448
// EXPORTS
15041449
exports.NCLifecycle = NCLifecycle;
15051450
exports.ILM_POLICIES_TMP_DIR = ILM_POLICIES_TMP_DIR;

src/test/system_tests/ceph_s3_tests/s3-tests-lists/nsfs_s3_tests_black_list.txt

+3
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,9 @@ s3tests_boto3/functional/test_s3.py::test_lifecycle_expiration_tags2
363363
s3tests_boto3/functional/test_s3.py::test_lifecycle_expiration_versioned_tags2
364364
s3tests_boto3/functional/test_s3.py::test_lifecycle_expiration_noncur_tags1
365365
s3tests_boto3/functional/test_s3.py::test_lifecycle_set_date
366+
s3tests_boto3/functional/test_s3.py::test_lifecycle_expiration_header_put
367+
s3tests_boto3/functional/test_s3.py::test_lifecycle_expiration_header_head
368+
s3tests_boto3/functional/test_s3.py::test_lifecycle_expiration_header_tags_head
366369
s3tests_boto3/functional/test_s3.py::test_lifecycle_transition_set_invalid_date
367370
s3tests_boto3/functional/test_s3.py::test_lifecycle_expiration_newer_noncurrent
368371
s3tests_boto3/functional/test_s3.py::test_lifecycle_expiration_size_gt

src/test/system_tests/ceph_s3_tests/s3-tests-lists/s3_tests_pending_list.txt

+3
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ s3tests_boto3/functional/test_s3.py::test_lifecycle_expiration_tags2
3535
s3tests_boto3/functional/test_s3.py::test_lifecycle_expiration_versioned_tags2
3636
s3tests_boto3/functional/test_s3.py::test_lifecycle_expiration_noncur_tags1
3737
s3tests_boto3/functional/test_s3.py::test_lifecycle_set_date
38+
s3tests_boto3/functional/test_s3.py::test_lifecycle_expiration_header_put
39+
s3tests_boto3/functional/test_s3.py::test_lifecycle_expiration_header_head
40+
s3tests_boto3/functional/test_s3.py::test_lifecycle_expiration_header_tags_head
3841
s3tests_boto3/functional/test_s3.py::test_lifecycle_transition_set_invalid_date
3942
s3tests_boto3/functional/test_s3.py::test_put_obj_enc_conflict_c_s3
4043
s3tests_boto3/functional/test_s3.py::test_put_obj_enc_conflict_c_kms

0 commit comments

Comments
 (0)