-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy patherror.go
41 lines (36 loc) · 1.01 KB
/
error.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// Copyright 2018 The Goma Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package backend
import (
"context"
netctx "golang.org/x/net/context"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
"go.chromium.org/goma/server/log"
)
func wrapError(ctx context.Context, service string, err error) error {
if err == nil {
return nil
}
logger := log.FromContext(ctx)
st, _ := status.FromError(err)
code := st.Code()
if code == codes.Unknown {
switch ctx.Err() {
case context.Canceled, netctx.Canceled:
code = codes.Canceled
case context.DeadlineExceeded, netctx.DeadlineExceeded:
code = codes.DeadlineExceeded
}
}
err = grpc.Errorf(code, "failed to call %s: %s", service, st.Message())
switch code {
case codes.Unavailable, codes.Canceled, codes.Aborted:
logger.Warnf("call %s err: %v", service, err)
default:
logger.Errorf("call %s err: %v", service, err)
}
return err
}