50 lines
1.4 KiB
Go
50 lines
1.4 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
|
|
|
|
AddLink(id string, link CacheInfoLink, target string) error
|
|
WalkLinks(id string, link CacheInfoLink, fn func(id string) error) error
|
|
}
|
|
|
|
// 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 {
|
|
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
|
|
}
|