@Override public void getTasksInProgress(TaskServicePb.TasksInProgressRequest req, StreamObserver<TaskServicePb.TasksInProgressResponse> response) { final String startKey = GRPC_HELPER.optional(req.getStartKey()); final int count = GRPC_HELPER.optionalOr(req.getCount(), MAX_TASK_COUNT); try { response.onNext( TaskServicePb.TasksInProgressResponse.newBuilder().addAllTasks( taskService.getTasks(req.getTaskType(), startKey, count) .stream() .map(PROTO_MAPPER::toProto)::iterator ).build() ); response.onCompleted(); } catch (Exception e) { GRPC_HELPER.onError(response, e); } }
@Override public void poll(TaskServicePb.PollRequest req, StreamObserver<TaskServicePb.PollResponse> response) { try { List<Task> tasks = executionService.poll(req.getTaskType(), req.getWorkerId(), GRPC_HELPER.optional(req.getDomain()), 1, POLL_TIMEOUT_MS); if (!tasks.isEmpty()) { TaskPb.Task t = PROTO_MAPPER.toProto(tasks.get(0)); response.onNext(TaskServicePb.PollResponse.newBuilder() .setTask(t) .build() ); } response.onCompleted(); } catch (Exception e) { GRPC_HELPER.onError(response, e); } }
@Override public void batchPoll(TaskServicePb.BatchPollRequest req, StreamObserver<TaskPb.Task> response) { final int count = GRPC_HELPER.optionalOr(req.getCount(), 1); final int timeout = GRPC_HELPER.optionalOr(req.getTimeout(), POLL_TIMEOUT_MS); if (timeout > MAX_POLL_TIMEOUT_MS) { response.onError(Status.INVALID_ARGUMENT .withDescription("longpoll timeout cannot be longer than " + MAX_POLL_TIMEOUT_MS + "ms") .asRuntimeException() ); return; } try { List<Task> polledTasks = taskService.batchPoll(req.getTaskType(), req.getWorkerId(), GRPC_HELPER.optional(req.getDomain()), count, timeout); LOGGER.info("polled tasks: "+polledTasks); polledTasks.stream().map(PROTO_MAPPER::toProto).forEach(response::onNext); response.onCompleted(); } catch (Exception e) { GRPC_HELPER.onError(response, e); } }
@Override public void getWorkflow(MetadataServicePb.GetWorkflowRequest req, StreamObserver<MetadataServicePb.GetWorkflowResponse > response) { try { WorkflowDef workflowDef = service.getWorkflowDef(req.getName(), GRPC_HELPER.optional(req.getVersion())); WorkflowDefPb.WorkflowDef workflow = PROTO_MAPPER.toProto(workflowDef); response.onNext(MetadataServicePb.GetWorkflowResponse.newBuilder() .setWorkflow(workflow) .build() ); response.onCompleted(); } catch (ApplicationException e) { // TODO replace this with gRPC exception interceptor. response.onError(Status.NOT_FOUND .withDescription("No such workflow found by name=" + req.getName()) .asRuntimeException() ); } }
@Override public void startWorkflow(StartWorkflowRequestPb.StartWorkflowRequest pbRequest, StreamObserver<WorkflowServicePb.StartWorkflowResponse> response) { // TODO: better handling of optional 'version' final StartWorkflowRequest request = PROTO_MAPPER.fromProto(pbRequest); try { String id = workflowService.startWorkflow(pbRequest.getName(), GRPC_HELPER.optional(request.getVersion()),request.getCorrelationId(), request.getInput(), request.getExternalInputPayloadStoragePath(), request.getTaskToDomain(), request.getWorkflowDef()); response.onNext(WorkflowServicePb.StartWorkflowResponse.newBuilder() .setWorkflowId(id) .build() ); response.onCompleted(); } catch (ApplicationException ae) { if (ae.getCode().equals(ApplicationException.Code.NOT_FOUND)) { response.onError(Status.NOT_FOUND .withDescription("No such workflow found by name="+request.getName()) .asRuntimeException() ); } else { GRPC_HELPER.onError(response, ae); } } }