[Feature](Job)STARTS and AT allow setting current_timestamp (#30593)

This commit is contained in:
Calvin Kirs
2024-02-02 14:10:41 +08:00
committed by yiguolei
parent e21c9dca9c
commit 9889683ae3
4 changed files with 45 additions and 16 deletions

View File

@ -82,6 +82,8 @@ public class CreateJobStmt extends DdlStmt {
private final String endsTimeStamp;
private final String comment;
public static final String CURRENT_TIMESTAMP_STRING = "current_timestamp";
private JobExecuteType executeType;
// exclude job name prefix, which is used by inner job
@ -122,7 +124,11 @@ public class CreateJobStmt extends DdlStmt {
TimerDefinition timerDefinition = new TimerDefinition();
if (null != onceJobStartTimestamp) {
timerDefinition.setStartTimeMs(TimeUtils.timeStringToLong(onceJobStartTimestamp));
if (onceJobStartTimestamp.equalsIgnoreCase(CURRENT_TIMESTAMP_STRING)) {
jobExecutionConfiguration.setImmediate(true);
} else {
timerDefinition.setStartTimeMs(TimeUtils.timeStringToLong(onceJobStartTimestamp));
}
}
if (null != interval) {
timerDefinition.setInterval(interval);
@ -139,7 +145,11 @@ public class CreateJobStmt extends DdlStmt {
timerDefinition.setIntervalUnit(intervalUnit);
}
if (null != startsTimeStamp) {
timerDefinition.setStartTimeMs(TimeUtils.timeStringToLong(startsTimeStamp));
if (startsTimeStamp.equalsIgnoreCase(CURRENT_TIMESTAMP_STRING)) {
jobExecutionConfiguration.setImmediate(true);
} else {
timerDefinition.setStartTimeMs(TimeUtils.timeStringToLong(startsTimeStamp));
}
}
if (null != endsTimeStamp) {
timerDefinition.setEndTimeMs(TimeUtils.timeStringToLong(endsTimeStamp));
@ -158,7 +168,6 @@ public class CreateJobStmt extends DdlStmt {
jobExecutionConfiguration,
System.currentTimeMillis(),
executeSql);
//job.checkJobParams();
jobInstance = job;
}

View File

@ -137,8 +137,10 @@ public class JobExecutionConfiguration {
long jobStartTimeMs = timerDefinition.getStartTimeMs();
if (isImmediate()) {
jobStartTimeMs += intervalValue;
if (jobStartTimeMs > endTimeMs) {
return delayTimeSeconds;
}
}
return getExecutionDelaySeconds(startTimeMs, endTimeMs, jobStartTimeMs,
intervalValue, currentTimeMs);
}