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 }