postgrescoord

package module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 8, 2026 License: MIT Imports: 10 Imported by: 0

Documentation

Overview

Package postgrescoord provides Postgres-backed cron.Claimer and cron.Elector implementations through database/sql. It uses server time, so application clock skew does not affect claims or leadership leases.

Index

Constants

View Source
const (
	// DefaultLeaderName scopes the default leadership lease row.
	DefaultLeaderName = "default"
	// DefaultLeaderTTL is the leadership lease. Failover can take one TTL.
	DefaultLeaderTTL = 30 * time.Second
)
View Source
const (
	// DefaultClaimsTable stores fire claims.
	DefaultClaimsTable = "cron_claims"
	// DefaultLeaderTable stores leadership leases.
	DefaultLeaderTable = "cron_leader"
)
View Source
const (
	// DefaultClaimTTL is the time a fire claim remains reserved. It must cover
	// the largest expected jitter, clock skew, and delayed catch-up window.
	DefaultClaimTTL = 10 * time.Minute
)

Variables

This section is empty.

Functions

func Migrate

func Migrate(ctx context.Context, db *sql.DB) error

Migrate creates the default coordination tables if they do not exist. Call it during deployment; constructors never run DDL.

func MigrateTables

func MigrateTables(ctx context.Context, db *sql.DB, claimsTable, leaderTable string) error

MigrateTables is Migrate with custom plain or schema-qualified table names.

Types

type Claimer

type Claimer struct {
	// contains filtered or unexported fields
}

Claimer stores fire claims in Postgres. Expired claims for the same fire key are replaced atomically.

func NewClaimer

func NewClaimer(db *sql.DB, opts ...ClaimerOption) (*Claimer, error)

NewClaimer constructs a Postgres fire Claimer. The claims table must exist; see Migrate. The driver must support sql.Result.RowsAffected.

func (*Claimer) Claim

func (c *Claimer) Claim(ctx context.Context, fireKey string) (bool, error)

Claim reserves fireKey until its server-side TTL. false, nil means another scheduler instance already claimed it.

func (*Claimer) Cleanup

func (c *Claimer) Cleanup(ctx context.Context) error

Cleanup deletes claims that have been expired for over one minute. Run it periodically when long-term claim history is not needed.

type ClaimerOption

type ClaimerOption func(*claimerConfig) error

ClaimerOption configures a Claimer.

func WithClaimTTL

func WithClaimTTL(ttl time.Duration) ClaimerOption

WithClaimTTL overrides DefaultClaimTTL.

func WithClaimsTable

func WithClaimsTable(table string) ClaimerOption

WithClaimsTable overrides DefaultClaimsTable.

type Elector

type Elector struct {
	// contains filtered or unexported fields
}

Elector is a lease-based cron.Elector. IsLeader renews a lease already held by this process; no background goroutine or Close is required.

func NewElector

func NewElector(db *sql.DB, opts ...ElectorOption) (*Elector, error)

NewElector constructs a lease-based Postgres Elector. The leader table must exist; see Migrate.

func (*Elector) IsLeader

func (e *Elector) IsLeader(ctx context.Context) (bool, error)

IsLeader returns false, nil while another process owns the lease.

type ElectorOption

type ElectorOption func(*electorConfig) error

ElectorOption configures an Elector.

func WithLeaderName

func WithLeaderName(name string) ElectorOption

WithLeaderName scopes the lease row, letting several fleets share a table.

func WithLeaderTTL

func WithLeaderTTL(ttl time.Duration) ElectorOption

WithLeaderTTL overrides DefaultLeaderTTL.

func WithLeaderTable

func WithLeaderTable(table string) ElectorOption

WithLeaderTable overrides DefaultLeaderTable.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL