@Override public Event toEvent() { return Event.retryAfter(WorkflowInstance.parseKey(workflowInstance), delayMillis); } }
stateManager.receiveIgnoreClosed(Event.retryAfter(instanceState.workflowInstance(), blocker.get().delay().toMillis()), instanceState.runState().counter());
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); }
private void checkRetry(RunState state) { final WorkflowInstance workflowInstance = state.workflowInstance(); if (state.data().retryCost() < MAX_RETRY_COST) { final Optional<Integer> exitCode = state.data().lastExit(); if (shouldFailFast(exitCode)) { stateManager.receiveIgnoreClosed(Event.stop(workflowInstance)); } else { final long delayMillis; if (isMissingDependency(exitCode)) { delayMillis = Duration.ofMinutes(MISSING_DEPS_RETRY_DELAY_MINUTES).toMillis(); } else { delayMillis = retryUtil.calculateDelay(state.data().consecutiveFailures()).toMillis(); } stateManager.receiveIgnoreClosed(Event.retryAfter(workflowInstance, delayMillis)); } } else { stateManager.receiveIgnoreClosed(Event.stop(workflowInstance)); } }
private Response<Event> injectEvent(AuthContext ac, Event event) { workflowActionAuthorizer.authorizeWorkflowAction(ac, event.workflowInstance().workflowId()); if ("dequeue".equals(EventUtil.name(event))) { // For backwards compatibility return Response.forStatus(eventInjectorHelper( Event.retryAfter(event.workflowInstance(), 0L))).withPayload(event); } else if ("halt".equals(EventUtil.name(event))) { // For backwards compatibility return Response.forStatus(eventInjectorHelper(event)); } else if ("timeout".equals(EventUtil.name(event))) { // This is for manually getting out of a stale state return Response.forStatus(eventInjectorHelper(event)); } else { return Response.forStatus(BAD_REQUEST.withReasonPhrase( "This API for injecting generic events is deprecated, refer to the specific API for the " + "event you want to send to the scheduler")); } }