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]