arbiter-core-0.1.0.0
arbiter-core
Safe HaskellNone
LanguageGHC2024

Arbiter.Core.Admission

Description

Internal to the arbiter packages. Not covered by the PVP.

Shared machinery for per-job admission policies (rate limits and concurrency limits). 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

prefixedKeyText :: Text -> Text -> TextSource #

The stored key text, prefix:suffix.

prefixedKeyToJSON :: Text -> Text -> ValueSource #

JSON for a prefix:suffix key.

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

Parse a JSON object with prefix and suffix fields into a key constructor.

splitPrefixedSuffix :: Text -> Text -> TextSource #

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

Policies and selectors

class Ord p => AdmissionPolicy p whereSource #

A policy that admits jobs under a named prefix.

Methods

policyPrefixOf :: p -> TextSource #

The prefix the policy's keys start with.

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

This payload is unrestricted by this policy kind.

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

Restrict by a fixed policy, keyed by a per-job suffix, such as a tenant id.

Registry reflection

class CollectFor (payload :: k) p whereSource #

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

Methods

collectFor :: Set pSource #

The policies the payload's selector can reach.

Instances

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

Defined in Arbiter.Core.Concurrency.Spec

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

Defined in Arbiter.Core.RateLimit.Spec

class RegistryPolicies (registry :: JobPayloadRegistry) p whereSource #

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

Methods

registryTablePolicies :: [(Text, Set p)]Source #

Each table name paired with the policies its payload can reach.

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

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

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

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

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

SQL fragments

effectivePolicyCol :: Text -> Text -> TextSource #

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

excludedAssignment :: Text -> TextSource #

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

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

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