@Override public Payload serialize(Request message, Object o) { final ObjectMapper usedMapper = message.parameter("origins").isPresent() ? OBJECT_MAPPER : MAPPER; try { return Payloads.create( ByteString.encodeUtf8(usedMapper.writeValueAsString(o)), "application/json"); } catch (JsonProcessingException e) { throw Throwables.propagate(e); } }
private RunStateDataPayload activeStates(RequestContext requestContext) { final Optional<String> componentOpt = requestContext.request().parameter("component"); final List<RunStateData> runStates = Lists.newArrayList(); try { final Map<WorkflowInstance, RunState> activeStates = componentOpt.isPresent() ? storage.readActiveStates(componentOpt.get()) : storage.readActiveStates(); runStates.addAll( activeStates.values().stream().map(this::runStateToRunStateData).collect(toList())); } catch (IOException e) { throw new RuntimeException(e); } return RunStateDataPayload.create(runStates); }
private BackfillsPayload getBackfills(RequestContext rc) { final Optional<String> componentOpt = rc.request().parameter("component"); final Optional<String> workflowOpt = rc.request().parameter("workflow"); final boolean includeStatuses = rc.request().parameter("status").orElse("false").equals("true"); final boolean showAll = rc.request().parameter("showAll").orElse("false").equals("true");
Request request) { final WorkflowId workflowId = WorkflowId.create(componentId, id); final String offset = request.parameter("offset").orElse(""); final int limit = request.parameter("limit").map(Integer::parseInt).orElse(DEFAULT_PAGE_LIMIT); final String start = request.parameter("start").orElse(""); final String stop = request.parameter("stop").orElse(""); final boolean tail = Boolean.parseBoolean(request.parameter("tail").orElse(""));
private Response<BackfillPayload> getBackfill(RequestContext rc, String id) { final boolean includeStatuses = rc.request().parameter("status").orElse("true").equals("true"); final Optional<Backfill> backfillOpt; try { backfillOpt = storage.backfill(id); } catch (IOException e) { final String message = String.format("Couldn't read backfill %s. ", id); log.warn(message, e); return Response.forStatus(Status.INTERNAL_SERVER_ERROR.withReasonPhrase("Error in internal storage")); } if (!backfillOpt.isPresent()) { return Response.forStatus(Status.NOT_FOUND); } final Backfill backfill = backfillOpt.get(); if (includeStatuses) { final List<RunStateData> statuses = retrieveBackfillStatuses(backfill); return Response.forPayload(BackfillPayload.create( backfill, Optional.of(RunStateDataPayload.create(statuses)))); } else { return Response.forPayload(BackfillPayload.create(backfill, Optional.empty())); } }
private Optional<String> validate(RequestContext rc, BackfillInput input, Workflow workflow) { if (!workflow.configuration().dockerImage().isPresent()) { return Optional.of("Workflow is missing docker image"); } final Collection<String> errors = workflowValidator.validateWorkflow(workflow); if (!errors.isEmpty()) { return Optional.of("Invalid workflow configuration: " + String.join(", ", errors)); } final Schedule schedule = workflow.configuration().schedule(); if (!input.start().isBefore(input.end())) { return Optional.of("start must be before end"); } if (!TimeUtil.isAligned(input.start(), schedule)) { return Optional.of("start parameter not aligned with schedule"); } if (!TimeUtil.isAligned(input.end(), schedule)) { return Optional.of("end parameter not aligned with schedule"); } final boolean allowFuture = Boolean.parseBoolean(rc.request().parameter("allowFuture").orElse("false")); if (!allowFuture && (input.start().isAfter(time.get()) || TimeUtil.previousInstant(input.end(), schedule).isAfter(time.get()))) { return Optional.of("Cannot backfill future partitions"); } return Optional.empty(); }
private Response<WorkflowInstance> retryWorkflowInstanceAfter(AuthContext ac, RequestContext rc, WorkflowInstance workflowInstance) { workflowActionAuthorizer.authorizeWorkflowAction(ac, workflowInstance.workflowId()); final long delay; try { delay = Long.parseLong(rc.request().parameter("delay").orElse("0")); } catch (NumberFormatException e) { return Response.forStatus(BAD_REQUEST.withReasonPhrase( "Delay parameter could not be parsed")); } final Event event = Event.retryAfter(workflowInstance, delay); return Response.forStatus(eventInjectorHelper(event)).withPayload(workflowInstance); }
Boolean.parseBoolean(rc.request().parameter("allowFuture").orElse("false")); if (!allowFuture && instant.isAfter(time.get())) { return Response.forStatus(BAD_REQUEST.withReasonPhrase(