Documentation ¶
Index ¶
- Variables
- func CacheOptGetterOf(ctx context.Context) func(includeAncestors bool, keys ...interface{}) map[interface{}]interface{}
- func ProgressControllerFromContext(ctx context.Context) progress.Controller
- func SplitResultProxy(res ResultProxy) (ResultProxy, ResultProxy)
- func WithCacheOptGetter(ctx context.Context, ...) context.Context
- func WrapSlowCache(err error, index Index, res Result) error
- type Builder
- type CacheExportMode
- type CacheExportOpt
- type CacheExporter
- type CacheExporterRecord
- type CacheExporterTarget
- type CacheInfoLink
- type CacheKey
- type CacheKeyStorage
- type CacheKeyWithSelector
- type CacheLink
- type CacheManager
- type CacheMap
- type CacheOpts
- type CacheRecord
- type CacheResult
- type CacheResultStorage
- type CachedResult
- type CachedResultWithProvenance
- type Edge
- type ExportableCacheKey
- type Index
- type Job
- func (j *Job) Build(ctx context.Context, e Edge) (CachedResultWithProvenance, error)
- func (j *Job) CloseProgress()
- func (j *Job) Discard() error
- func (j *Job) EachValue(ctx context.Context, key string, fn func(interface{}) error) error
- func (j *Job) InContext(ctx context.Context, f func(context.Context, session.Group) error) error
- func (j *Job) RegisterCompleteTime() time.Time
- func (j *Job) SetValue(key string, v interface{})
- func (j *Job) StartedTime() time.Time
- func (j *Job) Status(ctx context.Context, ch chan *client.SolveStatus) error
- func (j *Job) UniqueID() string
- type LoadedResult
- type Op
- type PreprocessFunc
- type ProvenanceProvider
- type ReleaseFunc
- type Remote
- type ResolveOpFunc
- type Result
- type ResultBasedCacheFunc
- type ResultProxy
- type SharedCachedResult
- type SharedResult
- type SlowCacheError
- type Solver
- type SolverOpt
- type Vertex
- type VertexOptions
Constants ¶
This section is empty.
Variables ¶
var ErrNotFound = errors.Errorf("not found")
Functions ¶
func CacheOptGetterOf ¶
func ProgressControllerFromContext ¶
func ProgressControllerFromContext(ctx context.Context) progress.Controller
func SplitResultProxy ¶
func SplitResultProxy(res ResultProxy) (ResultProxy, ResultProxy)
func WithCacheOptGetter ¶
Types ¶
type CacheExportMode ¶
type CacheExportMode int
CacheExportMode is the type for setting cache exporting modes
const ( // CacheExportModeMin exports a topmost allowed vertex and its dependencies // that already have transferable layers CacheExportModeMin CacheExportMode = iota // CacheExportModeMax exports all possible non-root vertexes CacheExportModeMax // CacheExportModeRemoteOnly only exports vertexes that already have // transferable layers CacheExportModeRemoteOnly )
type CacheExportOpt ¶
type CacheExportOpt struct { // ResolveRemotes can convert a build result to transferable objects ResolveRemotes func(context.Context, Result) ([]*Remote, error) // Mode defines a cache export algorithm Mode CacheExportMode // Session is the session group to client (for auth credentials etc) Session session.Group // CompressionOpt is an option to specify the compression of the object to load. // If specified, all objects that meet the option will be cached. CompressionOpt *compression.Config // ExportRoots defines if records for root vertexes should be exported. ExportRoots bool }
CacheExportOpt defines options for exporting build cache
type CacheExporter ¶
type CacheExporter interface {
ExportTo(ctx context.Context, t CacheExporterTarget, opt CacheExportOpt) ([]CacheExporterRecord, error)
}
CacheExporter can export the artifacts of the build chain
type CacheExporterRecord ¶
type CacheExporterRecord interface { AddResult(vtx digest.Digest, index int, createdAt time.Time, result *Remote) LinkFrom(src CacheExporterRecord, index int, selector string) }
CacheExporterRecord is a single object being exported
type CacheExporterTarget ¶
type CacheExporterTarget interface { Add(dgst digest.Digest) CacheExporterRecord Visit(interface{}) Visited(interface{}) bool }
CacheExporterTarget defines object capable of receiving exports
type CacheInfoLink ¶
type CacheInfoLink struct { Input Index `json:"Input,omitempty"` Output Index `json:"Output,omitempty"` Digest digest.Digest `json:"Digest,omitempty"` Selector digest.Digest `json:"Selector,omitempty"` }
CacheInfoLink is a link between two cache keys
type CacheKey ¶
type CacheKey struct { ID string // contains filtered or unexported fields }
func NewCacheKey ¶
NewCacheKey creates a new cache key for a specific output index
func (*CacheKey) Deps ¶
func (ck *CacheKey) Deps() [][]CacheKeyWithSelector
func (*CacheKey) TraceFields ¶
type CacheKeyStorage ¶
type CacheKeyStorage interface { Exists(id string) bool Walk(fn func(id string) error) error WalkResults(id string, fn func(CacheResult) error) error Load(id string, resultID string) (CacheResult, error) AddResult(id string, res CacheResult) error Release(resultID string) error WalkIDsByResult(resultID string, fn func(string) error) error AddLink(id string, link CacheInfoLink, target string) error WalkLinks(id string, link CacheInfoLink, fn func(id string) error) error HasLink(id string, link CacheInfoLink, target string) bool WalkBacklinks(id string, fn func(id string, link CacheInfoLink) error) error }
CacheKeyStorage is interface for persisting cache metadata
func NewInMemoryCacheStorage ¶
func NewInMemoryCacheStorage() CacheKeyStorage
type CacheKeyWithSelector ¶
type CacheKeyWithSelector struct { Selector digest.Digest CacheKey ExportableCacheKey }
CacheKeyWithSelector combines a cache key with an optional selector digest. Used to limit the matches for dependency cache key.
func (CacheKeyWithSelector) TraceFields ¶
func (ck CacheKeyWithSelector) TraceFields() map[string]any
type CacheLink ¶
type CacheLink struct { Source digest.Digest `json:",omitempty"` Input Index `json:",omitempty"` Output Index `json:",omitempty"` Base digest.Digest `json:",omitempty"` Selector digest.Digest `json:",omitempty"` }
CacheLink is a link between two cache records
type CacheManager ¶
type CacheManager interface { // ID is used to identify cache providers that are backed by same source // to avoid duplicate calls to the same provider. ID() string // Query searches for cache paths from one cache key to the output of a // possible match. Query(inp []CacheKeyWithSelector, inputIndex Index, dgst digest.Digest, outputIndex Index) ([]*CacheKey, error) Records(ctx context.Context, ck *CacheKey) ([]*CacheRecord, error) // Load loads a cache record into a result reference. Load(ctx context.Context, rec *CacheRecord) (Result, error) // Save saves a result based on a cache key Save(key *CacheKey, s Result, createdAt time.Time) (*ExportableCacheKey, error) }
CacheManager determines if there is a result that matches the cache keys generated during the build that could be reused instead of fully reevaluating the vertex and its inputs. There can be multiple cache managers, and specific managers can be defined per vertex using `VertexOptions`.
func NewCacheManager ¶
func NewCacheManager(ctx context.Context, id string, storage CacheKeyStorage, results CacheResultStorage) CacheManager
NewCacheManager creates a new cache manager with specific storage backend
func NewCombinedCacheManager ¶
func NewCombinedCacheManager(cms []CacheManager, main CacheManager) CacheManager
func NewInMemoryCacheManager ¶
func NewInMemoryCacheManager() CacheManager
NewInMemoryCacheManager creates a new in-memory cache manager
type CacheMap ¶
type CacheMap struct { // Digest returns a checksum for the operation. The operation result can be // cached by a checksum that combines this digest and the cache keys of the // operation's inputs. // // For example, in LLB this digest is a manifest digest for OCI images, or // commit SHA for git sources. Digest digest.Digest // Deps contain optional selectors or content-based cache functions for its // inputs. Deps []struct { // Selector is a digest that is merged with the cache key of the input. // Selectors are not merged with the result of the `ComputeDigestFunc` for // this input. Selector digest.Digest // ComputeDigestFunc should return a digest for the input based on its return // value. // // For example, in LLB this is invoked to calculate the cache key based on // the checksum of file contents from input snapshots. ComputeDigestFunc ResultBasedCacheFunc // PreprocessFunc is a function that runs on an input before it is passed to op PreprocessFunc PreprocessFunc } // Opts specifies generic options that will be passed to cache load calls if/when // the key associated with this CacheMap is used to load a ref. It allows options // such as oci descriptor content providers and progress writers to be passed to // the cache. Opts should not have any impact on the computed cache key. Opts CacheOpts }
CacheMap is a description for calculating the cache key of an operation.
type CacheRecord ¶
type CacheRecord struct { ID string Size int CreatedAt time.Time Priority int // contains filtered or unexported fields }
CacheRecord is an identifier for loading in cache
func (*CacheRecord) TraceFields ¶
func (ck *CacheRecord) TraceFields() map[string]any
type CacheResult ¶
CacheResult is a record for a single solve result
type CacheResultStorage ¶
type CacheResultStorage interface { Save(Result, time.Time) (CacheResult, error) Load(ctx context.Context, res CacheResult) (Result, error) LoadRemotes(ctx context.Context, res CacheResult, compression *compression.Config, s session.Group) ([]*Remote, error) Exists(ctx context.Context, id string) bool }
CacheResultStorage is interface for converting cache metadata result to actual solve result
func NewInMemoryResultStorage ¶
func NewInMemoryResultStorage() CacheResultStorage
type CachedResult ¶
type CachedResult interface { Result CacheKeys() []ExportableCacheKey }
CachedResult is a result connected with its cache key
func NewCachedResult ¶
func NewCachedResult(res Result, k []ExportableCacheKey) CachedResult
NewCachedResult combines a result and cache key into cached result
type CachedResultWithProvenance ¶
type CachedResultWithProvenance interface { CachedResult WalkProvenance(context.Context, func(ProvenanceProvider) error) error }
type Edge ¶
Edge is a connection point between vertexes. An edge references a specific output of a vertex's operation. Edges are used as inputs to other vertexes.
type ExportableCacheKey ¶
type ExportableCacheKey struct { *CacheKey Exporter CacheExporter }
ExportableCacheKey is a cache key connected with an exporter that can export a chain of cacherecords pointing to that key
type Index ¶
type Index int
Index is an index value for the return array of an operation. Index starts counting from zero.
type Job ¶
type Job struct { SessionID string // contains filtered or unexported fields }
func (*Job) CloseProgress ¶
func (j *Job) CloseProgress()
func (*Job) RegisterCompleteTime ¶
func (*Job) StartedTime ¶
type LoadedResult ¶
type LoadedResult struct { Result Result CacheResult CacheResult CacheKey *CacheKey }
func (*LoadedResult) TraceFields ¶
func (r *LoadedResult) TraceFields() map[string]any
type Op ¶
type Op interface { // CacheMap returns structure describing how the operation is cached. // Currently only roots are allowed to return multiple cache maps per op. CacheMap(context.Context, session.Group, int) (*CacheMap, bool, error) // Exec runs an operation given results from previous operations. Exec(ctx context.Context, g session.Group, inputs []Result) (outputs []Result, err error) // Acquire acquires the necessary resources to execute the `Op`. Acquire(ctx context.Context) (release ReleaseFunc, err error) }
Op defines how the solver can evaluate the properties of a vertex operation. An op is executed in the worker, and is retrieved from the vertex by the value of `vertex.Sys()`. The solver is configured with a resolve function to convert a `vertex.Sys()` into an `Op`.
type ProvenanceProvider ¶
type ProvenanceProvider interface {
IsProvenanceProvider()
}
type ReleaseFunc ¶
type ReleaseFunc func()
type Remote ¶
type Remote struct { Descriptors []ocispecs.Descriptor Provider content.Provider }
Remote is a descriptor or a list of stacked descriptors that can be pulled from a content provider TODO: add closer to keep referenced data from getting deleted
type ResolveOpFunc ¶
ResolveOpFunc finds an Op implementation for a Vertex
type Result ¶
type Result interface { ID() string Release(context.Context) error Sys() interface{} Clone() Result }
Result is an abstract return value for a solve
type ResultBasedCacheFunc ¶
type ResultProxy ¶
type ResultProxy interface { ID() string Result(context.Context) (CachedResult, error) Release(context.Context) error Definition() *pb.Definition Provenance() interface{} }
type SharedCachedResult ¶
type SharedCachedResult struct {}
func NewSharedCachedResult ¶
func NewSharedCachedResult(res CachedResult) *SharedCachedResult
func (*SharedCachedResult) Clone ¶
func (r *SharedCachedResult) Clone() Result
func (*SharedCachedResult) CloneCachedResult ¶
func (r *SharedCachedResult) CloneCachedResult() CachedResult
type SharedResult ¶
type SharedResult struct {
// contains filtered or unexported fields
}
SharedResult is a result that can be cloned
func NewSharedResult ¶
func NewSharedResult(main Result) *SharedResult
func (*SharedResult) Clone ¶
func (r *SharedResult) Clone() Result
type SlowCacheError ¶
func (*SlowCacheError) ToSubject ¶
func (e *SlowCacheError) ToSubject() errdefs.IsSolve_Subject
func (*SlowCacheError) Unwrap ¶
func (e *SlowCacheError) Unwrap() error
type Solver ¶
type Solver struct {
// contains filtered or unexported fields
}
Solver provides a shared graph of all the vertexes currently being processed. Every vertex that is being solved needs to be loaded into job first. Vertex operations are invoked and progress tracking happens through jobs.
type SolverOpt ¶
type SolverOpt struct { ResolveOpFunc ResolveOpFunc DefaultCache CacheManager }
type Vertex ¶
type Vertex interface { // Digest returns a checksum of the definition up to the vertex including // all of its inputs. Digest() digest.Digest // Sys returns an object used to resolve the executor for this vertex. // In LLB solver, this value would be of type `llb.Op`. Sys() interface{} // Options return metadata associated with the vertex that doesn't change the // definition or equality check of it. Options() VertexOptions // Inputs returns an array of edges the vertex depends on. An input edge is // a vertex and an index from the returned array of results from an executor // returned by Sys(). A vertex may have zero inputs. Inputs() []Edge Name() string }
Vertex is a node in a build graph. It defines an interface for a content-addressable operation and its inputs.
type VertexOptions ¶
type VertexOptions struct { IgnoreCache bool CacheSources []CacheManager Description map[string]string // text values with no special meaning for solver ExportCache *bool // WorkerConstraint ProgressGroup *pb.ProgressGroup }
VertexOptions define optional metadata for a vertex that doesn't change the definition or equality check of it. These options are not contained in the vertex digest.