stack: remove helper functions from error stack traces
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>v0.8
parent
4f3fb6155a
commit
ca46949277
|
@ -181,6 +181,10 @@ func FromGRPC(err error) error {
|
|||
err = d.WrapError(err)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
stack.Helper()
|
||||
}
|
||||
|
||||
return stack.Enable(err)
|
||||
}
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"log"
|
||||
"os"
|
||||
|
||||
"github.com/moby/buildkit/util/stack"
|
||||
"github.com/pkg/errors"
|
||||
"google.golang.org/grpc"
|
||||
)
|
||||
|
@ -13,6 +14,7 @@ func UnaryServerInterceptor(ctx context.Context, req interface{}, info *grpc.Una
|
|||
resp, err = handler(ctx, req)
|
||||
oldErr := err
|
||||
if err != nil {
|
||||
stack.Helper()
|
||||
err = ToGRPC(err)
|
||||
}
|
||||
if oldErr != nil && err == nil {
|
||||
|
@ -28,14 +30,25 @@ func UnaryServerInterceptor(ctx context.Context, req interface{}, info *grpc.Una
|
|||
}
|
||||
|
||||
func StreamServerInterceptor(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error {
|
||||
return ToGRPC(handler(srv, ss))
|
||||
err := ToGRPC(handler(srv, ss))
|
||||
if err != nil {
|
||||
stack.Helper()
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func UnaryClientInterceptor(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error {
|
||||
return FromGRPC(invoker(ctx, method, req, reply, cc, opts...))
|
||||
err := FromGRPC(invoker(ctx, method, req, reply, cc, opts...))
|
||||
if err != nil {
|
||||
stack.Helper()
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func StreamClientInterceptor(ctx context.Context, desc *grpc.StreamDesc, cc *grpc.ClientConn, method string, streamer grpc.Streamer, opts ...grpc.CallOption) (grpc.ClientStream, error) {
|
||||
s, err := streamer(ctx, desc, cc, method, opts...)
|
||||
if err != nil {
|
||||
stack.Helper()
|
||||
}
|
||||
return s, ToGRPC(err)
|
||||
}
|
||||
|
|
|
@ -4,15 +4,22 @@ import (
|
|||
"fmt"
|
||||
io "io"
|
||||
"os"
|
||||
"runtime"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"github.com/containerd/typeurl"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
var helpers map[string]struct{}
|
||||
var helpersMu sync.RWMutex
|
||||
|
||||
func init() {
|
||||
typeurl.Register((*Stack)(nil), "github.com/moby/buildkit", "stack.Stack+json")
|
||||
|
||||
helpers = map[string]struct{}{}
|
||||
}
|
||||
|
||||
var version string
|
||||
|
@ -23,6 +30,19 @@ func SetVersionInfo(v, r string) {
|
|||
revision = r
|
||||
}
|
||||
|
||||
func Helper() {
|
||||
var pc [1]uintptr
|
||||
n := runtime.Callers(2, pc[:])
|
||||
if n == 0 {
|
||||
return
|
||||
}
|
||||
frames := runtime.CallersFrames(pc[:n])
|
||||
frame, _ := frames.Next()
|
||||
helpersMu.Lock()
|
||||
helpers[frame.Function] = struct{}{}
|
||||
helpersMu.Unlock()
|
||||
}
|
||||
|
||||
func Traces(err error) []*Stack {
|
||||
var st []*Stack
|
||||
|
||||
|
@ -52,6 +72,7 @@ func Enable(err error) error {
|
|||
if err == nil {
|
||||
return nil
|
||||
}
|
||||
Helper()
|
||||
if !hasLocalStackTrace(err) {
|
||||
return errors.WithStack(err)
|
||||
}
|
||||
|
@ -112,6 +133,8 @@ func (w *formatter) Format(s fmt.State, verb rune) {
|
|||
|
||||
func convertStack(s errors.StackTrace) *Stack {
|
||||
var out Stack
|
||||
helpersMu.RLock()
|
||||
defer helpersMu.RUnlock()
|
||||
for _, f := range s {
|
||||
dt, err := f.MarshalText()
|
||||
if err != nil {
|
||||
|
@ -121,6 +144,9 @@ func convertStack(s errors.StackTrace) *Stack {
|
|||
if len(p) != 2 {
|
||||
continue
|
||||
}
|
||||
if _, ok := helpers[p[0]]; ok {
|
||||
continue
|
||||
}
|
||||
idx := strings.LastIndexByte(p[1], ':')
|
||||
if idx == -1 {
|
||||
continue
|
||||
|
|
Loading…
Reference in New Issue