runner

package
v2.18.1 Latest Latest
Warning

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

Go to latest
Published: Dec 16, 2024 License: AGPL-3.0 Imports: 20 Imported by: 0

Documentation

Index

Constants

View Source
const (
	MissingParameterErrorCode = "MISSING_TEMPLATE_PARAMETER"

	RequiredTemplateVariablesErrorCode = "REQUIRED_TEMPLATE_VARIABLES"
)

Variables

This section is empty.

Functions

This section is empty.

Types

type JobUpdater

type JobUpdater interface {
	UpdateJob(ctx context.Context, in *proto.UpdateJobRequest) (*proto.UpdateJobResponse, error)
	FailJob(ctx context.Context, in *proto.FailedJob) error
	CompleteJob(ctx context.Context, in *proto.CompletedJob) error
}

type Metrics

type Metrics struct {
	ConcurrentJobs *prometheus.GaugeVec
	NumDaemons     prometheus.Gauge
	// JobTimings also counts the total amount of jobs.
	JobTimings *prometheus.HistogramVec
	// WorkspaceBuilds counts workspace build successes and failures.
	WorkspaceBuilds *prometheus.CounterVec
}

type Options

type Options struct {
	Updater             JobUpdater
	QuotaCommitter      QuotaCommitter
	Logger              slog.Logger
	Provisioner         sdkproto.DRPCProvisionerClient
	UpdateInterval      time.Duration
	ForceCancelInterval time.Duration
	LogDebounceInterval time.Duration
	Tracer              trace.Tracer
	Metrics             Metrics
}

type QuotaCommitter

type QuotaCommitter interface {
	CommitQuota(ctx context.Context, in *proto.CommitQuotaRequest) (*proto.CommitQuotaResponse, error)
}

type Runner

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

func New

func New(
	ctx context.Context,
	job *proto.AcquiredJob,
	opts Options,
) *Runner

func (*Runner) Cancel

func (r *Runner) Cancel()

Cancel initiates a Cancel on the job, but allows it to keep running to do so gracefully. Read from Done() to be notified when the job completes.

func (*Runner) Done

func (r *Runner) Done() <-chan struct{}

func (*Runner) Fail

func (r *Runner) Fail(ctx context.Context, f *proto.FailedJob) error

Fail immediately halts updates and, if the job is not complete sends FailJob to the coder server. Running goroutines are canceled but complete asynchronously (although they are prevented from further updating the job to the coder server). The provided context sets how long to keep trying to send the FailJob.

func (*Runner) ForceStop

func (r *Runner) ForceStop()

ForceStop signals all goroutines to stop and prevents any further API calls back to coder server for this job

func (*Runner) Run

func (r *Runner) Run()

Run executes the job.

the idea here is to run two goroutines to work on the job: doCleanFinish and heartbeat, then use the `r.cond` to wait until the job is either complete or failed. This function then sends the complete or failed message --- the exception to this is if something calls Fail() on the Runner; either something external, like the server getting closed, or the heartbeat goroutine timing out after attempting to gracefully cancel. If something calls Fail(), then the failure is sent on that goroutine on the context passed into Fail(), and it marks okToSend false to signal us here that this function should not also send a terminal message.

Jump to

Keyboard shortcuts

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