in src/main/java/com/google/gcs/sdrs/service/worker/rule/impl/StsRuleExecutor.java [314:369]
public List<RetentionJob> executeDefaultRule(
RetentionRule globalDefaultRule,
Collection<RetentionRule> defaultRules,
Collection<RetentionRule> datasetRules,
ZonedDateTime scheduledTime,
String projectId) {
List<RetentionJob> defaultRuleJobs = new ArrayList<>();
Map<String, Set<String>> prefixesToExcludeMap = buildDefaultStsJobPrefixMap(datasetRules);
Map<String, RetentionRule> defaultRuleMap = buildDefaultRuleMap(defaultRules);
Set<String> bucketsToProcess = new HashSet<>();
bucketsToProcess.addAll(prefixesToExcludeMap.keySet());
bucketsToProcess.addAll(defaultRuleMap.keySet());
for (String bucketName : bucketsToProcess) {
String fullSourceBucket = ValidationConstants.STORAGE_PREFIX + bucketName;
String destinationBucket = StsUtil.buildDestinationBucketName(bucketName);
List<String> prefixesToExclude = buildPrefixesToExclude(prefixesToExcludeMap, bucketName);
RetentionRule defaultRule = defaultRuleMap.get(bucketName);
if (defaultRule == null) {
// use global default rule if a default rule is not set on a bucket.
defaultRule = globalDefaultRule;
}
if (defaultRule != null) {
TransferJob transferJob =
applyDefaultRulePerBucket(
defaultRule,
scheduledTime,
projectId,
bucketName,
destinationBucket,
prefixesToExclude);
String jobName = null;
if (transferJob != null) {
jobName = transferJob.getName();
}
if (defaultRule.getType() == RetentionRuleType.GLOBAL) {
// Save the job with the actual projectId it is being created for, not the fake global
// projectId that is set on the global default rule. Same for data storage.
defaultRule.setProjectId(projectId);
defaultRule.setDataStorageName(fullSourceBucket);
}
RetentionJob defaultRetentionJob =
buildRetentionJobEntity(
jobName, defaultRule, StsUtil.convertPrefixToString(prefixesToExclude), null);
defaultRuleJobs.add(defaultRetentionJob);
}
}
return defaultRuleJobs;
}