in src/main/java/com/uber/cadence/internal/testservice/TestWorkflowMutableStateImpl.java [1017:1066]
private void startNewCronRun(
RequestContext ctx,
long decisionTaskCompletedId,
String identity,
WorkflowData data,
byte[] lastCompletionResult)
throws InternalServiceError, BadRequestError {
CronDefinition cronDefinition = CronDefinitionBuilder.instanceDefinitionFor(CronType.UNIX);
CronParser parser = new CronParser(cronDefinition);
Cron cron = parser.parse(data.cronSchedule);
Instant i = Instant.ofEpochMilli(store.currentTimeMillis());
ZonedDateTime now = ZonedDateTime.ofInstant(i, ZoneOffset.UTC);
ExecutionTime executionTime = ExecutionTime.forCron(cron);
Optional<Duration> backoff = executionTime.timeToNextExecution(now);
int backoffIntervalSeconds = (int) backoff.get().getSeconds();
if (backoffIntervalSeconds == 0) {
backoff = executionTime.timeToNextExecution(now.plusSeconds(1));
backoffIntervalSeconds = (int) backoff.get().getSeconds() + 1;
}
ContinueAsNewWorkflowExecutionDecisionAttributes continueAsNewAttr =
new ContinueAsNewWorkflowExecutionDecisionAttributes()
.setInput(startRequest.getInput())
.setWorkflowType(startRequest.getWorkflowType())
.setExecutionStartToCloseTimeoutSeconds(
startRequest.getExecutionStartToCloseTimeoutSeconds())
.setTaskStartToCloseTimeoutSeconds(startRequest.getTaskStartToCloseTimeoutSeconds())
.setTaskList(startRequest.getTaskList())
.setBackoffStartIntervalInSeconds(backoffIntervalSeconds)
.setRetryPolicy(startRequest.getRetryPolicy())
.setLastCompletionResult(lastCompletionResult);
workflow.action(Action.CONTINUE_AS_NEW, ctx, continueAsNewAttr, decisionTaskCompletedId);
HistoryEvent event = ctx.getEvents().get(ctx.getEvents().size() - 1);
WorkflowExecutionContinuedAsNewEventAttributes continuedAsNewEventAttributes =
event.getWorkflowExecutionContinuedAsNewEventAttributes();
String runId =
service.continueAsNew(
startRequest,
continuedAsNewEventAttributes,
Optional.empty(),
identity,
getExecutionId(),
parent,
parentChildInitiatedEventId);
continuedAsNewEventAttributes.setNewExecutionRunId(runId);
}