123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- package oc
- import (
- "errors"
- "io"
- "net"
- "os"
- "github.com/containerd/containerd/errdefs"
- "google.golang.org/grpc/codes"
- "google.golang.org/grpc/status"
- )
- // todo: break import cycle with "internal/hcs/errors.go" and reference errors defined there
- // todo: add errors defined in "internal/guest/gcserror" (Hresult does not implement error)
- func toStatusCode(err error) codes.Code {
- // checks if err implements GRPCStatus() *"google.golang.org/grpc/status".Status,
- // wraps an error defined in "github.com/containerd/containerd/errdefs", or is a
- // context timeout or cancelled error
- if s, ok := status.FromError(errdefs.ToGRPC(err)); ok {
- return s.Code()
- }
- switch {
- // case isAny(err):
- // return codes.Cancelled
- case isAny(err, os.ErrInvalid):
- return codes.InvalidArgument
- case isAny(err, os.ErrDeadlineExceeded):
- return codes.DeadlineExceeded
- case isAny(err, os.ErrNotExist):
- return codes.NotFound
- case isAny(err, os.ErrExist):
- return codes.AlreadyExists
- case isAny(err, os.ErrPermission):
- return codes.PermissionDenied
- // case isAny(err):
- // return codes.ResourceExhausted
- case isAny(err, os.ErrClosed, net.ErrClosed, io.ErrClosedPipe, io.ErrShortBuffer):
- return codes.FailedPrecondition
- // case isAny(err):
- // return codes.Aborted
- // case isAny(err):
- // return codes.OutOfRange
- // case isAny(err):
- // return codes.Unimplemented
- case isAny(err, io.ErrNoProgress):
- return codes.Internal
- // case isAny(err):
- // return codes.Unavailable
- case isAny(err, io.ErrShortWrite, io.ErrUnexpectedEOF):
- return codes.DataLoss
- // case isAny(err):
- // return codes.Unauthenticated
- default:
- return codes.Unknown
- }
- }
- // isAny returns true if errors.Is is true for any of the provided errors, errs.
- func isAny(err error, errs ...error) bool {
- for _, e := range errs {
- if errors.Is(err, e) {
- return true
- }
- }
- return false
- }
|