mirror of https://github.com/milvus-io/milvus.git
Handle wrapped grpc error in funcutil.IsGrpcError (#17547)
Signed-off-by: Congqi Xia <congqi.xia@zilliz.com>pull/17552/head
parent
ab9b186f15
commit
ed3a1164dd
|
@ -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))
|
||||
t.Run("nil error", func(t *testing.T) {
|
||||
var err error
|
||||
assert.False(t, IsGrpcErr(err))
|
||||
})
|
||||
|
||||
err1 = errors.New("error")
|
||||
assert.False(t, IsGrpcErr(err1))
|
||||
t.Run("normal errors new", func(t *testing.T) {
|
||||
err := errors.New("error")
|
||||
assert.False(t, IsGrpcErr(err))
|
||||
})
|
||||
|
||||
bgCtx := context.Background()
|
||||
ctx1, cancel1 := context.WithCancel(bgCtx)
|
||||
cancel1()
|
||||
assert.False(t, IsGrpcErr(ctx1.Err()))
|
||||
t.Run("context cancel", func(t *testing.T) {
|
||||
assert.False(t, IsGrpcErr(context.Canceled))
|
||||
})
|
||||
|
||||
timeout := 20 * time.Millisecond
|
||||
ctx1, cancel1 = context.WithTimeout(bgCtx, timeout)
|
||||
time.Sleep(timeout * 2)
|
||||
assert.False(t, IsGrpcErr(ctx1.Err()))
|
||||
cancel1()
|
||||
t.Run("context timeout", func(t *testing.T) {
|
||||
assert.False(t, IsGrpcErr(context.DeadlineExceeded))
|
||||
})
|
||||
|
||||
err1 = grpcStatus.Error(grpcCodes.Canceled, "test")
|
||||
assert.True(t, IsGrpcErr(err1))
|
||||
t.Run("grpc canceled", func(t *testing.T) {
|
||||
err := grpcStatus.Error(grpcCodes.Canceled, "test")
|
||||
assert.True(t, IsGrpcErr(err))
|
||||
})
|
||||
|
||||
err1 = grpcStatus.Error(grpcCodes.Unavailable, "test")
|
||||
assert.True(t, IsGrpcErr(err1))
|
||||
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))
|
||||
})
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue