private TransferJob applyDefaultRulePerBucket()

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