in prototype/dispatch/order-dispatcher/src/main/java/com/aws/proto/dispatching/api/v2/DispatcherService.java [196:226]
public DispatcherResult getSolutionStatus(UUID problemId) {
// get from in-mem map
SolutionState<DispatchingSolution, UUID> state = this.solutionMap.get(problemId);
// doesn't exist in mem cache
if (state == null) {
logger.debug(":: GetSolutionStatus :: problem not found ({})", problemId);
DispatcherResult assignment = assignmentService.getAssignment(problemId);
return assignment;
}
SolverStatus solverStatus = state.solverJob.getSolverStatus();
if(solverStatus == SolverStatus.NOT_SOLVING) {
logger.info(":: Solution found :: problemId = {} :: returning and persisting result result", problemId);
try {
DispatchingSolution solution = state.solverJob.getFinalBestSolution();
DispatcherResult result = SolutionConsumer.buildResult(solution, solverStatus, false);
logger.trace("Removing problemId {} from solutionMap", problemId);
assignmentService.saveAssignment(SolutionConsumer.buildResult(solution, solverStatus, true));
this.solutionMap.remove(problemId);
return result;
} catch (ExecutionException | InterruptedException e) {
logger.error("Error while retrieving solution", e);
return new DispatcherResult(problemId, state.problem.getExecutionId(), state.problem.getCreatedAt(), solverStatus);
}
} else {
logger.debug(":: Problem still not solved :: problemId = {}", problemId);
return new DispatcherResult(problemId, state.problem.getExecutionId(), state.problem.getCreatedAt(), solverStatus);
}
}