Skip to content

Commit 13bfb61

Browse files
authored
Merge pull request #9008 from nadavMiz/lifecycle-fix-delete-marker-expiration
NC | lifecycle | fix expire-delete-marker issues
2 parents 3eec299 + bd80fa7 commit 13bfb61

File tree

2 files changed

+46
-13
lines changed

2 files changed

+46
-13
lines changed

src/manage_nsfs/nc_lifecycle.js

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,7 @@ class NCLifecycle {
376376
*/
377377
async get_candidates(bucket_json, lifecycle_rule, object_sdk) {
378378
const candidates = { abort_mpu_candidates: [], delete_candidates: [] };
379-
const versions_list = undefined;
379+
const params = {versions_list: undefined};
380380
if (lifecycle_rule.expiration) {
381381
candidates.delete_candidates = await this.get_candidates_by_expiration_rule(lifecycle_rule, bucket_json,
382382
object_sdk);
@@ -385,7 +385,7 @@ class NCLifecycle {
385385
lifecycle_rule,
386386
bucket_json,
387387
object_sdk,
388-
{versions_list}
388+
params
389389
);
390390
candidates.delete_candidates = candidates.delete_candidates.concat(dm_candidates);
391391
}
@@ -395,7 +395,7 @@ class NCLifecycle {
395395
lifecycle_rule,
396396
bucket_json,
397397
object_sdk,
398-
{versions_list}
398+
params
399399
);
400400
candidates.delete_candidates = candidates.delete_candidates.concat(non_current_candidates);
401401
}
@@ -528,12 +528,13 @@ class NCLifecycle {
528528
* @param {Object} bucket_json
529529
* @returns {Promise<Object[]>}
530530
*/
531-
async get_candidates_by_expiration_delete_marker_rule(lifecycle_rule, bucket_json, object_sdk, {versions_list}) {
531+
async get_candidates_by_expiration_delete_marker_rule(lifecycle_rule, bucket_json, object_sdk, params) {
532532
const rule_state = this._get_rule_state(bucket_json, lifecycle_rule).noncurrent;
533-
if (rule_state.is_finished) return [];
534-
if (!versions_list) {
535-
versions_list = await this.load_versions_list(object_sdk, lifecycle_rule, bucket_json, rule_state);
533+
if (!params.versions_list) {
534+
if (rule_state.is_finished) return [];
535+
params.versions_list = await this.load_versions_list(object_sdk, lifecycle_rule, bucket_json, rule_state);
536536
}
537+
const versions_list = params.versions_list;
537538
const candidates = [];
538539
const expiration = lifecycle_rule.expiration?.days ? this._get_expiration_time(lifecycle_rule.expiration) : 0;
539540
const filter_func = this._build_lifecycle_filter({filter: lifecycle_rule.filter, expiration});
@@ -630,13 +631,14 @@ class NCLifecycle {
630631
* @param {Object} bucket_json
631632
* @returns {Promise<Object[]>}
632633
*/
633-
async get_candidates_by_noncurrent_version_expiration_rule(lifecycle_rule, bucket_json, object_sdk, {versions_list}) {
634+
async get_candidates_by_noncurrent_version_expiration_rule(lifecycle_rule, bucket_json, object_sdk, params) {
634635
const rule_state = this._get_rule_state(bucket_json, lifecycle_rule).noncurrent;
635-
if (rule_state.is_finished) return [];
636636

637-
if (!versions_list) {
638-
versions_list = await this.load_versions_list(object_sdk, lifecycle_rule, bucket_json, rule_state);
637+
if (!params.versions_list) {
638+
if (rule_state.is_finished) return [];
639+
params.versions_list = await this.load_versions_list(object_sdk, lifecycle_rule, bucket_json, rule_state);
639640
}
641+
const versions_list = params.versions_list;
640642

641643
const filter_func = this._build_lifecycle_filter({filter: lifecycle_rule.filter, expiration: 0});
642644
const num_newer_versions = lifecycle_rule.noncurrent_version_expiration.newer_noncurrent_versions;
@@ -652,7 +654,6 @@ class NCLifecycle {
652654
}
653655
}
654656
}
655-
656657
return delete_candidates;
657658
}
658659
////////////////////////////////////
@@ -756,8 +757,12 @@ class NCLifecycle {
756757
const expiration_date = new Date(expiration_rule.date).getTime();
757758
if (Date.now() < expiration_date) return -1;
758759
return 0;
760+
} else if (expiration_rule.days) {
761+
return expiration_rule.days;
762+
} else {
763+
//expiration delete marker rule
764+
return -1;
759765
}
760-
return expiration_rule.days;
761766
}
762767

763768
////////////////////////////////

src/test/unit_tests/jest_tests/test_nc_lifecycle_posix_integration.test.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -622,6 +622,34 @@ describe('noobaa nc - lifecycle versioning ENABLED', () => {
622622
});
623623
});
624624

625+
it('nc lifecycle - versioning ENABLED - noncurrent expiration rule - expire older versions by number of days whith expire delete marker rule', async () => {
626+
const lifecycle_rule = [{
627+
"id": "expire noncurrent versions after 3 days with size ",
628+
"status": LIFECYCLE_RULE_STATUS_ENUM.ENABLED,
629+
"filter": {
630+
"prefix": '',
631+
},
632+
"expiration": {
633+
"expired_object_delete_marker": true
634+
},
635+
"noncurrent_version_expiration": {
636+
"noncurrent_days": 3
637+
}
638+
}];
639+
await object_sdk.set_bucket_lifecycle_configuration_rules({ name: test_bucket, rules: lifecycle_rule });
640+
641+
const res = await create_object(object_sdk, test_bucket, test_key1_regular, 100, false);
642+
await create_object(object_sdk, test_bucket, test_key1_regular, 100, false);
643+
await update_version_xattr(test_bucket, test_key1_regular, res.version_id);
644+
645+
await exec_manage_cli(TYPES.LIFECYCLE, '', { disable_service_validation: 'true', disable_runtime_validation: 'true', config_root }, undefined, undefined);
646+
const object_list = await object_sdk.list_object_versions({ bucket: test_bucket });
647+
expect(object_list.objects.length).toBe(1);
648+
object_list.objects.forEach(element => {
649+
expect(element.version_id).not.toBe(res.version_id);
650+
});
651+
});
652+
625653
it('nc lifecycle - versioning ENABLED - noncurrent expiration rule - both noncurrent days and older versions', async () => {
626654
const lifecycle_rule = [{
627655
"id": "expire noncurrent versions after 3 days",

0 commit comments

Comments
 (0)