| Safe Haskell | None |
|---|---|
| Language | GHC2024 |
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
- data ConcurrencyKey = ConcurrencyKey {}
- concurrencyKeyText :: ConcurrencyKey -> Text
- data ConcurrencyPolicy = ConcurrencyPolicy {}
- concurrencyPool :: Text -> Int32 -> ConcurrencyPolicy
- class HasConcurrency payload where
- concurrencyFor :: ConcurrencyFor payload
- type ConcurrencyFor payload = Selector ConcurrencyPolicy payload (Maybe ConcurrencyKey)
- noConcurrency :: ConcurrencyFor payload
- concurrencyBy :: ConcurrencyPolicy -> (payload -> Text) -> ConcurrencyFor payload
- globalConcurrency :: ConcurrencyPolicy -> Text -> ConcurrencyFor payload
- concurrencyByCase :: (Bounded k, Enum k, Eq k) => (payload -> k) -> (k -> ConcurrencyFor payload) -> ConcurrencyFor payload
- chooseWhen :: (payload -> Bool) -> Selector policy payload a -> Selector policy payload a -> Selector policy payload a
- runConcurrencyFor :: payload -> ConcurrencyFor payload -> Maybe ConcurrencyKey
- collectPolicies :: Ord policy => Selector policy payload a -> Set policy
- type RegistryConcurrencyPolicies (registry :: JobPayloadRegistry) = RegistryPolicies registry ConcurrencyPolicy
- registryConcurrencyPolicies :: forall (registry :: JobPayloadRegistry). RegistryConcurrencyPolicies registry => Set ConcurrencyPolicy
- registryConcurrencyTables :: forall (registry :: JobPayloadRegistry). RegistryConcurrencyPolicies registry => [(Text, Bool)]
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 | |
Instances
| FromJSON ConcurrencyKey Source # | |
Defined in Arbiter.Core.Concurrency.Spec Methods #parseJSON :: Value -> Parser ConcurrencyKey #parseJSONList :: Value -> Parser [ConcurrencyKey] | |
| ToJSON ConcurrencyKey Source # | |
Defined in Arbiter.Core.Concurrency.Spec Methods #toJSON :: ConcurrencyKey -> Value #toEncoding :: ConcurrencyKey -> Encoding #toJSONList :: [ConcurrencyKey] -> Value #toEncodingList :: [ConcurrencyKey] -> Encoding #omitField :: ConcurrencyKey -> Bool | |
| Eq ConcurrencyKey Source # | |
Defined in Arbiter.Core.Concurrency.Spec Methods #(==) :: ConcurrencyKey -> ConcurrencyKey -> Bool #(/=) :: ConcurrencyKey -> ConcurrencyKey -> Bool | |
| Show ConcurrencyKey Source # | |
Defined in Arbiter.Core.Concurrency.Spec Methods #showsPrec :: Int -> ConcurrencyKey -> ShowS #show :: ConcurrencyKey -> String #showList :: [ConcurrencyKey] -> ShowS | |
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 | |
Instances
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
Methods
Source #concurrencyFor :: ConcurrencyFor payload
Instances
| HasConcurrency payload Source # | |
Defined in Arbiter.Core.Concurrency.Spec Methods Source #concurrencyFor :: ConcurrencyFor payload | |
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.