| Safe Haskell | None |
|---|---|
| Language | GHC2024 |
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
- 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
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.
Instances
| AdmissionPolicy ConcurrencyPolicy Source # | |
Defined in Arbiter.Core.Concurrency.Spec Methods | |
| AdmissionPolicy RateLimitPolicy Source # | |
Defined in Arbiter.Core.RateLimit.Spec Methods | |
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.
Instances
| HasConcurrency payload => CollectFor (payload :: Type) ConcurrencyPolicy Source # | |
Defined in Arbiter.Core.Concurrency.Spec Methods | |
| HasRateLimit payload => CollectFor (payload :: Type) RateLimitPolicy Source # | |
Defined in Arbiter.Core.RateLimit.Spec Methods | |
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
| RegistryPolicies ('[] :: [QueueSpec]) p Source # | |
Defined in Arbiter.Core.Admission Methods registryTablePolicies :: [(Text, Set p)]Source # | |
| (CollectFor (SpecPayload spec) p, KnownSymbol (SpecName spec), RegistryPolicies rest p) => RegistryPolicies (spec ': rest) p Source # | |
Defined in Arbiter.Core.Admission Methods registryTablePolicies :: [(Text, Set p)]Source # | |
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.