@@ -635,6 +635,13 @@ class LifecycleTask extends BackbeatTask {
635
635
return true ;
636
636
}
637
637
}
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
+
638
645
return false ;
639
646
}
640
647
@@ -887,6 +894,37 @@ class LifecycleTask extends BackbeatTask {
887
894
} ) ;
888
895
}
889
896
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
+
890
928
/**
891
929
* Helper method for Expiration.ExpiredObjectDeleteMarker rule
892
930
* Check if ExpiredObjectDeleteMarker rule applies to the `IsLatest` delete
@@ -1133,9 +1171,21 @@ class LifecycleTask extends BackbeatTask {
1133
1171
return done ( errors . InternalError . customizeDescription ( errMsg ) ) ;
1134
1172
}
1135
1173
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
+ }
1138
1183
1184
+ log . debug ( 'no action taken on versioned object' , {
1185
+ bucket : bucketData . target . bucket ,
1186
+ key : version . Key ,
1187
+ versioningStatus,
1188
+ } ) ;
1139
1189
return done ( ) ;
1140
1190
}
1141
1191
0 commit comments