public QueryWorkflowResponse query()

in src/main/java/com/uber/cadence/internal/testservice/TestWorkflowMutableStateImpl.java [1558:1609]


  public QueryWorkflowResponse query(QueryWorkflowRequest queryRequest) throws TException {
    QueryId queryId = new QueryId(executionId);

    Optional<WorkflowExecutionCloseStatus> optCloseStatus = getCloseStatus();
    if (optCloseStatus.isPresent() && queryRequest.getQueryRejectCondition() != null) {
      WorkflowExecutionCloseStatus closeStatus = optCloseStatus.get();
      boolean rejectNotOpen =
          queryRequest.getQueryRejectCondition() == QueryRejectCondition.NOT_OPEN;
      boolean rejectNotCompletedCleanly =
          queryRequest.getQueryRejectCondition() == QueryRejectCondition.NOT_COMPLETED_CLEANLY
              && closeStatus != WorkflowExecutionCloseStatus.COMPLETED;
      if (rejectNotOpen || rejectNotCompletedCleanly) {
        return new QueryWorkflowResponse()
            .setQueryRejected(new QueryRejected().setCloseStatus(closeStatus));
      }
    }

    CompletableFuture<QueryWorkflowResponse> result = new CompletableFuture<>();
    queries.put(queryId.getQueryId(), result);

    if (queryRequest.getQueryConsistencyLevel() == QueryConsistencyLevel.STRONG) {
      pendingQueries.put(queryId.getQueryId(), queryRequest.getQuery());
    } else {
      PollForDecisionTaskResponse task =
          new PollForDecisionTaskResponse()
              .setTaskToken(queryId.toBytes())
              .setWorkflowExecution(executionId.getExecution())
              .setWorkflowType(startRequest.getWorkflowType())
              .setQuery(queryRequest.getQuery())
              .setWorkflowExecutionTaskList(startRequest.getTaskList());
      TaskListId taskListId =
          new TaskListId(
              queryRequest.getDomain(),
              stickyExecutionAttributes == null
                  ? startRequest.getTaskList().getName()
                  : stickyExecutionAttributes.getWorkerTaskList().getName());
      queryRequests.put(queryId.getQueryId(), task);
      store.sendQueryTask(executionId, taskListId, task);
    }

    try {
      return result.get();
    } catch (InterruptedException e) {
      return new QueryWorkflowResponse();
    } catch (ExecutionException e) {
      Throwable cause = e.getCause();
      if (cause instanceof TException) {
        throw (TException) cause;
      }
      throw new InternalServiceError(Throwables.getStackTraceAsString(cause));
    }
  }