in src/main/java/com/google/gcs/sdrs/service/worker/rule/impl/StsRuleExecutor.java [119:170]
public List<DmRequest> executeUserCommandedRule(
Collection<RetentionRule> userCommandedRules, String projectId) {
List<DmRequest> dmRequests = new ArrayList<>();
// get all rules for a bucket
Map<String, List<RetentionRule>> bucketRuleMap = buildBucketRuleMap(userCommandedRules);
String correlationId = getCorrelationId();
ZonedDateTime zonedDateTimeNow = ZonedDateTime.now(Clock.systemUTC());
for (String bucketName : bucketRuleMap.keySet()) {
List<String> prefixes = new ArrayList<>();
// create prefixes from all user commanded rules for a bucket
for (RetentionRule userCommandedRule : bucketRuleMap.get(bucketName)) {
if (userCommandedRule.getType() != RetentionRuleType.USER) {
logger.warn("Rule type is not user commanded retention.");
continue;
}
String prefix = RetentionUtil.getDatasetPath(userCommandedRule.getDataStorageName());
if (prefix.isEmpty()) {
String message =
String.format(
"The target %s is the root of a bucket. Can not delete a bucket",
userCommandedRule.getDataStorageName());
logger.error(message);
} else {
// create dm request
DmRequest dmRequest = new DmRequest();
dmRequest.setStatus(DatabaseConstants.DM_REQUEST_STATUS_PENDING);
dmRequest.setDataStorageName(userCommandedRule.getDataStorageName());
String dataStroageRoot = userCommandedRule.getDataStorageRoot();
if (dataStroageRoot == null) {
dataStroageRoot = RetentionUtil.getBucketName(userCommandedRule.getDataStorageName());
}
dmRequest.setDataStorageRoot(dataStroageRoot);
dmRequest.setProjectId(userCommandedRule.getProjectId());
dmRequests.add(dmRequest);
prefixes.add(prefix);
}
}
if (prefixes.isEmpty()) {
continue;
}
sendInactiveDatasetNotification(
projectId, bucketName, prefixes, zonedDateTimeNow.toInstant(), correlationId);
}
dmQueueDao.saveOrUpdateBatch(dmRequests);
return dmRequests;
}