Files
buildkit/solver/errdefs/context.go
Justin Chadwell 51aca40cba solver: use errors.Is when checking context.Cause()
Since the change to replace uses of context.WithCancel with
WithCancelCause, we've also begun wrapping all cancellations using
errors.WithStack. This means that these would not directly match
context.Canceled, so we need to make sure to use errors.Is.

Signed-off-by: Justin Chadwell <me@jedevc.com>
2024-01-25 12:57:48 +00:00

28 lines
705 B
Go

package errdefs
import (
"context"
"errors"
"strings"
"github.com/moby/buildkit/util/grpcerrors"
"google.golang.org/grpc/codes"
)
func IsCanceled(ctx context.Context, err error) bool {
if errors.Is(err, context.Canceled) || grpcerrors.Code(err) == codes.Canceled {
return true
}
// grpc does not set cancel correctly when stream gets cancelled and then Recv is called
if err != nil && errors.Is(context.Cause(ctx), context.Canceled) {
// when this error comes from containerd it is not typed at all, just concatenated string
if strings.Contains(err.Error(), "EOF") {
return true
}
if strings.Contains(err.Error(), context.Canceled.Error()) {
return true
}
}
return false
}