in src/main/java/com/google/gcs/sdrs/util/StsUtil.java [237:290]
public static List<Operation> getStsJobOperations(
Storagetransfer client, String projectId, List<RetentionJob> retentionJobs) {
List<Operation> operations = new ArrayList<>();
Set<String> jobNames = new HashSet<>();
for (RetentionJob job : retentionJobs) {
try {
if (jobNames.contains(job.getName())) {
continue;
} else {
jobNames.add(job.getName());
}
List<String> jobNameList = new ArrayList<>();
jobNameList.add(job.getName());
// All STS jobs are daily run. Get the operations for the past 5 days.
Storagetransfer.TransferOperations.List operationRequest =
client
.transferOperations()
.list(TRANSFER_OPERATION_STRING)
.setFilter(buildOperationFilterString(projectId, jobNameList))
.setPageSize(5);
List<Operation> operationsPerJob = operationRequest.execute().getOperations();
Operation operationClosestToJobCreatedAtTime = null;
Instant closestTime = Instant.MAX;
if (operationsPerJob != null) {
// loop through operations to find the one closest to when the
// job is scheduled.
for (Operation operation : operationsPerJob) {
String opeationStartTimeString = operation.getMetadata().get("startTime").toString();
Instant operationStartTime = Instant.parse(opeationStartTimeString);
Instant retentionJobCreatedAtTime = job.getCreatedAt().toInstant();
if (operationStartTime.isAfter(retentionJobCreatedAtTime)) {
if (operationClosestToJobCreatedAtTime == null
|| operationStartTime.isBefore(closestTime)) {
operationClosestToJobCreatedAtTime = operation;
closestTime = operationStartTime;
}
}
}
}
if (operationClosestToJobCreatedAtTime != null) {
operations.add(operationClosestToJobCreatedAtTime);
}
} catch (IOException ex) {
logger.error("Could not establish connection with STS: ", ex.getMessage());
}
}
return operations;
}