mirror of
https://github.com/moby/buildkit.git
synced 2026-08-04 06:40:22 +00:00
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>
28 lines
705 B
Go
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
|
|
}
|