public List executeUserCommandedRule()

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