in src/main/java/com/google/gcs/sdrs/service/worker/rule/impl/StsRuleExecutor.java [734:776]
private PooledStsJob saveJobPoolAndGetNextJob(
List<TransferJob> transferJobList, String currentTime, RetentionRuleType retentionRuleType) {
PooledStsJob nextAvailableJob = null;
LocalTime targetStartTimeOfDay =
LocalTime.parse(currentTime, DateTimeFormatter.ofPattern("HH:mm:ss"));
if (transferJobList != null && !transferJobList.isEmpty()) {
List<PooledStsJob> pooledStsJobList = new ArrayList<>();
// the list is sorted by timeOfDay in asc order
for (int i = 0; i < transferJobList.size(); i++) {
TransferJob transferJob = transferJobList.get(i);
TimeOfDay timeOfDay = transferJob.getSchedule().getStartTimeOfDay();
PooledStsJob pooledStsJob = new PooledStsJob();
pooledStsJob.setName(transferJob.getName());
pooledStsJob.setProjectId(transferJob.getProjectId());
pooledStsJob.setType(retentionRuleType.toDatabaseRepresentation());
pooledStsJob.setSchedule(StsUtil.timeOfDayToString(timeOfDay));
pooledStsJob.setSourceBucket(
transferJob.getTransferSpec().getGcsDataSource().getBucketName());
pooledStsJob.setSourceProject(transferJob.getProjectId());
pooledStsJob.setStatus(transferJob.getStatus());
pooledStsJob.setTargetBucket(
transferJob.getTransferSpec().getGcsDataSink().getBucketName());
pooledStsJob.setTargetProject(transferJob.getProjectId());
if (StsUtil.convertToLocalTime(timeOfDay).isAfter(targetStartTimeOfDay)
&& nextAvailableJob == null) {
// we found the job at the right scheduled time of day. it won't come here
// after setting nextAvailableJob
nextAvailableJob = pooledStsJob;
}
pooledStsJobList.add(pooledStsJob);
}
stsJobDao.saveOrUpdateBatch(pooledStsJobList);
if (nextAvailableJob == null) {
nextAvailableJob = pooledStsJobList.get(0);
}
}
return nextAvailableJob;
}