in src/main/java/com/google/gcs/sdrs/service/worker/rule/impl/StsRuleExecutor.java [456:522]
private TransferJob applyDefaultRulePerBucket(
RetentionRule defaultRule,
ZonedDateTime scheduledTime,
String projectId,
String sourceBucket,
String destinationBucket,
List<String> prefixesToExclude) {
String description =
buildDescription(
defaultRule.getType().toString(),
Arrays.asList(new RetentionRule[] {defaultRule}),
null);
TransferJob transferJob = null;
TransferJob stsPooledJob = null;
logger.info(
String.format(
"Scheduling default STS job for rule %s, projectId: %s, "
+ "description: %s, source: %s, destination: %s",
defaultRule.getId(), projectId, description, sourceBucket, destinationBucket));
try {
stsPooledJob = findPooledJob(projectId, sourceBucket, null, RetentionRuleType.DEFAULT);
RetentionJob existingDefaultRetentionJob =
retentionJobDao.findLatestDefaultJob(ValidationConstants.STORAGE_PREFIX + sourceBucket);
if (stsPooledJob == null && existingDefaultRetentionJob == null) {
if (!StsUtil.IS_STS_JOBPOOL_ONLY) {
transferJob =
StsUtil.createDefaultStsJob(
client,
projectId,
sourceBucket,
destinationBucket,
prefixesToExclude,
description,
scheduledTime,
RetentionValue.convertValue(
RetentionValue.parse(defaultRule.getRetentionValue())));
}
} else {
if (stsPooledJob == null && existingDefaultRetentionJob != null) {
stsPooledJob =
StsUtil.getExistingJob(
client,
existingDefaultRetentionJob.getRetentionRuleProjectId(),
existingDefaultRetentionJob.getName());
if (stsPooledJob == null
|| !stsPooledJob.getStatus().equals(StsUtil.STS_ENABLED_STRING)) {
return null;
}
}
transferJob =
updateDefaultJobIfNeeded(stsPooledJob, defaultRule, prefixesToExclude, description);
}
} catch (IOException e) {
logger.error(
String.format(
"Failed to schedule default STS job for %s/%s. %s",
projectId, sourceBucket, e.getMessage()),
e);
return null;
}
return transferJob;
}