arbiter-core-0.1.0.0
arbiter-core
Safe HaskellNone
LanguageGHC2024

Arbiter.Core.Concurrency.Spec

Description

Per-job concurrency limits. A payload's concurrencyFor describes how to select a pool and key. Static inspection finds all pools that the migration must initialize. Each selected pool supplies the limit.

Synopsis

Core types

Source #data ConcurrencyKey

A resolved concurrency key with a pool prefix and per-key suffix. The stored form is prefix:suffix. The separate prefix supports policy lookup.

Constructors

ConcurrencyKey 

Fields

Source #concurrencyKeyText :: ConcurrencyKey -> Text

The stored key text, prefix:suffix.

Source #data ConcurrencyPolicy

A concurrency pool. At most cpLimit jobs share a key under cpPrefix. The default is seeded. An operator override on the pool takes precedence.

Constructors

ConcurrencyPolicy 

Fields

Source #concurrencyPool :: Text -> Int32 -> ConcurrencyPolicy

A pool named prefix admitting at most limit concurrent jobs per key. The cap is floored at 1. Pause a pool via an override. The prefix must not contain :, the key separator. The migration enforces this.

Selecting a pool per job

Source #class HasConcurrency payload where

A payload's per-job pool selection. Defaults to unbounded. Only capped payloads need an instance.

Minimal complete definition

Nothing

Instances

Instances details
HasConcurrency payload Source # 
Instance details

Defined in Arbiter.Core.Concurrency.Spec

Source #type ConcurrencyFor payload = Selector ConcurrencyPolicy payload (Maybe ConcurrencyKey)

A selective description of the concurrency key for a payload. Evaluation returns the job key. Static inspection returns the reachable pools.

Source #noConcurrency :: ConcurrencyFor payload

This payload is unbounded.

Source #concurrencyBy :: ConcurrencyPolicy -> (payload -> Text) -> ConcurrencyFor payload

Cap by a fixed pool, keyed by a per-job suffix (e.g. a tenant id).

Source #globalConcurrency :: ConcurrencyPolicy -> Text -> ConcurrencyFor payload

Cap by a fixed pool under one shared key (a single global pool).

Source #concurrencyByCase :: (Bounded k, Enum k, Eq k) => (payload -> k) -> (k -> ConcurrencyFor payload) -> ConcurrencyFor payload

Concurrency selectByCase. See selectByCase for the totality requirement on k.

Source #chooseWhen :: (payload -> Bool) -> Selector policy payload a -> Selector policy payload a -> Selector policy payload a

Select between two selectors with a job predicate. Policy collection inspects both branches.

Source #runConcurrencyFor :: payload -> ConcurrencyFor payload -> Maybe ConcurrencyKey

Run a selector against a concrete job to get its key.

Source #collectPolicies :: Ord policy => Selector policy payload a -> Set policy

All policies that a selector can reach across all branches.

Registry reflection

Source #type RegistryConcurrencyPolicies (registry :: JobPayloadRegistry) = RegistryPolicies registry ConcurrencyPolicy

Collect every pool declared across a registry's payloads, by statically inspecting each payload's concurrencyFor. The migration seeds these.

Source #registryConcurrencyPolicies :: forall (registry :: JobPayloadRegistry). RegistryConcurrencyPolicies registry => Set ConcurrencyPolicy

Every distinct pool declared across the registry's payloads.

Source #registryConcurrencyTables :: forall (registry :: JobPayloadRegistry). RegistryConcurrencyPolicies registry => [(Text, Bool)]

Each registry table paired with whether its payload declares any pool.