arbiter-core-0.1.0.0
arbiter-core
Safe HaskellNone
LanguageGHC2024

Arbiter.Core.Job.Types

Description

Job records, the enqueue setters, and the lifecycle hook types.

Synopsis

Core job type

type Job payload key q insertedAt adm = JobRecord payload key q insertedAt admSource #

A job parametrized over payload, primary key, queue name, insertion timestamp, and the columns derived from the payload. The constructor is internal.

class HasKind payload whereSource #

A payload's per-job variant label. With no instance, the job is unlabelled. An empty instance on a Generic payload labels it with the constructor name.

Minimal complete definition

Nothing

Methods

kindOf :: payload -> Maybe TextSource #

The label stored for a job.

default kindOf :: (GKind (Rep payload), Generic payload) => payload -> Maybe TextSource #

kindsFor :: [Text]Source #

Every label kindOf can return. Empty when the set is not known.

default kindsFor :: GKind (Rep payload) => [Text]Source #

Instances

Instances details
HasKind payload Source # 
Instance details

Defined in Arbiter.Core.Job.Kind

Methods

kindOf :: payload -> Maybe TextSource #

kindsFor :: [Text]Source #

constructorKind :: (GKind (Rep a), Generic a) => a -> TextSource #

A value's constructor name, for a payload that wraps a sum. Requires Generic.

instance HasKind Envelope where
  kindOf = Just . constructorKind . envelopePayload
  kindsFor = constructorKinds @EmailPayload

constructorKinds :: GKind (Rep a) => [Text]Source #

Every constructor name of a type, in declaration order.

data PayloadKeysSource #

The labels and keys a stored job carries from its payload, one field each.

Constructors

PayloadKeys 

Fields

Instances

Instances details
Eq PayloadKeys Source # 
Instance details

Defined in Arbiter.Core.Job.Types

Generic PayloadKeys Source # 
Instance details

Defined in Arbiter.Core.Job.Types

Associated Types

type Rep PayloadKeys 
Instance details

Defined in Arbiter.Core.Job.Types

type Rep PayloadKeys = D1 ('MetaData "PayloadKeys" "Arbiter.Core.Job.Types" "arbiter-core-0.1.0.0-inplace" 'False) (C1 ('MetaCons "PayloadKeys" 'PrefixI 'True) (S1 ('MetaSel ('Just "jobKind") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Text)) :*: (S1 ('MetaSel ('Just "jobRateLimitKey") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe RateLimitKey)) :*: S1 ('MetaSel ('Just "jobConcurrencyKey") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe ConcurrencyKey)))))
Show PayloadKeys Source # 
Instance details

Defined in Arbiter.Core.Job.Types

FromJSON payload => FromJSON (JobRead payload) Source #

Decode the complete persisted representation of a job.

Instance details

Defined in Arbiter.Core.Job.Types

Methods

parseJSON :: Value -> Parser (JobRead payload)#

parseJSONList :: Value -> Parser [JobRead payload]#

omittedField :: Maybe (JobRead payload)#

ToJSON payload => ToJSON (JobRead payload) Source # 
Instance details

Defined in Arbiter.Core.Job.Types

Methods

toJSON :: JobRead payload -> Value#

toEncoding :: JobRead payload -> Encoding#

toJSONList :: [JobRead payload] -> Value#

toEncodingList :: [JobRead payload] -> Encoding#

omitField :: JobRead payload -> Bool#

type Rep PayloadKeys Source # 
Instance details

Defined in Arbiter.Core.Job.Types

type Rep PayloadKeys = D1 ('MetaData "PayloadKeys" "Arbiter.Core.Job.Types" "arbiter-core-0.1.0.0-inplace" 'False) (C1 ('MetaCons "PayloadKeys" 'PrefixI 'True) (S1 ('MetaSel ('Just "jobKind") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Text)) :*: (S1 ('MetaSel ('Just "jobRateLimitKey") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe RateLimitKey)) :*: S1 ('MetaSel ('Just "jobConcurrencyKey") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe ConcurrencyKey)))))

type JobRead payload = Job payload Int64 Text UTCTime PayloadKeysSource #

A job read from the database.

jobReadPairs :: ToJSON payload => JobRead payload -> [Pair]Source #

A job's JSON fields as key-value pairs.

jobReadSeries :: ToJSON payload => JobRead payload -> SeriesSource #

A job's JSON fields as an encoding series.

data Stored payloadSource #

A payload as the JSON bytes the database holds. The type it decodes to is a phantom.

Instances

Instances details
FromJSON (Stored payload) Source # 
Instance details

Defined in Arbiter.Core.Job.Types.Internal

Methods

parseJSON :: Value -> Parser (Stored payload)#

parseJSONList :: Value -> Parser [Stored payload]#

omittedField :: Maybe (Stored payload)#

ToJSON (Stored payload) Source #

The bytes are emitted as they are. toJSON has to parse them back.

Instance details

Defined in Arbiter.Core.Job.Types.Internal

Methods

toJSON :: Stored payload -> Value#

toEncoding :: Stored payload -> Encoding#

toJSONList :: [Stored payload] -> Value#

toEncodingList :: [Stored payload] -> Encoding#

omitField :: Stored payload -> Bool#

Eq (Stored payload) Source # 
Instance details

Defined in Arbiter.Core.Job.Types.Internal

Methods

(==) :: Stored payload -> Stored payload -> Bool#

(/=) :: Stored payload -> Stored payload -> Bool#

Show (Stored payload) Source # 
Instance details

Defined in Arbiter.Core.Job.Types.Internal

Methods

showsPrec :: Int -> Stored payload -> ShowS#

show :: Stored payload -> String#

showList :: [Stored payload] -> ShowS#

storedBytes :: Stored payload -> ByteStringSource #

The JSON bytes of a stored payload.

toStored :: ToJSON payload => payload -> Stored payloadSource #

A payload's stored form.

decodeStored :: FromJSON payload => Stored payload -> Either Text payloadSource #

Decode a stored payload, or the reason the type rejects it.

type JobWrite payload = Job payload () () () ()Source #

A job ready to enqueue. Arbiter owns claim, retry, parent, rollup, and suspension state. Use the exported setters to configure enqueue fields.

type JobId = Int64Source #

A job's primary key.

type ClaimSeq = Int64Source #

The token identifying one claim of a job.

primaryKey :: Job payload key q insertedAt adm -> keySource #

Database-assigned identifier for a stored job.

payload :: Job payload key q insertedAt adm -> payloadSource #

User-defined payload stored as JSONB.

queueName :: Job payload key q insertedAt adm -> qSource #

Queue containing a stored job.

groupKey :: Job payload key q insertedAt adm -> Maybe TextSource #

Serial-processing group, or Nothing for an ungrouped job.

insertedAt :: Job payload key q insertedAt adm -> insertedAtSource #

Time at which the job was inserted.

updatedAt :: Job payload Int64 q insertedAt adm -> Maybe UTCTimeSource #

Time at which the job was last updated.

attempts :: Job payload Int64 q insertedAt adm -> Int32Source #

Number of attempts made so far.

lastError :: Job payload Int64 q insertedAt adm -> Maybe TextSource #

Error message from the last failed attempt.

priority :: Job payload key q insertedAt adm -> Int32Source #

Claim priority. Lower numbers have higher priority. In a group, a retried job goes first.

lastAttemptedAt :: Job payload Int64 q insertedAt adm -> Maybe UTCTimeSource #

Time at which a worker last claimed the job.

notVisibleUntil :: Job payload key q insertedAt adm -> Maybe UTCTimeSource #

Earliest time at which the job can be claimed.

dedupKey :: Job payload key q insertedAt adm -> Maybe DedupKeySource #

Deduplication strategy and key.

maxAttempts :: Job payload key q insertedAt adm -> Maybe Int32Source #

Attempt limit before the job moves to the DLQ.

parentId :: Job payload Int64 q insertedAt adm -> Maybe Int64Source #

Identifier of this job's parent in a job tree.

parentState :: Job payload Int64 q insertedAt adm -> Maybe ValueSource #

Snapshot of accumulated child results for a rollup finalizer.

traceContext :: Job payload key q insertedAt adm -> Maybe TraceContextSource #

W3C trace context captured at enqueue.

suspended :: Job payload Int64 q insertedAt adm -> BoolSource #

Whether the job is suspended. It stays unclaimable until resumed.

claimedBy :: Job payload Int64 q insertedAt adm -> Maybe UUIDSource #

Holder of the outstanding claim. Nothing when no claim is outstanding.

claimSeq :: Job payload Int64 q insertedAt adm -> Int64Source #

The claim token.

archiveFor :: Job payload key q insertedAt adm -> Maybe Int32Source #

Completed-job archive retention in seconds.

payloadKeys :: Job payload key q insertedAt adm -> admSource #

The labels and keys stamped from the payload at enqueue.

defaultJob :: payload -> JobWrite payloadSource #

Ungrouped JobWrite with default values. For serial processing within a group, use defaultGroupedJob.

defaultGroupedJob :: Text -> payload -> JobWrite payloadSource #

defaultJob with a group key. Jobs sharing a group key are processed serially.

setPayload :: payload' -> JobWrite payload -> JobWrite payload'Source #

Replace the payload.

setGroupKey :: Maybe Text -> JobWrite payload -> JobWrite payloadSource #

Set the group key.

setPriority :: Int32 -> JobWrite payload -> JobWrite payloadSource #

Set the claim priority. Lower numbers claim first. In a group, a retried job goes first.

setNotVisibleUntil :: Maybe UTCTime -> JobWrite payload -> JobWrite payloadSource #

Delay the job's first visibility.

setDedupKey :: Maybe DedupKey -> JobWrite payload -> JobWrite payloadSource #

Set the dedup key.

setMaxAttempts :: Maybe Int32 -> JobWrite payload -> JobWrite payloadSource #

Set the attempt limit. Nothing takes defaultMaxAttempts. Values below minMaxAttempts are raised to it.

setTraceContext :: Maybe TraceContext -> JobWrite payload -> JobWrite payloadSource #

Attach a trace context.

setArchiveFor :: Maybe Int32 -> JobWrite payload -> JobWrite payloadSource #

Set the archive retention, in seconds.

mapPayload :: (payload -> payload') -> Job payload key q insertedAt adm -> Job payload' key q insertedAt admSource #

Transform a job's payload without changing its stored metadata.

defaultMaxAttempts :: Int32Source #

Default attempt limit stamped onto jobs whose maxAttempts is unset.

minMaxAttempts :: Int32Source #

Lowest attempt limit a job is stamped with. Every job gets at least one attempt.

dayRetention :: Int32Source #

24h in seconds, a convenience value for setArchiveFor.

isRollup :: Job p Int64 q t adm -> BoolSource #

A rollup finalizer is any job whose parentState snapshot is present (an empty object from its insert or spawn, the merged child results before a DLQ move).

Derived status

data JobStatusSource #

Effective job status. Arbiter derives status from the stored fields. The status SQL in Arbiter.Core.Sql.Jobs is its source of truth.

Constructors

Ready

Visible, with attempts left. It can still wait behind its group head or a full concurrency or rate-limit key.

InFlight

Claimed by a worker, with the lease still running.

Backoff

Unclaimed with an attempt used, waiting out a delay. A nacked retry is here.

Scheduled

No attempt used, delayed to a future time. A nacked first attempt is here.

Suspended

Not claimable until resumed, such as a rollup finalizer with children.

Throttled

Held by a rate limit until tokens refill.

Cancelled

Force-cancel-flagged, waiting for teardown.

Exhausted

Visible but out of attempts, waiting for the reaper's DLQ sweep.

Instances

Instances details
FromJSON JobStatus Source # 
Instance details

Defined in Arbiter.Core.Job.Status

ToJSON JobStatus Source # 
Instance details

Defined in Arbiter.Core.Job.Status

Eq JobStatus Source # 
Instance details

Defined in Arbiter.Core.Job.Status

Bounded JobStatus Source # 
Instance details

Defined in Arbiter.Core.Job.Status

Enum JobStatus Source # 
Instance details

Defined in Arbiter.Core.Job.Status

Generic JobStatus Source # 
Instance details

Defined in Arbiter.Core.Job.Status

Associated Types

type Rep JobStatus 
Instance details

Defined in Arbiter.Core.Job.Status

type Rep JobStatus = D1 ('MetaData "JobStatus" "Arbiter.Core.Job.Status" "arbiter-core-0.1.0.0-inplace" 'False) (((C1 ('MetaCons "Ready" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "InFlight" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "Backoff" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Scheduled" 'PrefixI 'False) (U1 :: Type -> Type))) :+: ((C1 ('MetaCons "Suspended" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Throttled" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "Cancelled" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Exhausted" 'PrefixI 'False) (U1 :: Type -> Type))))
Show JobStatus Source # 
Instance details

Defined in Arbiter.Core.Job.Status

type Rep JobStatus Source # 
Instance details

Defined in Arbiter.Core.Job.Status

type Rep JobStatus = D1 ('MetaData "JobStatus" "Arbiter.Core.Job.Status" "arbiter-core-0.1.0.0-inplace" 'False) (((C1 ('MetaCons "Ready" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "InFlight" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "Backoff" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Scheduled" 'PrefixI 'False) (U1 :: Type -> Type))) :+: ((C1 ('MetaCons "Suspended" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Throttled" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "Cancelled" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Exhausted" 'PrefixI 'False) (U1 :: Type -> Type))))

jobStatusToText :: JobStatus -> TextSource #

The wire name for a status.

jobStatusFromText :: Text -> Either Text JobStatusSource #

Strict inverse of jobStatusToText. Unknown values are rejected.

Type constraints

type JobPayload payload = (FromJSON payload, ToJSON payload, HasKind payload, HasRateLimit payload, HasConcurrency payload)Source #

The full payload contract. JSON round-trip for JSONB storage plus the kind, rate-limit and concurrency declarations. All three default to none.

type RegistryAdmissionPolicies (registry :: JobPayloadRegistry) = (RegistryConcurrencyPolicies registry, RegistryRateLimitPolicies registry)Source #

The constraint that lets the migration collect a registry's declared policies of both kinds.

Deduplication

data DedupKeySource #

Deduplication strategy, checked on INSERT via ON CONFLICT on the dedup key.

Constructors

IgnoreDuplicate Text

Skip if the main queue table holds a job with this key (DO NOTHING). DLQ and archive rows do not conflict.

ReplaceDuplicate Text

Replace the main queue table's job with this key (DO UPDATE), unless it is in flight (claimed under a live lease), force-cancel-flagged, has a different parent, or has children. Children in the DLQ count.

Instances

Instances details
FromJSON DedupKey Source # 
Instance details

Defined in Arbiter.Core.Job.Dedup

ToJSON DedupKey Source # 
Instance details

Defined in Arbiter.Core.Job.Dedup

Eq DedupKey Source # 
Instance details

Defined in Arbiter.Core.Job.Dedup

Generic DedupKey Source # 
Instance details

Defined in Arbiter.Core.Job.Dedup

Associated Types

type Rep DedupKey 
Instance details

Defined in Arbiter.Core.Job.Dedup

type Rep DedupKey = D1 ('MetaData "DedupKey" "Arbiter.Core.Job.Dedup" "arbiter-core-0.1.0.0-inplace" 'False) (C1 ('MetaCons "IgnoreDuplicate" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)) :+: C1 ('MetaCons "ReplaceDuplicate" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)))
Show DedupKey Source # 
Instance details

Defined in Arbiter.Core.Job.Dedup

type Rep DedupKey Source # 
Instance details

Defined in Arbiter.Core.Job.Dedup

type Rep DedupKey = D1 ('MetaData "DedupKey" "Arbiter.Core.Job.Dedup" "arbiter-core-0.1.0.0-inplace" 'False) (C1 ('MetaCons "IgnoreDuplicate" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)) :+: C1 ('MetaCons "ReplaceDuplicate" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)))

Trace context

data TraceContextSource #

A job's W3C trace context.

Constructors

TraceContext 

Fields

Instances

Instances details
Eq TraceContext Source # 
Instance details

Defined in Arbiter.Core.Job.TraceContext

Generic TraceContext Source # 
Instance details

Defined in Arbiter.Core.Job.TraceContext

Associated Types

type Rep TraceContext 
Instance details

Defined in Arbiter.Core.Job.TraceContext

type Rep TraceContext = D1 ('MetaData "TraceContext" "Arbiter.Core.Job.TraceContext" "arbiter-core-0.1.0.0-inplace" 'False) (C1 ('MetaCons "TraceContext" 'PrefixI 'True) (S1 ('MetaSel ('Just "traceparent") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text) :*: S1 ('MetaSel ('Just "tracestate") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Text))))
Show TraceContext Source # 
Instance details

Defined in Arbiter.Core.Job.TraceContext

type Rep TraceContext Source # 
Instance details

Defined in Arbiter.Core.Job.TraceContext

type Rep TraceContext = D1 ('MetaData "TraceContext" "Arbiter.Core.Job.TraceContext" "arbiter-core-0.1.0.0-inplace" 'False) (C1 ('MetaCons "TraceContext" 'PrefixI 'True) (S1 ('MetaSel ('Just "traceparent") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text) :*: S1 ('MetaSel ('Just "tracestate") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Text))))

toTraceContext :: Maybe Text -> Maybe Text -> Maybe TraceContextSource #

A trace context from its two stored halves. An orphan tracestate is dropped.

Observability

data ObservabilityHooks (m :: Type -> Type) payloadSource #

Callbacks fired at each point of a job's lifecycle, for metrics, logging or tracing. The worker catches an exception thrown inside one and logs it at Warning.

Constructors

ObservabilityHooks 

Fields

Instances

Instances details
MonadUnliftIO m => Monoid (ObservabilityHooks m payload) Source # 
Instance details

Defined in Arbiter.Core.Job.Types

Methods

mempty :: ObservabilityHooks m payload#

mappend :: ObservabilityHooks m payload -> ObservabilityHooks m payload -> ObservabilityHooks m payload#

mconcat :: [ObservabilityHooks m payload] -> ObservabilityHooks m payload#

MonadUnliftIO m => Semigroup (ObservabilityHooks m payload) Source #

Run both hooks at each lifecycle point, left before right. The right one runs however the left ended. When both throw, the right's failure propagates.

Instance details

Defined in Arbiter.Core.Job.Types

Methods

(<>) :: ObservabilityHooks m payload -> ObservabilityHooks m payload -> ObservabilityHooks m payload#

sconcat :: NonEmpty (ObservabilityHooks m payload) -> ObservabilityHooks m payload#

stimes :: Integral b => b -> ObservabilityHooks m payload -> ObservabilityHooks m payload#

defaultObservabilityHooks :: forall (m :: Type -> Type) payload. Applicative m => ObservabilityHooks m payloadSource #

No-op hooks. Override fields to add observability:

myHooks = defaultObservabilityHooks
  { onJobSuccess = \job startTime endTime -> do
      let duration = diffUTCTime endTime startTime
      logInfo $ "Job " <> show (primaryKey job) <> " took " <> show duration
  }

hoistObservabilityHooks :: (forall a. m a -> n a) -> ObservabilityHooks m payload -> ObservabilityHooks n payloadSource #

Hooks written in m, run in n through the given natural transformation. It must be a monad morphism, such as lift.

andThen :: MonadUnliftIO m => m () -> m () -> m ()Source #

base's finally. The second action stays interruptible.

type ClaimTime = UTCTimeSource #

When the worker thread received the job's batch.

type CurrentTime = UTCTimeSource #

The worker's clock reading after the extend landed.

type StartTime = UTCTimeSource #

When the worker thread received the job's batch.

type EndTime = UTCTimeSource #

For a success, when the ack committed. For a failure, when the handler failed the job.

type ErrorMsg = TextSource #

A failure message.

type BackoffDelay = NominalDiffTimeSource #

How long to wait before the next attempt.

Internal

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

data JobRecord payload key q insertedAt admSource #

Internal representation shared by writable and stored jobs.

Instances

Instances details
FromJSON payload => FromJSON (JobRead payload) Source #

Decode the complete persisted representation of a job.

Instance details

Defined in Arbiter.Core.Job.Types

Methods

parseJSON :: Value -> Parser (JobRead payload)#

parseJSONList :: Value -> Parser [JobRead payload]#

omittedField :: Maybe (JobRead payload)#

ToJSON payload => ToJSON (JobRead payload) Source # 
Instance details

Defined in Arbiter.Core.Job.Types

Methods

toJSON :: JobRead payload -> Value#

toEncoding :: JobRead payload -> Encoding#

toJSONList :: [JobRead payload] -> Value#

toEncodingList :: [JobRead payload] -> Encoding#

omitField :: JobRead payload -> Bool#

(Eq key, Eq payload, Eq q, Eq insertedAt, Eq adm) => Eq (JobRecord payload key q insertedAt adm) Source # 
Instance details

Defined in Arbiter.Core.Job.Types.Internal

Methods

(==) :: JobRecord payload key q insertedAt adm -> JobRecord payload key q insertedAt adm -> Bool#

(/=) :: JobRecord payload key q insertedAt adm -> JobRecord payload key q insertedAt adm -> Bool#

(Show key, Show payload, Show q, Show insertedAt, Show adm) => Show (JobRecord payload key q insertedAt adm) Source # 
Instance details

Defined in Arbiter.Core.Job.Types.Internal

Methods

showsPrec :: Int -> JobRecord payload key q insertedAt adm -> ShowS#

show :: JobRecord payload key q insertedAt adm -> String#

showList :: [JobRecord payload key q insertedAt adm] -> ShowS#

data PayloadColumnsSource #

The writable columns resolved from a payload at enqueue. The kind, key and prefix columns round-trip via PayloadKeys. cost is write-only.

Constructors

PayloadColumns 

Fields

Instances

Instances details
Eq PayloadColumns Source # 
Instance details

Defined in Arbiter.Core.Job.Types

Generic PayloadColumns Source # 
Instance details

Defined in Arbiter.Core.Job.Types

Associated Types

type Rep PayloadColumns 
Instance details

Defined in Arbiter.Core.Job.Types

type Rep PayloadColumns = D1 ('MetaData "PayloadColumns" "Arbiter.Core.Job.Types" "arbiter-core-0.1.0.0-inplace" 'False) (C1 ('MetaCons "PayloadColumns" 'PrefixI 'True) ((S1 ('MetaSel ('Just "pcKind") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Text)) :*: (S1 ('MetaSel ('Just "pcRateLimitKey") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Text)) :*: S1 ('MetaSel ('Just "pcRateLimitPrefix") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Text)))) :*: (S1 ('MetaSel ('Just "pcRateLimitCost") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Double) :*: (S1 ('MetaSel ('Just "pcConcurrencyKey") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Text)) :*: S1 ('MetaSel ('Just "pcConcurrencyPrefix") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Text))))))
Show PayloadColumns Source # 
Instance details

Defined in Arbiter.Core.Job.Types

type Rep PayloadColumns Source # 
Instance details

Defined in Arbiter.Core.Job.Types

type Rep PayloadColumns = D1 ('MetaData "PayloadColumns" "Arbiter.Core.Job.Types" "arbiter-core-0.1.0.0-inplace" 'False) (C1 ('MetaCons "PayloadColumns" 'PrefixI 'True) ((S1 ('MetaSel ('Just "pcKind") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Text)) :*: (S1 ('MetaSel ('Just "pcRateLimitKey") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Text)) :*: S1 ('MetaSel ('Just "pcRateLimitPrefix") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Text)))) :*: (S1 ('MetaSel ('Just "pcRateLimitCost") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Double) :*: (S1 ('MetaSel ('Just "pcConcurrencyKey") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Text)) :*: S1 ('MetaSel ('Just "pcConcurrencyPrefix") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Text))))))

dedupParts :: Maybe DedupKey -> (Maybe Text, Maybe Text)Source #

The dedup_key and dedup_strategy column values for a DedupKey.