in src/main/java/com/google/gcs/sdrs/service/worker/impl/ExecuteRetentionWorker.java [127:181]
private void executePolicyByProject(String projectId) throws IOException, SQLException {
List<RetentionRule> datasetRules = retentionRuleDao.findDatasetRulesByProjectId(projectId);
List<RetentionRule> defaultRules = retentionRuleDao.findDefaultRulesByProjectId(projectId);
RetentionRule globalDefaultRule = retentionRuleDao.findGlobalRuleByProjectId(projectId);
boolean noDatasetRules = false;
boolean noDefaultRules = false;
boolean noGlobalRule = false;
if (datasetRules == null || datasetRules.isEmpty()) {
logger.info(
String.format("No dataset rules configured within SDRS for project %s.", projectId));
noDatasetRules = true;
}
if (defaultRules == null || defaultRules.isEmpty()) {
logger.info(
String.format(
"No default rule configured for any buckets in project %s. Global default rule will apply for all buckets managed by SDRS.",
projectId));
noDefaultRules = true;
}
if (globalDefaultRule == null) {
logger.warn("No global default rule.");
noGlobalRule = true;
}
if (noDatasetRules && noDefaultRules && noGlobalRule) {
logger.info(String.format("No rules configured within SDRS for project %s.", projectId));
return;
}
List<RetentionJob> errorJobs = new ArrayList<>();
List<RetentionJob> retentionJobs = ruleExecutor.executeDatasetRule(datasetRules, projectId);
retentionJobs.addAll(
ruleExecutor.executeDefaultRule(
globalDefaultRule, defaultRules, datasetRules, atMidnight(), projectId));
if (retentionJobs != null) {
for (RetentionJob job : retentionJobs) {
job.setBatchId(getUuid());
if (job.getName() == null) {
errorJobs.add(job);
} else {
retentionJobDao.save(job);
}
}
}
if (!errorJobs.isEmpty()) {
throw new IOException(
String.format(
"Failed to schedule %d retention jobs for policy based execution", errorJobs.size()));
}
}