| Safe Haskell | None |
|---|---|
| Language | GHC2024 |
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
- prefixedKeyText :: Text -> Text -> Text
- prefixedKeyToJSON :: Text -> Text -> Value
- prefixedKeyParseJSON :: String -> (Text -> Text -> a) -> Value -> Parser a
- splitPrefixedSuffix :: Text -> Text -> Text
- class Ord p => AdmissionPolicy p where
- policyPrefixOf :: p -> Text
- selectNone :: Selector p payload (Maybe key)
- selectBy :: AdmissionPolicy p => (Text -> Text -> key) -> p -> (payload -> Text) -> Selector p payload (Maybe key)
- class CollectFor (payload :: k) p where
- collectFor :: Set p
- class RegistryPolicies (registry :: JobPayloadRegistry) p where
- registryTablePolicies :: [(Text, Set p)]
- registryPolicies :: forall (registry :: JobPayloadRegistry) p. (Ord p, RegistryPolicies registry p) => Set p
- registryPolicyTables :: forall (registry :: JobPayloadRegistry) p. RegistryPolicies registry p => [(Text, Bool)]
- effectivePolicyCol :: Text -> Text -> Text
- excludedAssignment :: Text -> Text
- policyUpsertSQL :: Text -> Text -> [(Text, Text)] -> Text
Keys
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
Instances
| AdmissionPolicy ConcurrencyPolicy Source # | |
Defined in Arbiter.Core.Concurrency.Spec Methods | |
| AdmissionPolicy Policy Source # | |
Defined in Arbiter.Core.RateLimit.Spec Methods Source #policyPrefixOf :: Policy -> 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
| HasConcurrency payload => CollectFor (payload :: Type) ConcurrencyPolicy Source # | |
Defined in Arbiter.Core.Concurrency.Spec Methods | |
| HasRateLimit payload => CollectFor (payload :: Type) Policy Source # | |
Defined in Arbiter.Core.RateLimit.Spec Methods | |
Source #class RegistryPolicies (registry :: JobPayloadRegistry) p where
Each registry table's policies of kind p, in registry order.
Methods
Source #registryTablePolicies :: [(Text, Set p)]
Instances
| RegistryPolicies ('[] :: [QueueSpec]) p Source # | |
Defined in Arbiter.Core.Admission Methods Source #registryTablePolicies :: [(Text, Set p)] | |
| (CollectFor (SpecPayload spec) p, KnownSymbol (SpecName spec), RegistryPolicies rest p) => RegistryPolicies (spec ': rest) p Source # | |
Defined in Arbiter.Core.Admission Methods Source #registryTablePolicies :: [(Text, Set p)] | |
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.