Add adaptiveness to per-RPC limiter
This issue tracks the work of integrating the adaptive calculator with per-RPC limiters. This work involves adding some new adaptive configs to the concurrency
settings. Since we configure distinct limits for each individual RPC, each limit will float separately. However, they will share the same calculator and be adjusted at the same time.
Here is a sample config:
[[concurrency]]
// Backward compatible with the static limit
rpc="/gitaly.SmartHTTPService/PostUploadPackWithSidechannel"
max_per_repo = 15
adaptive = true
initial_limit = 15
max_limit = 100
min_limit = 5
max_queue_size = 100
max_queue_wait = "30s"
[[concurrency]]
rpc="/gitaly.SmartHTTPService/SSHUploadPackWithSidechannel"
max_per_repo = 30
adaptive = true
initial_limit = 30
max_limit = 300
min_limit = 1
max_queue_size = 100
max_queue_wait = "30s"
As the limiters are configured at boot time, we cannot use a feature flag. Instead, we add the new settings to targeted nodes. We can always rollback to the use of static limits by disabling gitaly_use_resizable_semaphore_in_concurrency_limiter
feature flag.
Edited by Quang-Minh Nguyen