public DispatcherResult getSolutionStatus()

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);
        }
    }