in priam/src/main/java/com/netflix/priam/aws/S3FileSystemBase.java [172:213]
private boolean updateLifecycleRule(IConfiguration config, List<Rule> rules, String prefix) {
Optional<Rule> rule = getBucketLifecycleRule(rules, prefix);
// No need to update the rule as it never existed and retention is not set.
if (!rule.isPresent() && config.getBackupRetentionDays() <= 0) return false;
// Rule not required as retention days is zero or negative.
if (rule.isPresent() && config.getBackupRetentionDays() <= 0) {
logger.warn(
"Removing the rule for backup retention on prefix: {} as retention is set to [{}] days. Only positive values are supported by S3!!",
prefix,
config.getBackupRetentionDays());
rules.remove(rule.get());
return true;
}
// Rule present and is current.
if (rule.isPresent()
&& rule.get().getExpirationInDays() == config.getBackupRetentionDays()
&& rule.get().getStatus().equalsIgnoreCase(BucketLifecycleConfiguration.ENABLED)) {
logger.info(
"Cleanup rule already set on prefix: {} with retention period: [{}] days",
prefix,
config.getBackupRetentionDays());
return false;
}
if (!rule.isPresent()) {
// Create a new rule
rule = Optional.of(new BucketLifecycleConfiguration.Rule());
rules.add(rule.get());
}
rule.get().setStatus(BucketLifecycleConfiguration.ENABLED);
rule.get().setExpirationInDays(config.getBackupRetentionDays());
rule.get().setFilter(new LifecycleFilter(new LifecyclePrefixPredicate(prefix)));
rule.get().setId(prefix);
logger.info(
"Setting cleanup rule for prefix: {} with retention period: [{}] days",
prefix,
config.getBackupRetentionDays());
return true;
}