Add rich error types to gRPC interface

This commit is contained in:
Kuba Podgórski 2020-08-28 17:24:49 +02:00
parent f2fb2c98f8
commit 2b1c9950f4
2 changed files with 58 additions and 10 deletions

View file

@ -66,14 +66,62 @@ func errToStatusError(err error) error {
// Check error string.
switch errors.Cause(err) {
case pilosa.ErrIndexNotFound, pilosa.ErrFieldNotFound:
return status.Error(codes.NotFound, err.Error())
}
// Check error type.
switch errors.Cause(err).(type) {
case pilosa.NotFoundError:
case pilosa.ErrIndexNotFound,
pilosa.ErrFieldNotFound,
pilosa.ErrForeignIndexNotFound,
pilosa.ErrBSIGroupNotFound:
return status.Error(codes.NotFound, err.Error())
case pilosa.ErrIndexExists,
pilosa.ErrFieldExists,
pilosa.ErrBSIGroupExists:
return status.Error(codes.AlreadyExists, err.Error())
case pilosa.ErrIndexRequired,
pilosa.ErrFieldRequired,
pilosa.ErrColumnRequired,
pilosa.ErrBSIGroupNameRequired,
pilosa.ErrName,
pilosa.ErrQueryRequired,
pilosa.ErrFieldsArgumentRequired,
pilosa.ErrIntFieldWithKeys,
pilosa.ErrDecimalFieldWithKeys:
return status.Error(codes.FailedPrecondition, err.Error())
case pilosa.ErrInvalidView,
pilosa.ErrInvalidBSIGroupType,
pilosa.ErrInvalidBSIGroupValueType,
pilosa.ErrInvalidCacheType:
return status.Error(codes.InvalidArgument, err.Error())
case pilosa.ErrDecimalOutOfRange,
pilosa.ErrBSIGroupValueTooLow,
pilosa.ErrBSIGroupValueTooHigh,
pilosa.ErrInvalidRangeOperation,
pilosa.ErrInvalidBetweenValue:
return status.Error(codes.OutOfRange, err.Error())
case pilosa.ErrQueryTimeout:
return status.Error(codes.DeadlineExceeded, err.Error())
case pilosa.ErrQueryCancelled:
return status.Error(codes.Canceled, err.Error())
case pilosa.ErrNotImplemented:
return status.Error(codes.Unimplemented, err.Error())
case pilosa.ErrAborted:
return status.Error(codes.Aborted, err.Error())
case pilosa.ErrClusterDoesNotOwnShard,
pilosa.ErrResizeNoReplicas,
pilosa.ErrResizeNotRunning,
pilosa.ErrNodeNotCoordinator,
pilosa.ErrTooManyWrites,
pilosa.ErrNodeIDNotExists:
return status.Error(codes.Internal, err.Error())
}
return status.Error(codes.Unknown, err.Error())
}

View file

@ -282,20 +282,20 @@ func (v *ValCountFuncReducer) Reduce(c pproto.StreamClient, s pproto.StreamServe
if len(cols) == 0 {
return s.Send(pproto.ErrorCode(
errors.New("empty column set"),
codes.Unknown,
codes.NotFound,
))
}
if idxVal == -1 {
return s.Send(pproto.ErrorCode(
errors.New("result set has no column: value"),
codes.Unknown,
codes.NotFound,
))
}
if idxCnt == -1 {
return s.Send(pproto.ErrorCode(
errors.New("result set has no column: count"),
codes.Unknown,
codes.NotFound,
))
}
@ -415,7 +415,7 @@ func (r *AssignHeadersReducer) Reduce(c pproto.StreamClient, s pproto.StreamServ
if len(placement) > len(rr.Columns) {
return s.Send(pproto.ErrorCode(
errors.New("mismatched header placement and column count"),
codes.Unknown,
codes.InvalidArgument,
))
}