| Safe Haskell | None |
|---|---|
| Language | GHC2024 |
Arbiter.Core.JobTree
Description
Atomic parent-child job trees. Children run first. Their suspended finalizer becomes claimable when no children remain in the main queue. Child results are transient and are deleted when the finalizer is acked. Finalizers must persist any results that need to outlive the tree.
Synopsis
- data JobTree payload
- leaf :: JobWrite payload -> JobTree payload
- rollup :: JobWrite payload -> NonEmpty (JobTree payload) -> JobTree payload
- (<~~) :: JobWrite payload -> NonEmpty (JobWrite payload) -> JobTree payload
- insertJobTree :: forall m payload. (JobPayload payload, MonadArbiter m) => Text -> Text -> JobTree payload -> m (Either Text (NonEmpty (JobRead payload)))
Tree type
A tree of jobs. Leaves are single jobs. Finalizers are parents with children that run immediately while the parent waits for completion.
Smart constructors
Source #rollup :: JobWrite payload -> NonEmpty (JobTree payload) -> JobTree payload
A finalizer running once no child of it is left in the main queue. Nested rollups do not merge on their own. An intermediate finalizer returns the merged value for results to travel upward.
rollup (defaultJob root) ( leaf (defaultJob leaf1) :| [leaf (defaultJob leaf2)] )
Operators
Source #(<~~) :: JobWrite payload -> NonEmpty (JobWrite payload) -> JobTree payload infixr 6
Infix rollup for leaf-only children.
defaultJob reducer <~~ (defaultJob mapper1 :| [defaultJob mapper2])
Interpreter
Source #insertJobTree :: forall m payload. (JobPayload payload, MonadArbiter m) => Text -> Text -> JobTree payload -> m (Either Text (NonEmpty (JobRead payload)))
Arguments
| :: forall m payload. (JobPayload payload, MonadArbiter m) | |
| => Text | PostgreSQL schema name |
| -> Text | Table name |
| -> JobTree payload | |
| -> m (Either Text (NonEmpty (JobRead payload))) |
Insert a JobTree in one transaction, returning every inserted job root-first.
Left on any failure, such as a dedup conflict, with nothing committed.