From 965427d491affd40360517b8fa12dd76a380f285 Mon Sep 17 00:00:00 2001 From: Abhishek Pandey Date: Tue, 16 May 2023 13:37:52 -0700 Subject: [PATCH] Place concurrency limiter middleware after retry middlewares (#3420) This is to safeguard against the scenario where retry handlers might spawn additional requests to graph. Such retries may cause us to exceed concurrent request limits, leading to 429s ( `Application is over its MailboxConcurrency limit`) This PR will ensure that such retry requests are also funneled through the concurrency limiter. --- #### Does this PR need a docs update or release note? - [ ] :white_check_mark: Yes, it's included - [ ] :clock1: Yes, but in a later PR - [x] :no_entry: No #### Type of change - [ ] :sunflower: Feature - [x] :bug: Bugfix - [ ] :world_map: Documentation - [ ] :robot: Supportability/Tests - [ ] :computer: CI/Deployment - [ ] :broom: Tech Debt/Cleanup #### Issue(s) * # #### Test Plan - [ ] :muscle: Manual - [x] :zap: Unit test - [ ] :green_heart: E2E --- src/internal/connector/graph/service.go | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/internal/connector/graph/service.go b/src/internal/connector/graph/service.go index dc5129ac4..f0aa71f08 100644 --- a/src/internal/connector/graph/service.go +++ b/src/internal/connector/graph/service.go @@ -247,11 +247,6 @@ func kiotaMiddlewares( ) []khttp.Middleware { mw := []khttp.Middleware{} - // Optionally add concurrency limiter middleware if it has been initialized - if concurrencyLim != nil { - mw = append(mw, concurrencyLim) - } - mw = append(mw, []khttp.Middleware{ msgraphgocore.NewGraphTelemetryHandler(options), &RetryMiddleware{ @@ -264,10 +259,18 @@ func kiotaMiddlewares( khttp.NewParametersNameDecodingHandler(), khttp.NewUserAgentHandler(), &LoggingMiddleware{}, - &RateLimiterMiddleware{}, - &MetricsMiddleware{}, }...) + // Optionally add concurrency limiter middleware if it has been initialized. + if concurrencyLim != nil { + mw = append(mw, concurrencyLim) + } + + mw = append( + mw, + &RateLimiterMiddleware{}, + &MetricsMiddleware{}) + if len(cc.appendMiddleware) > 0 { mw = append(mw, cc.appendMiddleware...) }