buildkit/solver/cachestorage.go

52 lines
1.5 KiB
Go

package solver
import (
"context"
"time"
digest "github.com/opencontainers/go-digest"
"github.com/pkg/errors"
)
var ErrNotFound = errors.Errorf("not found")
// CacheKeyStorage is interface for persisting cache metadata
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
}
// CacheResult is a record for a single solve result
type CacheResult struct {
CreatedAt time.Time
ID string
}
// CacheInfoLink is a link between two cache keys
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"`
}
// CacheResultStorage is interface for converting cache metadata result to
// actual solve result
type CacheResultStorage interface {
Save(Result) (CacheResult, error)
Load(ctx context.Context, res CacheResult) (Result, error)
LoadRemote(ctx context.Context, res CacheResult) (*Remote, error)
Exists(id string) bool
}