This is an automated email from the ASF dual-hosted git repository.

wwbmmm pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brpc.git


The following commit(s) were added to refs/heads/master by this push:
     new c9dc47a0 add max concurrency for timeout concurrency limiter (#2087)
c9dc47a0 is described below

commit c9dc47a00ef92908c7708d15456b33e8d465c730
Author: Yang,Liming <[email protected]>
AuthorDate: Mon Jan 16 15:52:36 2023 +0800

    add max concurrency for timeout concurrency limiter (#2087)
---
 src/brpc/policy/timeout_concurrency_limiter.cpp | 13 ++++++++++---
 src/brpc/policy/timeout_concurrency_limiter.h   |  2 +-
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/src/brpc/policy/timeout_concurrency_limiter.cpp 
b/src/brpc/policy/timeout_concurrency_limiter.cpp
index d35f1c03..94ee8df4 100644
--- a/src/brpc/policy/timeout_concurrency_limiter.cpp
+++ b/src/brpc/policy/timeout_concurrency_limiter.cpp
@@ -48,6 +48,9 @@ DEFINE_double(
     "the configuration item, the more aggressive the penalty strategy.");
 DEFINE_int32(timeout_cl_default_timeout_ms, 500,
              "Default timeout for rpc request");
+DEFINE_int32(timeout_cl_max_concurrency, 100,
+             "When average latency statistics not refresh, this flag can keep "
+             "requests not exceed this max concurrency");
 
 TimeoutConcurrencyLimiter::TimeoutConcurrencyLimiter()
     : _avg_latency_us(FLAGS_timeout_cl_initial_avg_latency_us),
@@ -58,12 +61,14 @@ TimeoutConcurrencyLimiter *TimeoutConcurrencyLimiter::New(
     return new (std::nothrow) TimeoutConcurrencyLimiter;
 }
 
-bool TimeoutConcurrencyLimiter::OnRequested(int, Controller *cntl) {
+bool TimeoutConcurrencyLimiter::OnRequested(int current_concurrency,
+                                            Controller *cntl) {
     auto timeout_ms = FLAGS_timeout_cl_default_timeout_ms;
     if (cntl != nullptr && cntl->timeout_ms() != UNSET_MAGIC_NUM) {
         timeout_ms = cntl->timeout_ms();
     }
-    return _avg_latency_us < timeout_ms * 1000;
+    return current_concurrency <= FLAGS_timeout_cl_max_concurrency &&
+           _avg_latency_us < timeout_ms * 1000;
 }
 
 void TimeoutConcurrencyLimiter::OnResponded(int error_code,
@@ -94,7 +99,9 @@ void TimeoutConcurrencyLimiter::OnResponded(int error_code,
     }
 }
 
-int TimeoutConcurrencyLimiter::MaxConcurrency() { return 0; }
+int TimeoutConcurrencyLimiter::MaxConcurrency() {
+    return FLAGS_timeout_cl_max_concurrency;
+}
 
 bool TimeoutConcurrencyLimiter::AddSample(int error_code, int64_t latency_us,
                                           int64_t sampling_time_us) {
diff --git a/src/brpc/policy/timeout_concurrency_limiter.h 
b/src/brpc/policy/timeout_concurrency_limiter.h
index 716df577..ca045dd6 100644
--- a/src/brpc/policy/timeout_concurrency_limiter.h
+++ b/src/brpc/policy/timeout_concurrency_limiter.h
@@ -27,7 +27,7 @@ class TimeoutConcurrencyLimiter : public ConcurrencyLimiter {
    public:
     TimeoutConcurrencyLimiter();
 
-    bool OnRequested(int, Controller* cntl) override;
+    bool OnRequested(int current_concurrency, Controller* cntl) override;
 
     void OnResponded(int error_code, int64_t latency_us) override;
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to