arbiter-core-0.1.0.0
arbiter-core
Safe HaskellNone
LanguageGHC2024

Arbiter.Core.Admission

Description

Shared machinery for per-job admission policies (rate limits and concurrency pools). Both kinds pick a policy and a prefix:suffix key per job via a Selector, seed every policy a registry references, and store policies in a default/override table.

Synopsis

Keys

Source #prefixedKeyText :: Text -> Text -> Text

The stored key text, prefix:suffix.

Source #prefixedKeyToJSON :: Text -> Text -> Value

JSON for a prefix:suffix key.

Source #prefixedKeyParseJSON :: String -> (Text -> Text -> a) -> Value -> Parser a

Parse a prefix:suffix key into a constructor.

Source #splitPrefixedSuffix :: Text -> Text -> Text

Recover the suffix of a stored prefix:suffix key given its prefix.

Policies and selectors

Source #class Ord p => AdmissionPolicy p where

A policy that admits jobs under a named prefix.

Methods

Source #policyPrefixOf :: p -> Text

Source #selectNone :: Selector p payload (Maybe key)

This payload is unrestricted by this policy kind.

Source #selectBy :: AdmissionPolicy p => (Text -> Text -> key) -> p -> (payload -> Text) -> Selector p payload (Maybe key)

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

Registry reflection

Source #class CollectFor (payload :: k) p where

The policies of kind p a single payload's selector can reach. Each feature provides an instance from its HasRateLimit / HasConcurrency selector.

Methods

Source #collectFor :: Set p

Instances

Instances details
HasConcurrency payload => CollectFor (payload :: Type) ConcurrencyPolicy Source # 
Instance details

Defined in Arbiter.Core.Concurrency.Spec

HasRateLimit payload => CollectFor (payload :: Type) Policy Source # 
Instance details

Defined in Arbiter.Core.RateLimit.Spec

Source #class RegistryPolicies (registry :: JobPayloadRegistry) p where

Each registry table's policies of kind p, in registry order.

Instances

Instances details
RegistryPolicies ('[] :: [QueueSpec]) p Source # 
Instance details

Defined in Arbiter.Core.Admission

(CollectFor (SpecPayload spec) p, KnownSymbol (SpecName spec), RegistryPolicies rest p) => RegistryPolicies (spec ': rest) p Source # 
Instance details

Defined in Arbiter.Core.Admission

Source #registryPolicies :: forall (registry :: JobPayloadRegistry) p. (Ord p, RegistryPolicies registry p) => Set p

Every policy of kind p declared across a registry's payloads.

Source #registryPolicyTables :: forall (registry :: JobPayloadRegistry) p. RegistryPolicies registry p => [(Text, Bool)]

Each registry table paired with whether its payload declares any policy of kind p.

SQL fragments

Source #effectivePolicyCol :: Text -> Text -> Text

The effective (override-or-default) column of the policy at alias.

Source #excludedAssignment :: Text -> Text

An ON CONFLICT DO UPDATE SET assignment copying a column from the excluded row.

Source #policyUpsertSQL :: Text -> Text -> [(Text, Text)] -> Text

Upsert a policy row's defaults keyed on prefix_id, preserving operator overrides.