solver: attach causing vertex in an error
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>v0.8
parent
ae3b75d56d
commit
cce301badd
|
@ -299,6 +299,11 @@ func buildAction(clicontext *cli.Context) error {
|
|||
// temp test
|
||||
if os.Getenv("BUILDCTL_DEBUG_ERROR_UNSTABLE") == "1" {
|
||||
log.Printf("%+v", errdefs.StackFormatter(err))
|
||||
|
||||
var ve *errdefs.VertexError
|
||||
if errors.As(err, &ve) {
|
||||
log.Printf("error-vertex: %s", ve.Digest)
|
||||
}
|
||||
}
|
||||
|
||||
return err
|
||||
|
|
|
@ -342,7 +342,7 @@ func defaultConfigPath() string {
|
|||
func defaultConf() (config.Config, *toml.MetaData, error) {
|
||||
cfg, md, err := LoadFile(defaultConfigPath())
|
||||
if err != nil {
|
||||
var pe os.PathError
|
||||
var pe *os.PathError
|
||||
if !errors.As(err, &pe) {
|
||||
return config.Config{}, nil, err
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@ func withLocation(err error, startLine, endLine int) error {
|
|||
if err == nil {
|
||||
return nil
|
||||
}
|
||||
var el ErrorLocation
|
||||
var el *ErrorLocation
|
||||
if errors.As(err, &el) {
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -2,10 +2,6 @@ syntax = "proto3";
|
|||
|
||||
package errdefs;
|
||||
|
||||
import "github.com/gogo/protobuf/gogoproto/gogo.proto";
|
||||
|
||||
option (gogoproto.stable_marshaler_all) = true;
|
||||
|
||||
message Stack {
|
||||
repeated Frame frames = 1;
|
||||
repeated string cmdline = 2;
|
||||
|
@ -21,7 +17,7 @@ message Frame {
|
|||
}
|
||||
|
||||
message Vertex {
|
||||
string digest = 1 [(gogoproto.customtype) = "github.com/opencontainers/go-digest.Digest", (gogoproto.nullable) = false];
|
||||
string digest = 1;
|
||||
}
|
||||
|
||||
message Source {
|
||||
|
|
|
@ -3,6 +3,7 @@ package errdefs
|
|||
import (
|
||||
"github.com/golang/protobuf/proto"
|
||||
"github.com/golang/protobuf/ptypes"
|
||||
"github.com/opencontainers/go-digest"
|
||||
"github.com/pkg/errors"
|
||||
spb "google.golang.org/genproto/googleapis/rpc/status"
|
||||
"google.golang.org/grpc/codes"
|
||||
|
@ -29,6 +30,11 @@ func ToGRPC(err error) error {
|
|||
details = append(details, st)
|
||||
}
|
||||
|
||||
var ve *VertexError
|
||||
if errors.As(err, &ve) {
|
||||
details = append(details, &ve.Vertex)
|
||||
}
|
||||
|
||||
if len(details) > 0 {
|
||||
if st2, err := st.WithDetails(details...); err == nil {
|
||||
st = st2
|
||||
|
@ -105,7 +111,7 @@ func FromGRPC(err error) error {
|
|||
continue
|
||||
}
|
||||
switch detail.Message.(type) {
|
||||
case *Stack:
|
||||
case *Stack, *Vertex:
|
||||
details = append(details, detail.Message)
|
||||
default:
|
||||
n.Details = append(n.Details, d)
|
||||
|
@ -120,6 +126,8 @@ func FromGRPC(err error) error {
|
|||
if v != nil {
|
||||
err = &withStack{stack: *v, error: err}
|
||||
}
|
||||
case *Vertex:
|
||||
err = WrapVertex(err, digest.Digest(v.Digest))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -18,11 +18,6 @@ func SetVersionInfo(v, r string) {
|
|||
revision = r
|
||||
}
|
||||
|
||||
type VertexError struct {
|
||||
Vertex
|
||||
error
|
||||
}
|
||||
|
||||
func Traces(err error) []*Stack {
|
||||
var st []*Stack
|
||||
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
package errdefs
|
||||
|
||||
import "github.com/opencontainers/go-digest"
|
||||
|
||||
type VertexError struct {
|
||||
Vertex
|
||||
error
|
||||
}
|
||||
|
||||
func (e *VertexError) Unwrap() error {
|
||||
return e.error
|
||||
}
|
||||
|
||||
func WrapVertex(err error, dgst digest.Digest) error {
|
||||
if err == nil {
|
||||
return nil
|
||||
}
|
||||
return &VertexError{Vertex: Vertex{Digest: dgst.String()}, error: err}
|
||||
}
|
|
@ -9,6 +9,7 @@ import (
|
|||
|
||||
"github.com/moby/buildkit/client"
|
||||
"github.com/moby/buildkit/session"
|
||||
"github.com/moby/buildkit/solver/errdefs"
|
||||
"github.com/moby/buildkit/util/flightcontrol"
|
||||
"github.com/moby/buildkit/util/progress"
|
||||
"github.com/moby/buildkit/util/tracing"
|
||||
|
@ -53,6 +54,7 @@ type state struct {
|
|||
|
||||
vtx Vertex
|
||||
clientVertex client.Vertex
|
||||
origDigest digest.Digest // original LLB digest. TODO: probably better to use string ID so this isn't needed
|
||||
|
||||
mu sync.Mutex
|
||||
op *sharedOp
|
||||
|
@ -318,6 +320,7 @@ func (jl *Solver) loadUnlocked(v, parent Vertex, j *Job, cache map[Vertex]Vertex
|
|||
mainCache: jl.opts.DefaultCache,
|
||||
cache: map[string]CacheManager{},
|
||||
solver: jl,
|
||||
origDigest: origVtx.Digest(),
|
||||
}
|
||||
jl.actives[dgst] = st
|
||||
}
|
||||
|
@ -564,7 +567,10 @@ func (s *sharedOp) LoadCache(ctx context.Context, rec *CacheRecord) (Result, err
|
|||
return res, err
|
||||
}
|
||||
|
||||
func (s *sharedOp) CalcSlowCache(ctx context.Context, index Index, f ResultBasedCacheFunc, res Result) (digest.Digest, error) {
|
||||
func (s *sharedOp) CalcSlowCache(ctx context.Context, index Index, f ResultBasedCacheFunc, res Result) (dgst digest.Digest, err error) {
|
||||
defer func() {
|
||||
err = errdefs.WrapVertex(err, s.st.origDigest)
|
||||
}()
|
||||
key, err := s.g.Do(ctx, fmt.Sprintf("slow-compute-%d", index), func(ctx context.Context) (interface{}, error) {
|
||||
s.slowMu.Lock()
|
||||
// TODO: add helpers for these stored values
|
||||
|
@ -609,7 +615,10 @@ func (s *sharedOp) CalcSlowCache(ctx context.Context, index Index, f ResultBased
|
|||
return key.(digest.Digest), nil
|
||||
}
|
||||
|
||||
func (s *sharedOp) CacheMap(ctx context.Context, index int) (*cacheMapResp, error) {
|
||||
func (s *sharedOp) CacheMap(ctx context.Context, index int) (resp *cacheMapResp, err error) {
|
||||
defer func() {
|
||||
err = errdefs.WrapVertex(err, s.st.origDigest)
|
||||
}()
|
||||
op, err := s.getOp()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
@ -665,6 +674,9 @@ func (s *sharedOp) CacheMap(ctx context.Context, index int) (*cacheMapResp, erro
|
|||
}
|
||||
|
||||
func (s *sharedOp) Exec(ctx context.Context, inputs []Result) (outputs []Result, exporters []ExportableCacheKey, err error) {
|
||||
defer func() {
|
||||
err = errdefs.WrapVertex(err, s.st.origDigest)
|
||||
}()
|
||||
op, err := s.getOp()
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
|
|
Loading…
Reference in New Issue