in src/main/java/com/amazonaws/services/simpleworkflow/flow/worker/AsyncDecisionTaskHandler.java [103:131]
public HandleDecisionTaskResults handleDecisionTask(Iterator<PollForDecisionTaskResponse> decisionTaskIterator) throws Exception {
HistoryHelper historyHelper = new HistoryHelper(decisionTaskIterator);
AsyncDecider decider = createDecider(historyHelper);
decider.decide();
// The workflow context data of history helper might be updated when making decisions, so
// let's get the latest history helper.
historyHelper = decider.getHistoryHelper();
DecisionsHelper decisionsHelper = decider.getDecisionsHelper();
Collection<Decision> decisions = decisionsHelper.getDecisions();
PollForDecisionTaskResponse decisionTask = historyHelper.getDecisionTask();
if (log.isDebugEnabled()) {
log.debug("WorkflowTask taskId=" + decisionTask.startedEventId() + ", taskToken=" + decisionTask.taskToken()
+ " completed with " + decisions.size() + " new decisions");
}
if (decisions.size() == 0 && asyncThreadDumpLog.isTraceEnabled()) {
asyncThreadDumpLog.trace("Empty decision list with the following waiting tasks:\n"
+ decider.getAsynchronousThreadDumpAsString());
}
RespondDecisionTaskCompletedRequest.Builder completedRequestBuilder = RespondDecisionTaskCompletedRequest.builder();
completedRequestBuilder.taskToken(decisionTask.taskToken()).decisions(decisions);
String contextData = decisionsHelper.getWorkflowContextDataToReturn();
ComponentVersions componentVersions = historyHelper.getComponentVersions();
Map<String, Integer> versionsToSave = componentVersions.getVersionsToSave();
String executionContext = getExecutionContext(contextData, versionsToSave);
if (historyHelper.getWorkflowContextData() == null || !historyHelper.getWorkflowContextData().equals(executionContext)) {
completedRequestBuilder.executionContext(executionContext);
}
return new HandleDecisionTaskResults(completedRequestBuilder.build(), decider);
}