Skip to content

Commit fdee59b

Browse files
author
Naren
committed
Merge remote-tracking branch 'origin/development/8.4' into HEAD
2 parents 7f084be + d16a16c commit fdee59b

File tree

3 files changed

+59
-2
lines changed

3 files changed

+59
-2
lines changed

extensions/lifecycle/tasks/LifecycleTask.js

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -635,6 +635,13 @@ class LifecycleTask extends BackbeatTask {
635635
return true;
636636
}
637637
}
638+
639+
if (rule.NoncurrentVersionTransitions && rule.NoncurrentVersionTransitions.length > 0
640+
&& this._supportedrules.includes('noncurrentVersionTransition')) {
641+
return rule.noncurrentVersionTransitions.some(t =>
642+
(t.NoncurrentDays !== undefined && daysSinceInitiated >= t.NoncurrentDays));
643+
}
644+
638645
return false;
639646
}
640647

@@ -887,6 +894,37 @@ class LifecycleTask extends BackbeatTask {
887894
});
888895
}
889896

897+
/**
898+
* Helper method for NoncurrentVersionTransition.NoncurrentDays rule
899+
* Check if Noncurrent Transition rule applies on the version
900+
* @param {object} bucketData - bucket data
901+
* @param {object} version - single non-current version
902+
* @param {string} version.LastModified - last modified date of version
903+
* @param {object} rules - most applicable rules from `_getApplicableRules`
904+
* @param {Logger.newRequestLogger} log - logger object
905+
* @return {undefined}
906+
*/
907+
_checkAndApplyNCVTransitionRule(bucketData, version, rules, log) {
908+
const staleDate = version.staleDate;
909+
const daysSinceInitiated = this._lifecycleDateTime.findDaysSince(new Date(staleDate));
910+
const ncvt = 'NoncurrentVersionTransition';
911+
const ncd = 'NoncurrentDays';
912+
const doesNCVTransitionRuleApply = (rules[ncvt] &&
913+
rules[ncvt][ncd] !== undefined &&
914+
daysSinceInitiated >= rules[ncvt][ncd]);
915+
if (doesNCVTransitionRuleApply) {
916+
this._applyTransitionRule({
917+
owner: bucketData.target.owner,
918+
accountId: bucketData.target.accountId,
919+
bucket: bucketData.target.bucket,
920+
objectKey: version.Key,
921+
eTag: version.ETag,
922+
lastModified: version.LastModified,
923+
site: rules[ncvt].StorageClass,
924+
}, log);
925+
}
926+
}
927+
890928
/**
891929
* Helper method for Expiration.ExpiredObjectDeleteMarker rule
892930
* Check if ExpiredObjectDeleteMarker rule applies to the `IsLatest` delete
@@ -1133,9 +1171,21 @@ class LifecycleTask extends BackbeatTask {
11331171
return done(errors.InternalError.customizeDescription(errMsg));
11341172
}
11351173

1136-
// TODO: Add support for NoncurrentVersionTransitions.
1137-
this._checkAndApplyNCVExpirationRule(bucketData, version, rules, log);
1174+
if (rules.NoncurrentVersionExpiration) {
1175+
this._checkAndApplyNCVExpirationRule(bucketData, version, rules, log);
1176+
return done();
1177+
}
1178+
1179+
if (rules.NoncurrentVersionTransition) {
1180+
this._checkAndApplyNCVTransitionRule(bucketData, version, rules, log);
1181+
return done();
1182+
}
11381183

1184+
log.debug('no action taken on versioned object', {
1185+
bucket: bucketData.target.bucket,
1186+
key: version.Key,
1187+
versioningStatus,
1188+
});
11391189
return done();
11401190
}
11411191

lib/util/versioning.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
const VID_SEP = require('arsenal').versioning.VersioningConstants
2+
.VersionId.Separator;
3+
4+
module.exports = {
5+
isMasterKey: (key) => !key.includes(VID_SEP),
6+
};

tests/unit/lifecycle/LifecycleTask.spec.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ describe('lifecycle task helper methods', () => {
9797
'noncurrentVersionExpiration',
9898
'abortIncompleteMultipartUpload',
9999
'transitions',
100+
'noncurrentVersionTransitions',
100101
]);
101102
});
102103

0 commit comments

Comments
 (0)