diff options
author | Filipe Santos <fsantos@gitlab.com> | 2022-06-10 06:58:49 +0300 |
---|---|---|
committer | Filipe Santos <fsantos@gitlab.com> | 2022-06-10 06:58:49 +0300 |
commit | 53417a02326a035621d3abb1024d080dd2bcfbf3 (patch) | |
tree | c524c65a0c42711885393ca4e1e32e9c65c8f566 | |
parent | ca99cbe1bba2cc1e38f561ad5034fed465824967 (diff) |
fix: use gRPC code ResourceExhausted for ratelimitgrpc-code-ratelimit
-rw-r--r-- | internal/helper/error.go | 3 | ||||
-rw-r--r-- | internal/middleware/limithandler/concurrency_limiter.go | 8 | ||||
-rw-r--r-- | internal/middleware/limithandler/middleware_test.go | 2 | ||||
-rw-r--r-- | internal/middleware/limithandler/rate_limiter.go | 2 |
4 files changed, 9 insertions, 6 deletions
diff --git a/internal/helper/error.go b/internal/helper/error.go index 5196513e0..7548326af 100644 --- a/internal/helper/error.go +++ b/internal/helper/error.go @@ -51,6 +51,9 @@ func ErrAlreadyExists(err error) error { return wrapError(codes.AlreadyExists, e // ErrAborted wraps err with codes.Aborted, unless err is already a gRPC error. func ErrAborted(err error) error { return wrapError(codes.Aborted, err) } +// ErrResourceExhausted wraps err with codes.ResourceExhausted, unless err is already a gRPC error. +func ErrResourceExhausted(err error) error { return wrapError(codes.ResourceExhausted, err) } + // wrapError wraps the given error with the error code unless it's already a gRPC error. If given // nil it will return nil. func wrapError(code codes.Code, err error) error { diff --git a/internal/middleware/limithandler/concurrency_limiter.go b/internal/middleware/limithandler/concurrency_limiter.go index 914bfdae8..19fa4ad90 100644 --- a/internal/middleware/limithandler/concurrency_limiter.go +++ b/internal/middleware/limithandler/concurrency_limiter.go @@ -152,7 +152,7 @@ func (c *ConcurrencyLimiter) Limit(ctx context.Context, lockKey string, f Limite if err := c.queueInc(ctx); err != nil { if errors.Is(err, ErrMaxQueueSize) { detailedErr, errGeneratingDetailedErr := helper.ErrWithDetails( - helper.ErrUnavailable(ErrMaxQueueSize), + helper.ErrResourceExhausted(ErrMaxQueueSize), &gitalypb.LimitError{ ErrorMessage: err.Error(), RetryAfter: durationpb.New(0), @@ -163,7 +163,7 @@ func (c *ConcurrencyLimiter) Limit(ctx context.Context, lockKey string, f Limite WithError(errGeneratingDetailedErr). Error("failed to generate detailed error") - return nil, helper.ErrUnavailable(ErrMaxQueueSize) + return nil, helper.ErrResourceExhausted(ErrMaxQueueSize) } return nil, detailedErr @@ -188,7 +188,7 @@ func (c *ConcurrencyLimiter) Limit(ctx context.Context, lockKey string, f Limite c.monitor.Dropped(ctx, "max_time") detailedErr, errGeneratingDetailedErr := helper.ErrWithDetails( - helper.ErrUnavailable(ErrMaxQueueTime), + helper.ErrResourceExhausted(ErrMaxQueueTime), &gitalypb.LimitError{ ErrorMessage: err.Error(), RetryAfter: durationpb.New(0), @@ -199,7 +199,7 @@ func (c *ConcurrencyLimiter) Limit(ctx context.Context, lockKey string, f Limite WithError(errGeneratingDetailedErr). Error("failed to generate detailed error") - return nil, helper.ErrUnavailable(ErrMaxQueueTime) + return nil, helper.ErrResourceExhausted(ErrMaxQueueTime) } return nil, detailedErr diff --git a/internal/middleware/limithandler/middleware_test.go b/internal/middleware/limithandler/middleware_test.go index ecd26f942..164a3a59b 100644 --- a/internal/middleware/limithandler/middleware_test.go +++ b/internal/middleware/limithandler/middleware_test.go @@ -341,7 +341,7 @@ func TestStreamLimitHandler_error(t *testing.T) { } err := <-errChan - testhelper.RequireGrpcCode(t, err, codes.Unavailable) + testhelper.RequireGrpcCode(t, err, codes.ResourceExhausted) // ensure it is a structured error st, ok := status.FromError(err) require.True(t, ok) diff --git a/internal/middleware/limithandler/rate_limiter.go b/internal/middleware/limithandler/rate_limiter.go index 63124b0d7..57db2acaa 100644 --- a/internal/middleware/limithandler/rate_limiter.go +++ b/internal/middleware/limithandler/rate_limiter.go @@ -44,7 +44,7 @@ func (r *RateLimiter) Limit(ctx context.Context, lockKey string, f LimitedFunc) // of traffic. r.requestsDroppedMetric.Inc() if featureflag.RateLimit.IsEnabled(ctx) { - err := helper.ErrUnavailable(ErrRateLimit) + err := helper.ErrResourceExhausted(ErrRateLimit) detailedErr, errGeneratingDetailedErr := helper.ErrWithDetails( err, |