Files
threshold/internal/scheduler/job/doc.go
T
429247f407 [COMPLIANCE] Update Copyright Headers (#6282)
* [COMPLIANCE] Update Copyright and License Headers

* chore: make gen to generate files with copyright headers

* chore: update missed copyright headers

---------

Co-authored-by: hashicorp-copywrite[bot] <110428419+hashicorp-copywrite[bot]@users.noreply.github.com>
Co-authored-by: Justin Nguyen <justin.nguyen@hashicorp.com>
2026-01-28 11:05:07 -06:00

50 lines
1.7 KiB
Go

// Copyright IBM Corp. 2020, 2025
// SPDX-License-Identifier: BUSL-1.1
// Package job provides a Job and a Run struct suitable for persisting to
// the repository.
//
// A Job represents work that should be run at a predetermined time and needs to be synchronized
// across servers to ensure that one and only one instance of a job is running at any given time.
// The job's name must be unique to the plugin that registered the job, the (plugin_id, name)
// uniqueness is enforced by the database.
//
// A Run represents a single execution of a job, only a single run can be in a
// running state for a specific job. The private_id (primary key) is generated by the
// repository during RunJobs.
//
// # Repository
//
// A repository provides methods for creating, updating, retrieving, and
// deleting Jobs. It also provides methods to run jobs, update progress of runs
// and complete, fail or interrupt runs.
// A new repository should be created for each transaction. For example:
//
// var wrapper wrapping.Wrapper
// ... init wrapper ...
//
// // db implements both the reader and writer interfaces.
// db, _ := db.Open(db.Postgres, url)
//
// var repo *job.Repository
// repo, _ = job.NewRepository(db, db, wrapper)
//
// var j *job.Job
// j, _ = repo.UpsertJob(context.Background(), j, "name", "description")
//
// var runs []*Run
// repo, _ = job.NewRepository(db, db, wrapper)
// runs, _ = repo.RunJobs(context.Background(), "serverId")
//
// ... run job ...
//
// var run *Run
// repo, _ = job.NewRepository(db, db, wrapper)
// run, _ = repo.UpdateProgress(ctx, run, []string{"TotalCount", "CompletedCount"})
//
// nextJobRun = time.Now().Add(time.Hour)
//
// repo, _ = job.NewRepository(db, db, wrapper)
// _ = repo.CompleteRun(ctx, run.PrivateId nextJobRun)
package job