mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-10-07 19:37:51 +00:00
Add rich error types to gRPC interface
This commit is contained in:
parent
f2fb2c98f8
commit
2b1c9950f4
2 changed files with 58 additions and 10 deletions
|
|
@ -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())
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
))
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue