in src/main/java/com/amazonaws/services/simpleworkflow/flow/worker/LambdaFunctionClientImpl.java [100:136]
public Promise<String> scheduleLambdaFunction(final String name,
final String input, final long timeoutSeconds, final String functionId) {
if (timeoutSeconds < 0) {
throw new IllegalArgumentException("Negative timeoutSeconds: "
+ timeoutSeconds);
}
final OpenRequestInfo<String, String> context = new OpenRequestInfo<String, String>(
name);
ScheduleLambdaFunctionDecisionAttributes.Builder attributesBuilder
= ScheduleLambdaFunctionDecisionAttributes.builder()
.name(name).input(input).id(functionId);
if (timeoutSeconds == 0) {
attributesBuilder.startToCloseTimeout(FlowHelpers
.secondsToDuration(FlowConstants.DEFAULT_LAMBDA_FUNCTION_TIMEOUT));
} else {
attributesBuilder.startToCloseTimeout(FlowHelpers
.secondsToDuration(timeoutSeconds));
}
final ScheduleLambdaFunctionDecisionAttributes attributes = attributesBuilder.build();
String taskName = "functionId=" + attributes.id() + ", timeouts="
+ attributes.startToCloseTimeout();
new ExternalTask() {
@Override
protected ExternalTaskCancellationHandler doExecute(
ExternalTaskCompletionHandle handle) throws Throwable {
decisions.scheduleLambdaFunction(attributes);
context.setCompletionHandle(handle);
scheduledLambdas.put(functionId, context);
return new LambdaFunctionCancellationHandler(functionId);
}
}.setName(taskName);
context.setResultDescription("createTimer " + taskName);
return context.getResult();
}