From 3d1eb883c6e8b95aa7cbed1ba06217b5a454a7f5 Mon Sep 17 00:00:00 2001 From: John Cai Date: Thu, 21 Apr 2022 17:32:59 -0400 Subject: limithandler: Return structured error on queue time --- internal/middleware/limithandler/concurrency_limiter.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/internal/middleware/limithandler/concurrency_limiter.go b/internal/middleware/limithandler/concurrency_limiter.go index f6587554a..ff26ffb63 100644 --- a/internal/middleware/limithandler/concurrency_limiter.go +++ b/internal/middleware/limithandler/concurrency_limiter.go @@ -11,6 +11,8 @@ import ( "gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/config" "gitlab.com/gitlab-org/gitaly/v14/internal/helper" "gitlab.com/gitlab-org/gitaly/v14/internal/metadata/featureflag" + "gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb" + "google.golang.org/protobuf/types/known/durationpb" ) // ErrMaxQueueTime indicates a request has reached the maximum time allowed to wait in the @@ -164,6 +166,18 @@ func (c *ConcurrencyLimiter) Limit(ctx context.Context, lockKey string, f Limite if err != nil { if errors.Is(err, ErrMaxQueueTime) { c.monitor.Dropped(ctx, "max_time") + + errWithDetails, e := helper.ErrWithDetails( + helper.ErrUnavailablef("too many requests"), + &gitalypb.LimitError{ + ErrorMessage: "concurrency queue wait time reached", + RetryAfter: durationpb.New(0), + }, + ) + if e != nil { + return nil, err + } + return nil, errWithDetails } return nil, err } -- cgit v1.2.3