未验证 提交 ed3a1164 编写于 作者: C congqixia 提交者: GitHub

Handle wrapped grpc error in funcutil.IsGrpcError (#17547)

Signed-off-by: NCongqi Xia <congqi.xia@zilliz.com>
上级 ab9b186f
......@@ -357,9 +357,14 @@ func ReadBinary(endian binary.ByteOrder, bs []byte, receiver interface{}) error
// IsGrpcErr checks whether err is instance of grpc status error.
func IsGrpcErr(err error) bool {
if err == nil {
return false
for {
if err == nil {
return false
}
_, ok := grpcStatus.FromError(err)
if ok {
return true
}
err = errors.Unwrap(err)
}
_, ok := grpcStatus.FromError(err)
return ok
}
......@@ -467,26 +467,37 @@ func Test_ReadBinary(t *testing.T) {
}
func TestIsGrpcErr(t *testing.T) {
var err1 error
assert.False(t, IsGrpcErr(err1))
err1 = errors.New("error")
assert.False(t, IsGrpcErr(err1))
bgCtx := context.Background()
ctx1, cancel1 := context.WithCancel(bgCtx)
cancel1()
assert.False(t, IsGrpcErr(ctx1.Err()))
timeout := 20 * time.Millisecond
ctx1, cancel1 = context.WithTimeout(bgCtx, timeout)
time.Sleep(timeout * 2)
assert.False(t, IsGrpcErr(ctx1.Err()))
cancel1()
err1 = grpcStatus.Error(grpcCodes.Canceled, "test")
assert.True(t, IsGrpcErr(err1))
err1 = grpcStatus.Error(grpcCodes.Unavailable, "test")
assert.True(t, IsGrpcErr(err1))
t.Run("nil error", func(t *testing.T) {
var err error
assert.False(t, IsGrpcErr(err))
})
t.Run("normal errors new", func(t *testing.T) {
err := errors.New("error")
assert.False(t, IsGrpcErr(err))
})
t.Run("context cancel", func(t *testing.T) {
assert.False(t, IsGrpcErr(context.Canceled))
})
t.Run("context timeout", func(t *testing.T) {
assert.False(t, IsGrpcErr(context.DeadlineExceeded))
})
t.Run("grpc canceled", func(t *testing.T) {
err := grpcStatus.Error(grpcCodes.Canceled, "test")
assert.True(t, IsGrpcErr(err))
})
t.Run("grpc unavailable", func(t *testing.T) {
err := grpcStatus.Error(grpcCodes.Unavailable, "test")
assert.True(t, IsGrpcErr(err))
})
t.Run("wrapped grpc error", func(t *testing.T) {
err := grpcStatus.Error(grpcCodes.Unavailable, "test")
errWrap := fmt.Errorf("wrap grpc error %w", err)
assert.True(t, IsGrpcErr(errWrap))
})
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册