jobdb

package
v0.3.50 Latest Latest
Warning

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

Go to latest
Published: Feb 23, 2023 License: Apache-2.0 Imports: 9 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Job

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

Job is the scheduler-internal representation of a job.

func NewJob

func NewJob(
	jobId string,
	jobset string,
	queue string,
	priority uint32,
	schedulingInfo *schedulerobjects.JobSchedulingInfo,
	cancelRequested bool,
	cancelByJobsetRequested bool,
	cancelled bool,
	created int64,
) *Job

NewJob creates a new scheduler job

func (*Job) CancelByJobsetRequested

func (job *Job) CancelByJobsetRequested() bool

CancelByJobsetRequested returns true if the user has requested this job's jobset be cancelled.

func (*Job) CancelRequested

func (job *Job) CancelRequested() bool

CancelRequested returns true if the user has requested this job be cancelled.

func (*Job) Cancelled

func (job *Job) Cancelled() bool

Cancelled Returns true if the scheduler has cancelled the job

func (*Job) Created

func (job *Job) Created() int64

Created Returns the creation time of the job

func (*Job) Failed

func (job *Job) Failed() bool

Failed Returns true if the scheduler has marked the job as failed

func (*Job) GetAnnotations

func (job *Job) GetAnnotations() map[string]string

GetAnnotations returns the annotations on the job. This is needed for compatibility with LegacySchedulerJob

func (*Job) GetId

func (job *Job) GetId() string

GetId returns the id of the Job. This is needed for the LegacyJob interface.

func (*Job) GetJobSet

func (job *Job) GetJobSet() string

GetJobSet returns the jobset the job belongs to. This is needed for compatibility with legacyJob

func (*Job) GetQueue

func (job *Job) GetQueue() string

GetQueue returns the queue this job belongs to. This is needed for the LegacyJob interface.

func (*Job) GetRequirements

GetRequirements returns the scheduling requirements associated with the job. this is needed for compatibility with LegacySchedulerJob

func (*Job) HasRuns

func (job *Job) HasRuns() bool

HasRuns returns true if the job has been run If this is returns true then LatestRun is guaranteed to return a non-nil value.

func (*Job) Id

func (job *Job) Id() string

Id returns the id of the Job.

func (*Job) InTerminalState

func (job *Job) InTerminalState() bool

InTerminalState returns true if the job is in a terminal state

func (*Job) JobSchedulingInfo

func (job *Job) JobSchedulingInfo() *schedulerobjects.JobSchedulingInfo

JobSchedulingInfo returns the scheduling requirements associated with the job

func (*Job) Jobset

func (job *Job) Jobset() string

Jobset returns the jobset the job belongs to.

func (*Job) LatestRun

func (job *Job) LatestRun() *JobRun

LatestRun returns the currently active job run or nil if there are no runs yet. Callers should either guard against nil values explicitly or via HasRuns.

func (*Job) NumReturned

func (job *Job) NumReturned() uint

NumReturned returns the number of times this job has been returned by executors Note that this is O(N) on Runs, but this should be fine as the number of runs should be small.

func (*Job) Priority

func (job *Job) Priority() uint32

Priority returns the priority of the job.

func (*Job) Queue

func (job *Job) Queue() string

Queue returns the queue this job belongs to.

func (*Job) Queued

func (job *Job) Queued() bool

Queued returns true if the job should be considered by the scheduler for assignment or false otherwise.

func (*Job) RequestedPriority

func (job *Job) RequestedPriority() uint32

RequestedPriority returns the requested priority of the job.

func (*Job) RunById

func (job *Job) RunById(id uuid.UUID) *JobRun

RunById returns the Run corresponding to the provided run id or nil if no such Run exists.

func (*Job) Succeeded

func (job *Job) Succeeded() bool

Succeeded Returns true if the scheduler has marked the job as succeeded

func (*Job) WithCancelByJobsetRequested

func (job *Job) WithCancelByJobsetRequested(cancelByJobsetRequested bool) *Job

WithCancelByJobsetRequested returns a copy of the job with the cancelByJobsetRequested status updated.

func (*Job) WithCancelRequested

func (job *Job) WithCancelRequested(cancelRequested bool) *Job

WithCancelRequested returns a copy of the job with the cancelRequested status updated.

func (*Job) WithCancelled

func (job *Job) WithCancelled(cancelled bool) *Job

WithCancelled returns a copy of the job with the cancelled status updated

func (*Job) WithFailed

func (job *Job) WithFailed(failed bool) *Job

WithFailed returns a copy of the job with the failed status updated.

func (*Job) WithNewRun

func (job *Job) WithNewRun(executor string, node string) *Job

WithNewRun creates a copy of the job with a new run on the given executor.

func (*Job) WithPriority

func (job *Job) WithPriority(priority uint32) *Job

WithPriority returns a copy of the job with the priority updated.

func (*Job) WithQueued

func (job *Job) WithQueued(queued bool) *Job

WithQueued returns a copy of the job with the queued status updated.

func (*Job) WithRequestedPriority

func (job *Job) WithRequestedPriority(priority uint32) *Job

func (*Job) WithSucceeded

func (job *Job) WithSucceeded(succeeded bool) *Job

WithSucceeded returns a copy of the job with the succeeded status updated.

func (*Job) WithUpdatedRun

func (job *Job) WithUpdatedRun(run *JobRun) *Job

WithUpdatedRun creates a copy of the job with run details updated.

type JobDb

type JobDb struct {
	// In-memory database. Stores *Job.
	// Used to efficiently iterate over jobs in sorted order.
	Db *memdb.MemDB
}

JobDb is the scheduler-internal system for storing job queues. It allows for efficiently iterating over jobs in a specified queue sorted first by in-queue priority value (smaller to greater, since smaller values indicate higher priority), and second by submission time. JobDb is implemented on top of https://github.com/hashicorp/go-memdb which is a simple in-memory database built on immutable radix trees.

func NewJobDb

func NewJobDb() (*JobDb, error)

func (*JobDb) BatchDelete

func (jobDb *JobDb) BatchDelete(txn *memdb.Txn, ids []string) error

BatchDelete removes the jobs with the given ids from the database. Any ids that are not in the database will be ignored

func (*JobDb) GetAll

func (jobDb *JobDb) GetAll(txn *memdb.Txn) ([]*Job, error)

GetAll returns all jobs in the database. The Jobs returned by this function *must not* be subsequently modified

func (*JobDb) GetById

func (jobDb *JobDb) GetById(txn *memdb.Txn, id string) (*Job, error)

GetById returns the job with the given Id or nil if no such job exists The Job returned by this function *must not* be subsequently modified

func (*JobDb) GetByRunId

func (jobDb *JobDb) GetByRunId(txn *memdb.Txn, runId uuid.UUID) (*Job, error)

GetByRunId returns the job with the given run id or nil if no such job exists The Job returned by this function *must not* be subsequently modified

func (*JobDb) HasQueuedJobs

func (jobDb *JobDb) HasQueuedJobs(txn *memdb.Txn, queue string) (bool, error)

HasQueuedJobs returns true if the queue has any jobs in the running state or false otherwise

func (*JobDb) ReadTxn

func (jobDb *JobDb) ReadTxn() *memdb.Txn

ReadTxn returns a read-only transaction. Multiple read-only transactions can access the db concurrently

func (*JobDb) Upsert

func (jobDb *JobDb) Upsert(txn *memdb.Txn, jobs []*Job) error

Upsert will insert the given jobs if they don't already exist or update the if they do

func (*JobDb) WriteTxn

func (jobDb *JobDb) WriteTxn() *memdb.Txn

WriteTxn returns a writeable transaction. Only a single write transaction may access the db at any given time

type JobQueueIterator

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

JobQueueIterator is an iterator over all jobs in a given queue. Jobs are sorted first by per-queue priority, and secondly by submission time.

func NewJobQueueIterator

func NewJobQueueIterator(txn *memdb.Txn, queue string) (*JobQueueIterator, error)

func (*JobQueueIterator) Next

func (it *JobQueueIterator) Next() interface{}

Next is needed to implement the memdb.ResultIterator interface. External callers should use NextJobItem which provides a typesafe mechanism for getting the next Job

func (*JobQueueIterator) NextJobItem

func (it *JobQueueIterator) NextJobItem() *Job

NextJobItem returns the next Job or nil if the end of the iterator has been reached

func (*JobQueueIterator) WatchCh

func (it *JobQueueIterator) WatchCh() <-chan struct{}

WatchCh is needed to implement the memdb.ResultIterator interface but is not needed for our use case

type JobRun

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

JobRun is the scheduler-internal representation of a job run.

func CreateRun

func CreateRun(
	id uuid.UUID,
	creationTime int64,
	executor string,
	node string,
	running bool,
	succeeded bool,
	failed bool,
	cancelled bool,
	returned bool,
) *JobRun

CreateRun creates a new scheduler job run from a database job run

func (*JobRun) Cancelled

func (run *JobRun) Cancelled() bool

Cancelled Returns true if the user has cancelled the job run

func (*JobRun) Created

func (run *JobRun) Created() int64

Created Returns the creation time of the job run

func (*JobRun) Executor

func (run *JobRun) Executor() string

Executor returns the executor to which the JobRun is assigned.

func (*JobRun) Failed

func (run *JobRun) Failed() bool

Failed Returns true if the executor has reported the job run as failed

func (*JobRun) Id

func (run *JobRun) Id() uuid.UUID

Id returns the id of the JobRun.

func (*JobRun) InTerminalState

func (run *JobRun) InTerminalState() bool

InTerminalState returns true if the JobRun is in a terminal state

func (*JobRun) Node

func (run *JobRun) Node() string

Node returns the node to which the JobRun is assigned.

func (*JobRun) Returned

func (run *JobRun) Returned() bool

Returned Returns true if the executor has returned the job run.

func (*JobRun) Running

func (run *JobRun) Running() bool

Running Returns true if the executor has reported the job run as running

func (*JobRun) Succeeded

func (run *JobRun) Succeeded() bool

Succeeded Returns true if the executor has reported the job run as successful

func (*JobRun) WithCancelled

func (run *JobRun) WithCancelled(cancelled bool) *JobRun

WithCancelled returns a copy of the job run with the cancelled status updated.

func (*JobRun) WithFailed

func (run *JobRun) WithFailed(failed bool) *JobRun

WithFailed returns a copy of the job run with the failed status updated.

func (*JobRun) WithReturned

func (run *JobRun) WithReturned(returned bool) *JobRun

WithReturned returns a copy of the job run with the returned status updated.

func (*JobRun) WithRunning

func (run *JobRun) WithRunning(running bool) *JobRun

WithRunning returns a copy of the job run with the running status updated.

func (*JobRun) WithSucceeded

func (run *JobRun) WithSucceeded(succeeded bool) *JobRun

WithSucceeded returns a copy of the job run with the succeeded status updated.

type LeasedJobsIterator

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

LeasedJobsIterator is an iterator over all queued jobs

func NewLeasedJobsIterator

func NewLeasedJobsIterator(txn *memdb.Txn) (*LeasedJobsIterator, error)

func (*LeasedJobsIterator) Next

func (it *LeasedJobsIterator) Next() interface{}

Next is needed to implement the memdb.ResultIterator interface. External callers should use NextJobItem which provides a typesafe mechanism for getting the next Job

func (*LeasedJobsIterator) NextJobItem

func (it *LeasedJobsIterator) NextJobItem() *Job

NextJobItem returns the next Job or nil if the end of the iterator has been reached

func (*LeasedJobsIterator) WatchCh

func (it *LeasedJobsIterator) WatchCh() <-chan struct{}

WatchCh is needed to implement the memdb.ResultIterator interface but is not needed for our use case

Jump to

Keyboard shortcuts

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