Liking cljdoc? Tell your friends :D

temporal.workflow

Methods for defining and implementing Temporal workflows

Methods for defining and implementing Temporal workflows
raw docstring

awaitclj

(await pred)
(await duration pred)

Efficiently parks the workflow until 'pred' evaluates to true. Re-evaluates on each state transition

Efficiently parks the workflow until 'pred' evaluates to true.  Re-evaluates on each state transition
sourceraw docstring

default-versionclj

source

defworkflowcljmacro

(defworkflow name params* & body)

Defines a new workflow, similar to defn, expecting a 1-arity parameter list and body. Should evaluate to something serializable, which will become available for temporal.client.core/get-result.

Arguments:

(defworkflow my-workflow
    [{:keys [foo]}]
    ...)

(let [w (create-workflow client my-workflow {:task-queue ::my-task-queue})]
   (start w {:foo "bar"}))
Defines a new workflow, similar to defn, expecting a 1-arity parameter list and body.  Should evaluate to something
serializable, which will become available for [[temporal.client.core/get-result]].

Arguments:

- `args`: Passed from 'params' to [[temporal.client.core/start]] or [[temporal.client.core/signal-with-start]]

```clojure
(defworkflow my-workflow
    [{:keys [foo]}]
    ...)

(let [w (create-workflow client my-workflow {:task-queue ::my-task-queue})]
   (start w {:foo "bar"}))
```
sourceraw docstring

get-infoclj

(get-info)

Return info about the current workflow

Return info about the current workflow
sourceraw docstring

get-versionclj

(get-version change-id min max)

Used to safely perform backwards incompatible changes to workflow definitions

Used to safely perform backwards incompatible changes to workflow definitions
sourceraw docstring

invokeclj

(invoke workflow params)
(invoke workflow params options)

Invokes a 'child workflow' with 'params' from within a workflow context. Returns a promise that when derefed will resolve to the evaluation of the defworkflow once the workflow concludes.

Arguments:

  • workflow: A reference to a symbol registered with defworkflow, called a Child Workflow usually.
  • params: Opaque serializable data that will be passed as arguments to the invoked child workflow
  • options: See below.

options map

ValueDescriptionTypeDefault
:task-queueTask queue to use for child workflow tasksString
:workflow-idWorkflow id to use when startingString
:workflow-id-reuse-policySpecifies server behavior if a completed workflow with the same id existsSee workflow id reuse policy types below
:parent-close-policySpecifies how this workflow reacts to the death of the parent workflowSee parent close policy types below
:workflow-execution-timeoutThe time after which child workflow execution is automatically terminatedDuration10 seconds
:workflow-run-timeoutThe time after which child workflow run is automatically terminatedDuration
:workflow-task-timeoutMaximum execution time of a single workflow taskDuration
:retry-optionsRetryOptions that define how child workflow is retried in case of failuretemporal.common/retry-options
:cron-scheduleA cron schedule stringString
:cancellation-typeIn case of a child workflow cancellation it fails with a CanceledFailureSee cancellation types below
:memoSpecifies additional non-indexed information in result of list workflowString

cancellation types

ValueDescription
:try-cancelInitiate a cancellation request and immediately report cancellation to the parent
:abandonDo not request cancellation of the child workflow
:wait-cancellation-completedWait for child cancellation completion
:wait-cancellation-requestedRequest cancellation of the child and wait for confirmation that the request was received

parent close policy types

ValueDescription
:abandonDo not request cancellation of the child workflow
:request-cancelRequest cancellation of the child and wait for confirmation that the request was received
:terminateTerminate the child workflow

workflow id reuse policy types

ValueDescription
:allow-duplicateAllow starting a child workflow execution using the same workflow id.
:allow-duplicate-failed-onlyAllow starting a child workflow execution using the same workflow id, only when the last execution's final state is one of [terminated, cancelled, timed out, failed]
:reject-duplicateDo not permit re-use of the child workflow id for this workflow.
:terminate-if-runningIf a workflow is running using the same child workflow ID, terminate it and start a new one. If no running child workflow, then the behavior is the same as ALLOW_DUPLICATE
(defworkflow my-workflow
   [ctx {:keys [foo] :as args}]
   ...)

(invoke my-workflow {:foo "bar"} {:start-to-close-timeout (Duration/ofSeconds 3))
Invokes a 'child workflow' with 'params' from within a workflow context.
Returns a promise that when derefed will resolve to the evaluation of the defworkflow once the workflow concludes.

Arguments:

- `workflow`: A reference to a symbol registered with [[defworkflow]], called a Child Workflow usually.
- `params`: Opaque serializable data that will be passed as arguments to the invoked child workflow
- `options`: See below.

#### options map

| Value                       | Description                                                                                | Type         | Default |
| --------------------------- | ------------------------------------------------------------------------------------------ | ------------ | ------- |
| :task-queue                 | Task queue to use for child workflow tasks                                                 | String | |
| :workflow-id                | Workflow id to use when starting                                                           | String | |
| :workflow-id-reuse-policy   | Specifies server behavior if a completed workflow with the same id exists                  | See `workflow id reuse policy types` below | |
| :parent-close-policy        | Specifies how this workflow reacts to the death of the parent workflow                     | See `parent close policy types` below | |
| :workflow-execution-timeout | The time after which child workflow execution is automatically terminated                  | [Duration](https://docs.oracle.com/javase/8/docs/api//java/time/Duration.html) | 10 seconds |
| :workflow-run-timeout       | The time after which child workflow run is automatically terminated                        | [Duration](https://docs.oracle.com/javase/8/docs/api//java/time/Duration.html) | |
| :workflow-task-timeout      | Maximum execution time of a single workflow task                                           | [Duration](https://docs.oracle.com/javase/8/docs/api//java/time/Duration.html) | |
| :retry-options              | RetryOptions that define how child workflow is retried in case of failure                  | [[temporal.common/retry-options]] | |
| :cron-schedule              | A cron schedule string                                                                     | String | |
| :cancellation-type          | In case of a child workflow cancellation it fails with a CanceledFailure                   | See `cancellation types` below | |
| :memo                       | Specifies additional non-indexed information in result of list workflow                    | String | |

#### cancellation types

| Value                        | Description                                                                 |
| -------------------------    | --------------------------------------------------------------------------- |
| :try-cancel                  | Initiate a cancellation request and immediately report cancellation to the parent |
| :abandon                     | Do not request cancellation of the child workflow |
| :wait-cancellation-completed | Wait for child cancellation completion |
| :wait-cancellation-requested | Request cancellation of the child and wait for confirmation that the request was received |

#### parent close policy types

| Value                        | Description                                                                 |
| -------------------------    | --------------------------------------------------------------------------- |
| :abandon                     | Do not request cancellation of the child workflow |
| :request-cancel              | Request cancellation of the child and wait for confirmation that the request was received |
| :terminate                   | Terminate the child workflow |

#### workflow id reuse policy types

| Value                        | Description                                                                 |
| ---------------------------- | --------------------------------------------------------------------------- |
| :allow-duplicate             | Allow starting a child workflow execution using the same workflow id. |
| :allow-duplicate-failed-only | Allow starting a child workflow execution using the same workflow id, only when the last execution's final state is one of [terminated, cancelled, timed out, failed] |
| :reject-duplicate            | Do not permit re-use of the child workflow id for this workflow. |
| :terminate-if-running        | If a workflow is running using the same child workflow ID, terminate it and start a new one. If no running child workflow, then the behavior is the same as ALLOW_DUPLICATE |

```clojure
(defworkflow my-workflow
   [ctx {:keys [foo] :as args}]
   ...)

(invoke my-workflow {:foo "bar"} {:start-to-close-timeout (Duration/ofSeconds 3))
```
sourceraw docstring

register-query-handler!clj

(register-query-handler! f)

Registers a DynamicQueryHandler listener that handles queries sent to the workflow, using temporal.client.core/query.

Use inside a workflow definition with 'f' closing over the workflow state (e.g. atom) and evaluating to results in function of the workflow state and its 'query-type' and 'args' arguments.

Arguments:

  • f: a 2-arity function, expecting 2 arguments, evaluating to something serializable.

f arguments:

  • query-type: keyword
  • args: params value or data structure
(defworkflow stateful-workflow
  [{:keys [init] :as args}]
  (let [state (atom init)]
    (register-query-handler! (fn [query-type args]
                               (when (= query-type :my-query)
                                 (get-in @state [:path :to :answer]))))
    ;; workflow implementation
    ))
Registers a DynamicQueryHandler listener that handles queries sent to the workflow, using [[temporal.client.core/query]].

Use inside a workflow definition with 'f' closing over the workflow state (e.g. atom) and
evaluating to results in function of the workflow state and its 'query-type' and 'args' arguments.

Arguments:
- `f`: a 2-arity function, expecting 2 arguments, evaluating to something serializable.

`f` arguments:
- `query-type`: keyword
- `args`: params value or data structure

```clojure
(defworkflow stateful-workflow
  [{:keys [init] :as args}]
  (let [state (atom init)]
    (register-query-handler! (fn [query-type args]
                               (when (= query-type :my-query)
                                 (get-in @state [:path :to :answer]))))
    ;; workflow implementation
    ))
```
sourceraw docstring

sleepclj

(sleep duration)

Efficiently parks the workflow for 'duration'

Efficiently parks the workflow for 'duration'
sourceraw docstring

cljdoc is a website building & hosting documentation for Clojure/Script libraries

× close