Documentation
¶
Index ¶
- Constants
- Variables
- type BaseResourceType
- type BaseResourceTypeFactory
- type Build
- type BuildFactory
- type BuildStatus
- type ConfigVersion
- type Conn
- type Container
- type ContainerFactory
- type ContainerMetadata
- type ContainerState
- type ContainerType
- type CreatedContainer
- type CreatedVolume
- type CreatingContainer
- type CreatingVolume
- type DestroyingContainer
- type DestroyingVolume
- type ErrVolumeMarkCreatedFailed
- type Pipeline
- type PipelineFactory
- type PipelinePausedState
- type Resource
- type ResourceCache
- type ResourceCacheFactory
- type ResourceConfig
- type ResourceConfigFactory
- type ResourceType
- type ResourceTypeNotFoundError
- type ResourceUser
- type Team
- type TeamFactory
- type Tx
- type UsedBaseResourceType
- type UsedResourceCache
- type UsedResourceConfig
- type UsedWorkerBaseResourceType
- type UsedWorkerResourceCache
- type UsedWorkerResourceType
- type VolumeFactory
- type VolumeResourceType
- type VolumeState
- type VolumeType
- type Worker
- type WorkerBaseResourceType
- type WorkerBaseResourceTypeFactory
- type WorkerFactory
- type WorkerLifecycle
- type WorkerResourceCache
- type WorkerResourceType
- type WorkerState
Constants ¶
const ( ContainerStateCreating = "creating" ContainerStateCreated = "created" ContainerStateDestroying = "destroying" )
const ( VolumeStateCreating = "creating" VolumeStateCreated = "created" VolumeStateDestroying = "destroying" )
const ( VolumeTypeContainer = "container" VolumeTypeResource = "resource" VolumeTypeResourceType = "resource-type" VolumeTypeUknown = "unknown" // for migration to life )
const ( WorkerStateRunning = WorkerState("running") WorkerStateStalled = WorkerState("stalled") WorkerStateLanding = WorkerState("landing") WorkerStateLanded = WorkerState("landed") WorkerStateRetiring = WorkerState("retiring") )
Variables ¶
var ( ErrVolumeMarkDestroyingFailed = errors.New("could not mark volume as destroying") ErrVolumeCannotBeDestroyedWithChildrenPresent = errors.New("volume cannot be destroyed as children are present") ErrVolumeStateTransitionFailed = errors.New("could not transition volume state") ErrVolumeMissing = errors.New("volume no longer in db") ErrInvalidResourceCache = errors.New("invalid resource cache") )
var ( ErrWorkerNotPresent = errors.New("worker-not-present-in-db") ErrCannotPruneRunningWorker = errors.New("worker-not-stalled-for-pruning") )
var EmptyParamsHash = mapHash(atc.Params{})
var ErrBaseResourceTypeAlreadyExists = errors.New("base-resource-type-already-exists")
var ErrBaseResourceTypeNotFound = errors.New("base resource type not found")
var ErrBuildDisappeared = errors.New("build-disappeared-from-db")
var ErrConfigComparisonFailed = errors.New("comparison with existing config failed during save")
var ErrContainerDisappeared = errors.New("container-disappeared-from-db")
var ErrResourceCacheAlreadyExists = errors.New("resource-cache-already-exists")
var ErrResourceCacheDisappeared = errors.New("resource-cache-disappeared")
var ErrResourceConfigAlreadyExists = errors.New("resource config already exists")
var ErrResourceConfigDisappeared = errors.New("resource config disappeared")
var ErrResourceConfigParentDisappeared = errors.New("resource config parent disappeared")
var ErrSafeRetryCreateOrUpdate = errors.New("failed-to-run-safe-create-or-update-retrying")
var ErrSafeRetryFindOrCreate = errors.New("failed-to-run-safe-find-or-create-retrying")
var ErrTeamDisappeared = errors.New("team disappeared")
var ErrWorkerBaseResourceTypeAlreadyExists = errors.New("worker base resource type already exists")
var ErrWorkerBaseResourceTypeDisappeared = errors.New("worker base resource type disappeared")
var ErrWorkerResourceTypeNotFound = errors.New("worker resource type no longer exists (stale?)")
Functions ¶
This section is empty.
Types ¶
type BaseResourceType ¶
type BaseResourceType struct {
Name string // The name of the type, e.g. 'git'.
}
BaseResourceType represents a resource type provided by workers.
It is created via worker registration. All creates are upserts.
It is removed by gc.BaseResourceTypeCollector, once there are no references to it from worker_base_resource_types.
func (BaseResourceType) Find ¶
func (brt BaseResourceType) Find(tx Tx) (*UsedBaseResourceType, bool, error)
func (BaseResourceType) FindOrCreate ¶
func (brt BaseResourceType) FindOrCreate(tx Tx) (*UsedBaseResourceType, error)
FindOrCreate looks for an existing BaseResourceType and creates it if it doesn't exist. It returns a UsedBaseResourceType.
Note that if the BaseResourceType already existed, there's a chance that it will be garbage-collected before the referencing ResourceConfig can be created and used.
This method can return ErrBaseResourceTypeAlreadyExists if two concurrent FindOrCreates clashed. The caller should retry from the start of the transaction.
type BaseResourceTypeFactory ¶
type BaseResourceTypeFactory interface {
Find(name string) (*UsedBaseResourceType, bool, error)
}
func NewBaseResourceTypeFactory ¶
func NewBaseResourceTypeFactory(conn Conn) BaseResourceTypeFactory
type BuildFactory ¶
type BuildFactory interface {
MarkNonInterceptibleBuilds() error
}
func NewBuildFactory ¶
func NewBuildFactory(conn Conn) BuildFactory
type BuildStatus ¶
type BuildStatus string
const ( BuildStatusPending BuildStatus = "pending" BuildStatusStarted BuildStatus = "started" BuildStatusAborted BuildStatus = "aborted" BuildStatusSucceeded BuildStatus = "succeeded" BuildStatusFailed BuildStatus = "failed" BuildStatusErrored BuildStatus = "errored" )
type ConfigVersion ¶
type ConfigVersion int
ConfigVersion is a sequence identifier used for compare-and-swap
type Conn ¶
type Conn interface {
Begin() (Tx, error)
Close() error
Driver() driver.Driver
Exec(query string, args ...interface{}) (sql.Result, error)
Ping() error
Prepare(query string) (*sql.Stmt, error)
Query(query string, args ...interface{}) (*sql.Rows, error)
QueryRow(query string, args ...interface{}) squirrel.RowScanner
SetMaxIdleConns(n int)
SetMaxOpenConns(n int)
Stats() sql.DBStats
}
type Container ¶
type Container interface {
ID() int
Handle() string
WorkerName() string
Metadata() ContainerMetadata
}
type ContainerFactory ¶
type ContainerFactory interface {
FindContainersForDeletion() ([]CreatingContainer, []CreatedContainer, []DestroyingContainer, error)
}
func NewContainerFactory ¶
func NewContainerFactory(conn Conn) ContainerFactory
type ContainerMetadata ¶
type ContainerMetadata struct {
Type ContainerType
StepName string
Attempt string
WorkingDirectory string
User string
PipelineID int
JobID int
BuildID int
PipelineName string
JobName string
BuildName string
}
func (ContainerMetadata) SQLMap ¶
func (metadata ContainerMetadata) SQLMap() map[string]interface{}
func (*ContainerMetadata) ScanTargets ¶
func (metadata *ContainerMetadata) ScanTargets() []interface{}
type ContainerState ¶
type ContainerState string
type ContainerType ¶
type ContainerType string
const ( ContainerTypeCheck ContainerType = "check" ContainerTypeGet ContainerType = "get" ContainerTypePut ContainerType = "put" ContainerTypeTask ContainerType = "task" )
func ContainerTypeFromString ¶
func ContainerTypeFromString(containerType string) (ContainerType, error)
type CreatedContainer ¶
type CreatedContainer interface {
Container
Discontinue() (DestroyingContainer, error)
Destroying() (DestroyingContainer, error)
IsHijacked() bool
MarkAsHijacked() error
}
type CreatedVolume ¶
type CreatedVolume interface {
Handle() string
Path() string
Type() VolumeType
CreateChildForContainer(CreatingContainer, string) (CreatingVolume, error)
Destroying() (DestroyingVolume, error)
Worker() Worker
SizeInBytes() int64
Initialize() error
IsInitialized() (bool, error)
ContainerHandle() string
ParentHandle() string
ResourceType() (*VolumeResourceType, error)
BaseResourceType() (*UsedWorkerBaseResourceType, error)
}
type CreatingContainer ¶
type CreatingContainer interface {
Container
Created() (CreatedContainer, error)
}
type CreatingVolume ¶
type CreatingVolume interface {
Handle() string
ID() int
Created() (CreatedVolume, error)
}
type DestroyingContainer ¶
type DestroyingVolume ¶
type ErrVolumeMarkCreatedFailed ¶
type ErrVolumeMarkCreatedFailed struct {
Handle string
}
func (ErrVolumeMarkCreatedFailed) Error ¶
func (e ErrVolumeMarkCreatedFailed) Error() string
type Pipeline ¶
type Pipeline interface {
ID() int
Name() string
TeamID() int
ConfigVersion() ConfigVersion
SaveJob(job atc.JobConfig) error
CreateJobBuild(jobName string) (Build, error)
CreateResource(name string, config atc.ResourceConfig) (*Resource, error)
AcquireResourceCheckingLock(
logger lager.Logger,
resource *Resource,
resourceTypes atc.VersionedResourceTypes,
length time.Duration,
immediate bool,
) (lock.Lock, bool, error)
ResourceTypes() ([]ResourceType, error)
ResourceType(name string) (ResourceType, bool, error)
Destroy() error
}
type PipelineFactory ¶
func NewPipelineFactory ¶
func NewPipelineFactory(conn Conn, lockFactory lock.LockFactory) PipelineFactory
type PipelinePausedState ¶
type PipelinePausedState string
const ( PipelinePaused PipelinePausedState = "paused" PipelineUnpaused PipelinePausedState = "unpaused" PipelineNoChange PipelinePausedState = "nochange" )
func (PipelinePausedState) Bool ¶
func (state PipelinePausedState) Bool() *bool
type ResourceCache ¶
type ResourceCache struct {
ResourceConfig ResourceConfig // The resource configuration.
Version atc.Version // The version of the resource.
Params atc.Params // The params used when fetching the version.
}
ResourceCache represents an instance of a ResourceConfig's version.
A ResourceCache is created by a `get`, an `image_resource`, or a resource type in a pipeline.
ResourceCaches are garbage-collected by gc.ResourceCacheCollector.
type ResourceCacheFactory ¶
type ResourceCacheFactory interface {
FindOrCreateResourceCache(
logger lager.Logger,
resourceUser ResourceUser,
resourceTypeName string,
version atc.Version,
source atc.Source,
params atc.Params,
resourceTypes atc.VersionedResourceTypes,
) (*UsedResourceCache, error)
CleanUsesForFinishedBuilds() error
CleanUsesForInactiveResourceTypes() error
CleanUsesForInactiveResources() error
CleanUpInvalidCaches() error
}
func NewResourceCacheFactory ¶
func NewResourceCacheFactory(conn Conn, lockFactory lock.LockFactory) ResourceCacheFactory
type ResourceConfig ¶
type ResourceConfig struct {
// A resource type provided by a resource.
CreatedByResourceCache *ResourceCache
// A resource type provided by a worker.
CreatedByBaseResourceType *BaseResourceType
// The resource's source configuration.
Source atc.Source
}
ResourceConfig represents a resource type and config source.
Resources in a pipeline, resource types in a pipeline, and `image_resource` fields in a task all result in a reference to a ResourceConfig.
ResourceConfigs are garbage-collected by gc.ResourceConfigCollector.
type ResourceConfigFactory ¶
type ResourceConfigFactory interface {
FindOrCreateResourceConfig(
logger lager.Logger,
user ResourceUser,
resourceType string,
source atc.Source,
resourceTypes atc.VersionedResourceTypes,
) (*UsedResourceConfig, error)
CleanConfigUsesForFinishedBuilds() error
CleanConfigUsesForInactiveResourceTypes() error
CleanConfigUsesForInactiveResources() error
CleanUselessConfigs() error
}
func NewResourceConfigFactory ¶
func NewResourceConfigFactory(conn Conn, lockFactory lock.LockFactory) ResourceConfigFactory
type ResourceType ¶
type ResourceTypeNotFoundError ¶
type ResourceTypeNotFoundError struct {
// contains filtered or unexported fields
}
func (ResourceTypeNotFoundError) Error ¶
func (e ResourceTypeNotFoundError) Error() string
type ResourceUser ¶
type ResourceUser interface {
UseResourceCache(lager.Logger, Tx, lock.LockFactory, ResourceCache) (*UsedResourceCache, error)
UseResourceConfig(lager.Logger, Tx, lock.LockFactory, ResourceConfig) (*UsedResourceConfig, error)
}
func ForBuild ¶
func ForBuild(id int) ResourceUser
func ForResource ¶
func ForResource(id int) ResourceUser
func ForResourceType ¶
func ForResourceType(id int) ResourceUser
type Team ¶
type Team interface {
ID() int
SavePipeline(
pipelineName string,
config atc.Config,
from ConfigVersion,
pausedState PipelinePausedState,
) (Pipeline, bool, error)
FindPipelineByName(pipelineName string) (Pipeline, bool, error)
CreateOneOffBuild() (Build, error)
SaveWorker(atcWorker atc.Worker, ttl time.Duration) (Worker, error)
Workers() ([]Worker, error)
FindContainerByHandle(string) (Container, bool, error)
FindContainersByMetadata(ContainerMetadata) ([]Container, error)
FindCreatedContainerByHandle(string) (CreatedContainer, bool, error)
FindWorkerForResourceCheckContainer(resourceConfig *UsedResourceConfig) (Worker, bool, error)
FindResourceCheckContainerOnWorker(workerName string, resourceConfig *UsedResourceConfig) (CreatingContainer, CreatedContainer, error)
CreateResourceCheckContainer(workerName string, resourceConfig *UsedResourceConfig, meta ContainerMetadata) (CreatingContainer, error)
CreateResourceGetContainer(workerName string, resourceConfig *UsedResourceCache, meta ContainerMetadata) (CreatingContainer, error)
FindWorkerForContainer(handle string) (Worker, bool, error)
FindWorkerForBuildContainer(buildID int, planID atc.PlanID) (Worker, bool, error)
FindBuildContainerOnWorker(workerName string, buildID int, planID atc.PlanID) (CreatingContainer, CreatedContainer, error)
CreateBuildContainer(workerName string, buildID int, planID atc.PlanID, meta ContainerMetadata) (CreatingContainer, error)
}
type TeamFactory ¶
type TeamFactory interface {
CreateTeam(name string) (Team, error)
FindTeam(name string) (Team, bool, error)
GetByID(teamID int) Team
}
func NewTeamFactory ¶
func NewTeamFactory(conn Conn, lockFactory lock.LockFactory) TeamFactory
type Tx ¶
type Tx interface {
Commit() error
Exec(query string, args ...interface{}) (sql.Result, error)
Prepare(query string) (*sql.Stmt, error)
Query(query string, args ...interface{}) (*sql.Rows, error)
QueryRow(query string, args ...interface{}) squirrel.RowScanner
Rollback() error
Stmt(stmt *sql.Stmt) *sql.Stmt
}
type UsedBaseResourceType ¶
UsedBaseResourceType is created whenever a ResourceConfig is used, either for a build, a resource in the pipeline, or a resource type in the pipeline.
So long as the UsedBaseResourceType's ID is referenced by a ResourceConfig that is in use, this guarantees that the BaseResourceType will not be removed. That is to say that its "Use" is vicarious.
type UsedResourceCache ¶
type UsedResourceCache struct {
ID int
ResourceConfig *UsedResourceConfig
Version atc.Version
}
UsedResourceCache is created whenever a ResourceCache is Created and/or Used.
So long as the UsedResourceCache exists, the underlying ResourceCache can not be removed.
UsedResourceCaches become unused by the gc.ResourceCacheCollector, which may then lead to the ResourceCache being garbage-collected.
See FindOrCreateForBuild, FindOrCreateForResource, and FindOrCreateForResourceType for more information on when it becomes unused.
func (*UsedResourceCache) BaseResourceType ¶
func (usedResourceCache *UsedResourceCache) BaseResourceType() *UsedBaseResourceType
type UsedResourceConfig ¶
type UsedResourceConfig struct {
ID int
CreatedByResourceCache *UsedResourceCache
CreatedByBaseResourceType *UsedBaseResourceType
}
UsedResourceConfig is created whenever a ResourceConfig is Created and/or Used.
So long as the UsedResourceConfig exists, the underlying ResourceConfig can not be removed.
UsedResourceConfigs become unused by the gc.ResourceConfigCollector, which may then lead to the ResourceConfig being garbage-collected.
See FindOrCreateForBuild, FindOrCreateForResource, and FindOrCreateForResourceType for more information on when it becomes unused.
type UsedWorkerResourceCache ¶
type UsedWorkerResourceCache struct {
ID int
}
type UsedWorkerResourceType ¶
type UsedWorkerResourceType struct {
ID int
Worker Worker
UsedBaseResourceType *UsedBaseResourceType
}
type VolumeFactory ¶
type VolumeFactory interface {
GetTeamVolumes(teamID int) ([]CreatedVolume, error)
CreateContainerVolume(int, Worker, CreatingContainer, string) (CreatingVolume, error)
FindContainerVolume(int, Worker, CreatingContainer, string) (CreatingVolume, CreatedVolume, error)
FindBaseResourceTypeVolume(int, *UsedWorkerBaseResourceType) (CreatingVolume, CreatedVolume, error)
CreateBaseResourceTypeVolume(int, *UsedWorkerBaseResourceType) (CreatingVolume, error)
FindResourceCacheVolume(Worker, *UsedResourceCache) (CreatingVolume, CreatedVolume, error)
FindResourceCacheInitializedVolume(Worker, *UsedResourceCache) (CreatedVolume, bool, error)
CreateResourceCacheVolume(Worker, *UsedResourceCache) (CreatingVolume, error)
FindVolumesForContainer(CreatedContainer) ([]CreatedVolume, error)
GetOrphanedVolumes() ([]CreatedVolume, []DestroyingVolume, error)
GetDuplicateResourceCacheVolumes() ([]CreatingVolume, []CreatedVolume, []DestroyingVolume, error)
FindCreatedVolume(handle string) (CreatedVolume, bool, error)
}
func NewVolumeFactory ¶
func NewVolumeFactory(conn Conn) VolumeFactory
type VolumeResourceType ¶
type VolumeResourceType struct {
WorkerBaseResourceType *UsedWorkerBaseResourceType
ResourceType *VolumeResourceType
Version atc.Version
}
type VolumeState ¶
type VolumeState string
type VolumeType ¶
type VolumeType string
type Worker ¶
type Worker interface {
Name() string
State() WorkerState
GardenAddr() *string
BaggageclaimURL() *string
HTTPProxyURL() string
HTTPSProxyURL() string
NoProxy() string
ActiveContainers() int
ResourceTypes() []atc.WorkerResourceType
Platform() string
Tags() []string
TeamID() int
TeamName() string
StartTime() int64
ExpiresAt() time.Time
Reload() (bool, error)
Land() error
Retire() error
Prune() error
Delete() error
}
type WorkerBaseResourceType ¶
func (WorkerBaseResourceType) Find ¶
func (workerBaseResourceType WorkerBaseResourceType) Find(runner sq.Runner) (*UsedWorkerBaseResourceType, bool, error)
type WorkerBaseResourceTypeFactory ¶
type WorkerBaseResourceTypeFactory interface {
Find(name string, worker Worker) (*UsedWorkerBaseResourceType, bool, error)
}
func NewWorkerBaseResourceTypeFactory ¶
func NewWorkerBaseResourceTypeFactory(conn Conn) WorkerBaseResourceTypeFactory
type WorkerFactory ¶
type WorkerFactory interface {
GetWorker(name string) (Worker, bool, error)
SaveWorker(atcWorker atc.Worker, ttl time.Duration) (Worker, error)
HeartbeatWorker(worker atc.Worker, ttl time.Duration) (Worker, error)
Workers() ([]Worker, error)
}
func NewWorkerFactory ¶
func NewWorkerFactory(conn Conn) WorkerFactory
type WorkerLifecycle ¶
type WorkerLifecycle interface {
StallUnresponsiveWorkers() ([]string, error)
LandFinishedLandingWorkers() ([]string, error)
DeleteFinishedRetiringWorkers() ([]string, error)
}
func NewWorkerLifecycle ¶
func NewWorkerLifecycle(conn Conn) WorkerLifecycle
type WorkerResourceCache ¶
type WorkerResourceCache struct {
WorkerName string
ResourceCache *UsedResourceCache
}
func (WorkerResourceCache) Find ¶
func (workerResourceCache WorkerResourceCache) Find(runner sq.Runner) (*UsedWorkerResourceCache, bool, error)
func (WorkerResourceCache) FindOrCreate ¶
func (workerResourceCache WorkerResourceCache) FindOrCreate(tx Tx) (*UsedWorkerResourceCache, error)
type WorkerResourceType ¶
type WorkerResourceType struct {
Worker Worker
Image string // The path to the image, e.g. '/opt/concourse/resources/git'.
Version string // The version of the image, e.g. a SHA of the rootfs.
BaseResourceType *BaseResourceType
}
func (WorkerResourceType) FindOrCreate ¶
func (wrt WorkerResourceType) FindOrCreate(tx Tx) (*UsedWorkerResourceType, error)
type WorkerState ¶
type WorkerState string
Source Files
¶
- base_resource_type.go
- base_resource_type_factory.go
- build.go
- build_factory.go
- container.go
- container_factory.go
- container_metadata.go
- pipeline.go
- pipeline_factory.go
- pipeline_locks.go
- psql.go
- resource.go
- resource_cache.go
- resource_cache_factory.go
- resource_config.go
- resource_config_factory.go
- resource_type.go
- safe_find_or_create.go
- scannable.go
- team.go
- team_factory.go
- user.go
- volume.go
- volume_factory.go
- worker.go
- worker_base_resource_type.go
- worker_base_resource_type_factory.go
- worker_factory.go
- worker_lifecycle.go
- worker_resource_cache.go
- worker_resource_type.go
- wrap.go
Directories
¶
| Path | Synopsis |
|---|---|
|
This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter
|
This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter This file was generated by counterfeiter |