Documentation
¶
Index ¶
- Variables
- type AdvanceScheduleParams
- type ClaimJobsOldestParams
- type ClaimJobsParams
- type CompleteJobParams
- type DBTX
- type DueSchedulesParams
- type FailJobParams
- type GetJobByIdemParams
- type HeartbeatLeasesParams
- type HeartbeatLeasesRow
- type InsertJobEventParams
- type InsertJobEventsBatchBatchResults
- type InsertJobEventsBatchParams
- type InsertJobParams
- type InsertJobsCopyParams
- type InsertProcessedEffectParams
- type InsertScheduleParams
- type Job
- type JobEvent
- type JobStatus
- type ListJobsParams
- type ListSchedulesParams
- type NotifyReadyParams
- type NullJobStatus
- type ProcessedEffect
- type ProcessedEffectExistsParams
- type PurgeJobsParams
- type Queries
- func (q *Queries) AdvanceSchedule(ctx context.Context, arg AdvanceScheduleParams) (int64, error)
- func (q *Queries) CancelQueuedJob(ctx context.Context, id uuid.UUID) (Job, error)
- func (q *Queries) ClaimJobs(ctx context.Context, arg ClaimJobsParams) ([]Job, error)
- func (q *Queries) ClaimJobsOldest(ctx context.Context, arg ClaimJobsOldestParams) ([]Job, error)
- func (q *Queries) CompleteJob(ctx context.Context, arg CompleteJobParams) (Job, error)
- func (q *Queries) DBNow(ctx context.Context) (time.Time, error)
- func (q *Queries) DeleteSchedule(ctx context.Context, id uuid.UUID) (int64, error)
- func (q *Queries) DueSchedules(ctx context.Context, arg DueSchedulesParams) ([]Schedule, error)
- func (q *Queries) FailJob(ctx context.Context, arg FailJobParams) (Job, error)
- func (q *Queries) GetJob(ctx context.Context, id uuid.UUID) (Job, error)
- func (q *Queries) GetJobByIdem(ctx context.Context, arg GetJobByIdemParams) (Job, error)
- func (q *Queries) GetJobForUpdate(ctx context.Context, id uuid.UUID) (Job, error)
- func (q *Queries) GetSchedule(ctx context.Context, id uuid.UUID) (Schedule, error)
- func (q *Queries) HeartbeatLeases(ctx context.Context, arg HeartbeatLeasesParams) ([]HeartbeatLeasesRow, error)
- func (q *Queries) InsertJob(ctx context.Context, arg InsertJobParams) (Job, error)
- func (q *Queries) InsertJobEvent(ctx context.Context, arg InsertJobEventParams) error
- func (q *Queries) InsertJobEventsBatch(ctx context.Context, arg []InsertJobEventsBatchParams) *InsertJobEventsBatchBatchResults
- func (q *Queries) InsertJobsCopy(ctx context.Context, arg []InsertJobsCopyParams) (int64, error)
- func (q *Queries) InsertProcessedEffect(ctx context.Context, arg InsertProcessedEffectParams) (int64, error)
- func (q *Queries) InsertSchedule(ctx context.Context, arg InsertScheduleParams) (Schedule, error)
- func (q *Queries) ListJobEvents(ctx context.Context, jobID uuid.UUID) ([]JobEvent, error)
- func (q *Queries) ListJobs(ctx context.Context, arg ListJobsParams) ([]Job, error)
- func (q *Queries) ListSchedules(ctx context.Context, arg ListSchedulesParams) ([]Schedule, error)
- func (q *Queries) NotifyReady(ctx context.Context, arg NotifyReadyParams) error
- func (q *Queries) ProcessedEffectExists(ctx context.Context, arg ProcessedEffectExistsParams) (bool, error)
- func (q *Queries) PruneJobEvents(ctx context.Context, olderThan pgtype.Interval) (int64, error)
- func (q *Queries) PurgeJobs(ctx context.Context, arg PurgeJobsParams) (int64, error)
- func (q *Queries) QueueDepth(ctx context.Context) ([]QueueDepthRow, error)
- func (q *Queries) RequestCancel(ctx context.Context, id uuid.UUID) (Job, error)
- func (q *Queries) RequeueExpiredJob(ctx context.Context, arg []RequeueExpiredJobParams) *RequeueExpiredJobBatchResults
- func (q *Queries) RetryJob(ctx context.Context, id uuid.UUID) (Job, error)
- func (q *Queries) SelectExpiredLeases(ctx context.Context, arg SelectExpiredLeasesParams) ([]SelectExpiredLeasesRow, error)
- func (q *Queries) UpdateSchedule(ctx context.Context, arg UpdateScheduleParams) (Schedule, error)
- func (q *Queries) WithTx(tx pgx.Tx) *Queries
- type QueueDepthRow
- type RequeueExpiredJobBatchResults
- type RequeueExpiredJobParams
- type Schedule
- type SelectExpiredLeasesParams
- type SelectExpiredLeasesRow
- type UpdateScheduleParams
Constants ¶
This section is empty.
Variables ¶
var (
ErrBatchAlreadyClosed = errors.New("batch already closed")
)
Functions ¶
This section is empty.
Types ¶
type AdvanceScheduleParams ¶
type ClaimJobsOldestParams ¶
type ClaimJobsParams ¶
type DBTX ¶
type DBTX interface {
Exec(context.Context, string, ...interface{}) (pgconn.CommandTag, error)
Query(context.Context, string, ...interface{}) (pgx.Rows, error)
QueryRow(context.Context, string, ...interface{}) pgx.Row
CopyFrom(ctx context.Context, tableName pgx.Identifier, columnNames []string, rowSrc pgx.CopyFromSource) (int64, error)
SendBatch(context.Context, *pgx.Batch) pgx.BatchResults
}
type DueSchedulesParams ¶
type FailJobParams ¶
type GetJobByIdemParams ¶
type HeartbeatLeasesParams ¶
type HeartbeatLeasesRow ¶
type InsertJobEventParams ¶
type InsertJobEventsBatchBatchResults ¶
type InsertJobEventsBatchBatchResults struct {
// contains filtered or unexported fields
}
func (*InsertJobEventsBatchBatchResults) Close ¶
func (b *InsertJobEventsBatchBatchResults) Close() error
func (*InsertJobEventsBatchBatchResults) Exec ¶
func (b *InsertJobEventsBatchBatchResults) Exec(f func(int, error))
type InsertJobParams ¶
type InsertJobsCopyParams ¶
type InsertScheduleParams ¶
type Job ¶
type Job struct {
ID uuid.UUID
Queue string
Type string
Payload []byte
Status JobStatus
Priority int16
RunAt time.Time
Attempts int32
MaxAttempts int32
Backoff []byte
LeaseOwner *string
LeaseUntil *time.Time
LastError *string
IdempotencyKey *string
CancelRequested bool
CreatedAt time.Time
UpdatedAt time.Time
StartedAt *time.Time
FinishedAt *time.Time
LeaseToken int64
Traceparent *string
}
type ListJobsParams ¶
type ListSchedulesParams ¶
type NotifyReadyParams ¶
type NullJobStatus ¶
type NullJobStatus struct {
JobStatus JobStatus
Valid bool // Valid is true if JobStatus is not NULL
}
func (*NullJobStatus) Scan ¶
func (ns *NullJobStatus) Scan(value interface{}) error
Scan implements the Scanner interface.
type ProcessedEffect ¶
type PurgeJobsParams ¶
type Queries ¶
type Queries struct {
// contains filtered or unexported fields
}
func (*Queries) AdvanceSchedule ¶
func (*Queries) CancelQueuedJob ¶
func (*Queries) ClaimJobs ¶
One round trip = batch claim + lease + attempts++. The CTE takes the row locks (SKIP LOCKED, so concurrent claimers never wait on each other) and the UPDATE flips them to leased. started_at is the first claim; attempts counts starts; lease_token is bumped so every claim carries a fresh fencing token.
func (*Queries) ClaimJobsOldest ¶
ClaimJobs in pure age order (run_at, id), ignoring priority: the anti- starvation claim taken every CLAIM_FIFO_EVERY-th time (index jobs_ready_fifo).
func (*Queries) CompleteJob ¶
Owner- and token-guarded so a stale worker cannot resurrect a reaped job. A job whose cancel was requested while it ran ends cancelled, not succeeded. No row = ErrLeaseLost.
func (*Queries) DeleteSchedule ¶
func (*Queries) DueSchedules ¶
Run inside a short transaction by the store: the row locks keep two leaders (or a retried tick) from materialising the same schedule at the same moment.
func (*Queries) FailJob ¶
retry_at is computed in Go from job.Policy (the single source of backoff truth). cancelled wins over dead wins over queued; a retry is queued with a future run_at.
func (*Queries) GetJobByIdem ¶
func (*Queries) GetJobForUpdate ¶
func (*Queries) GetSchedule ¶
func (*Queries) HeartbeatLeases ¶
func (q *Queries) HeartbeatLeases(ctx context.Context, arg HeartbeatLeasesParams) ([]HeartbeatLeasesRow, error)
Returns the leases actually extended: (id, token) pairs zipped by the parallel unnest, guarded by owner and token. A lease that already expired is not revived (fencing: once lease_until has passed the reaper may take the job at any moment), and cancel_requested is returned so the store can report cancelled ids apart.
func (*Queries) InsertJob ¶
Every time comparison and default below uses the database clock (now()), never a value computed by the application; see internal/postgres/doc.go "The clock rule". run_at: an absolute client-supplied time, or NULL for now() + delay on the DB clock. The partial unique index jobs_idem_uniq makes the ON CONFLICT target; a NULL key never conflicts. No row returned means the (queue, idempotency_key) already exists.
func (*Queries) InsertJobEvent ¶
func (q *Queries) InsertJobEvent(ctx context.Context, arg InsertJobEventParams) error
func (*Queries) InsertJobEventsBatch ¶
func (q *Queries) InsertJobEventsBatch(ctx context.Context, arg []InsertJobEventsBatchParams) *InsertJobEventsBatchBatchResults
Batch form for claims: the same row as InsertJobEvent, sent as one pgx batch.
func (*Queries) InsertJobsCopy ¶
func (*Queries) InsertProcessedEffect ¶
func (*Queries) InsertSchedule ¶
func (*Queries) ListJobEvents ¶
func (*Queries) ListJobs ¶
Keyset page over (created_at, id) newest first; every filter is optional. The page limit is passed as limit+1 by the store to detect the next page.
func (*Queries) ListSchedules ¶
func (*Queries) NotifyReady ¶
func (q *Queries) NotifyReady(ctx context.Context, arg NotifyReadyParams) error
func (*Queries) ProcessedEffectExists ¶
func (*Queries) PruneJobEvents ¶
func (*Queries) PurgeJobs ¶
Deletes finished jobs (and their events) matching queue/statuses/age, oldest first.
func (*Queries) QueueDepth ¶
func (q *Queries) QueueDepth(ctx context.Context) ([]QueueDepthRow, error)
func (*Queries) RequestCancel ¶
func (*Queries) RequeueExpiredJob ¶
func (q *Queries) RequeueExpiredJob(ctx context.Context, arg []RequeueExpiredJobParams) *RequeueExpiredJobBatchResults
Reaper step 2, one row per expired lease, sent as one pgx batch inside the reaper transaction. run_at is only applied to rows going back to queued.
func (*Queries) SelectExpiredLeases ¶
func (q *Queries) SelectExpiredLeases(ctx context.Context, arg SelectExpiredLeasesParams) ([]SelectExpiredLeasesRow, error)
Reaper step 1 (inside the reaper transaction). Step 2 is RequeueExpired with the per-id verdict computed in Go so the backoff policy has exactly one implementation.
func (*Queries) UpdateSchedule ¶
type QueueDepthRow ¶
type RequeueExpiredJobBatchResults ¶
type RequeueExpiredJobBatchResults struct {
// contains filtered or unexported fields
}
func (*RequeueExpiredJobBatchResults) Close ¶
func (b *RequeueExpiredJobBatchResults) Close() error
func (*RequeueExpiredJobBatchResults) Exec ¶
func (b *RequeueExpiredJobBatchResults) Exec(f func(int, error))