mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-09-07 17:15:56 +00:00
Merge pull request #753 from kuba--/grpc-errcode
Add rich error types to gRPC interface
This commit is contained in:
commit
b88c5cd5ea
2 changed files with 60 additions and 12 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())
|
||||
}
|
||||
|
||||
|
|
@ -105,7 +153,7 @@ func (h *GRPCHandler) PostVDS(ctx context.Context, req *pb.PostVDSRequest) (*pb.
|
|||
opts := pilosa.IndexOptions{Keys: req.Keys, TrackExistence: req.TrackExistence}
|
||||
_, err := h.api.CreateIndex(ctx, req.Name, opts)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, errToStatusError(err)
|
||||
}
|
||||
return &pb.PostVDSResponse{}, nil
|
||||
}
|
||||
|
|
@ -114,7 +162,7 @@ func (h *GRPCHandler) PostVDS(ctx context.Context, req *pb.PostVDSRequest) (*pb.
|
|||
func (h *GRPCHandler) DeleteVDS(ctx context.Context, req *pb.DeleteVDSRequest) (*pb.DeleteVDSResponse, error) {
|
||||
err := h.api.DeleteIndex(ctx, req.Name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, errToStatusError(err)
|
||||
}
|
||||
return &pb.DeleteVDSResponse{}, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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