private boolean updateLifecycleRule()

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;
    }