Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFilipe Santos <fsantos@gitlab.com>2022-06-10 06:58:49 +0300
committerFilipe Santos <fsantos@gitlab.com>2022-06-10 06:58:49 +0300
commit53417a02326a035621d3abb1024d080dd2bcfbf3 (patch)
treec524c65a0c42711885393ca4e1e32e9c65c8f566
parentca99cbe1bba2cc1e38f561ad5034fed465824967 (diff)
fix: use gRPC code ResourceExhausted for ratelimitgrpc-code-ratelimit
-rw-r--r--internal/helper/error.go3
-rw-r--r--internal/middleware/limithandler/concurrency_limiter.go8
-rw-r--r--internal/middleware/limithandler/middleware_test.go2
-rw-r--r--internal/middleware/limithandler/rate_limiter.go2
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,