2018-02-21 19:01:43 +00:00
|
|
|
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 {
|
|
|
|
Get(id string) (CacheKeyInfo, error)
|
2018-02-27 01:39:18 +00:00
|
|
|
Walk(fn func(id string) error) error
|
2018-02-26 18:51:38 +00:00
|
|
|
Set(info CacheKeyInfo) error
|
2018-02-21 19:01:43 +00:00
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
AddLink(id string, link CacheInfoLink, target string) error
|
|
|
|
WalkLinks(id string, link CacheInfoLink, fn func(id string) error) error
|
|
|
|
}
|
|
|
|
|
|
|
|
// CacheKeyInfo is storable metadata about single cache key
|
|
|
|
type CacheKeyInfo struct {
|
|
|
|
ID string
|
|
|
|
Base digest.Digest
|
|
|
|
Output int
|
2018-03-16 20:34:06 +00:00
|
|
|
// Deps []CacheKeyInfoWithSelector
|
2018-02-21 19:01:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// CacheKeyInfoWithSelector is CacheKeyInfo combined with a selector
|
|
|
|
type CacheKeyInfoWithSelector struct {
|
|
|
|
ID string
|
|
|
|
Selector digest.Digest
|
|
|
|
}
|
|
|
|
|
|
|
|
// CacheResult is a record for a single solve result
|
|
|
|
type CacheResult struct {
|
|
|
|
// Payload []byte
|
|
|
|
CreatedAt time.Time
|
|
|
|
ID string
|
|
|
|
}
|
|
|
|
|
|
|
|
// CacheInfoLink is a link between two cache keys
|
|
|
|
type CacheInfoLink struct {
|
2018-02-26 18:51:38 +00:00
|
|
|
Input Index `json:"Input,omitempty"`
|
|
|
|
Output Index `json:"Output,omitempty"`
|
|
|
|
Digest digest.Digest `json:"Digest,omitempty"`
|
|
|
|
Selector digest.Digest `json:"Selector,omitempty"`
|
2018-02-21 19:01:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// 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)
|
2018-02-27 01:39:18 +00:00
|
|
|
Exists(id string) bool
|
2018-02-21 19:01:43 +00:00
|
|
|
}
|