in spi/src/main/java/org/opensearch/jobscheduler/spi/schedule/CronSchedule.java [111:127]
public Tuple<Instant, Instant> getPeriodStartingAt(Instant startTime) {
long delay = scheduleDelay == null ? 0 : scheduleDelay;
Instant realStartTime;
if (startTime != null) {
realStartTime = startTime;
} else {
Instant now = this.clock.instant();
Optional<ZonedDateTime> lastExecutionTime = this.executionTime.lastExecution(ZonedDateTime.ofInstant(now.minusMillis(delay), this.timezone));
if (!lastExecutionTime.isPresent()) {
return new Tuple<>(now, now);
}
realStartTime = lastExecutionTime.get().toInstant().plusMillis(delay);
}
ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(realStartTime.minusMillis(delay), this.timezone);
ZonedDateTime newEndTime = executionTime.nextExecution(zonedDateTime).orElse(null);
return new Tuple<>(realStartTime, newEndTime == null ? null : newEndTime.toInstant().plusMillis(delay));
}