private void executePolicyByProject()

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