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

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


The following commit(s) were added to refs/heads/master by this push:
     new be53e027072 [Enhancement](recycler) Add fault injection config for 
s3/azure delete rate limit (#60882)
be53e027072 is described below

commit be53e0270729c67a30ee2549998c7f413883eab1
Author: Yixuan Wang <[email protected]>
AuthorDate: Mon Mar 2 09:32:29 2026 +0800

    [Enhancement](recycler) Add fault injection config for s3/azure delete rate 
limit (#60882)
    
    - add config flags `enable_s3_rate_limit_inject` and
    `s3_rate_limit_inject_probility`
    - inject random rate-limit failures on PUT path in S3 and Azure object
    clients
    - keep existing rate limiter behavior unchanged when injection is
    disabled
---
 cloud/src/common/config.h               | 4 ++++
 cloud/src/recycler/azure_obj_client.cpp | 6 ++++++
 cloud/src/recycler/s3_obj_client.cpp    | 6 ++++++
 3 files changed, 16 insertions(+)

diff --git a/cloud/src/common/config.h b/cloud/src/common/config.h
index f6aa67a496f..52e7e593dc6 100644
--- a/cloud/src/common/config.h
+++ b/cloud/src/common/config.h
@@ -245,6 +245,10 @@ CONF_Int32(txn_store_retry_base_intervals_ms, "500");
 CONF_Bool(enable_retry_txn_conflict, "true");
 
 CONF_mBool(enable_s3_rate_limiter, "false");
+// Fault injection: randomly return rate limit error for PUT (delete) 
operations, for testing recycler.
+// s3_rate_limit_inject_probility is the probability (0-100) of injecting a 
rate limit error.
+CONF_mBool(enable_s3_rate_limit_inject, "false");
+CONF_mInt32(s3_rate_limit_inject_probility, "30");
 CONF_mInt64(s3_get_bucket_tokens, "1000000000000000000");
 CONF_Validator(s3_get_bucket_tokens, [](int64_t config) -> bool { return 
config > 0; });
 
diff --git a/cloud/src/recycler/azure_obj_client.cpp 
b/cloud/src/recycler/azure_obj_client.cpp
index b89686622e6..65c0a452403 100644
--- a/cloud/src/recycler/azure_obj_client.cpp
+++ b/cloud/src/recycler/azure_obj_client.cpp
@@ -47,6 +47,12 @@ namespace doris::cloud {
 template <typename Func>
 auto s3_rate_limit(S3RateLimitType op, Func callback) -> decltype(callback()) {
     using T = decltype(callback());
+    // Fault injection for testing rate limit handling in recycler
+    if (config::enable_s3_rate_limit_inject && op == S3RateLimitType::PUT) {
+        if (rand() % 100 < config::s3_rate_limit_inject_probility) {
+            throw std::runtime_error("Azure exceeds request limit");
+        }
+    }
     if (!config::enable_s3_rate_limiter) {
         return callback();
     }
diff --git a/cloud/src/recycler/s3_obj_client.cpp 
b/cloud/src/recycler/s3_obj_client.cpp
index fb51f9b3e8d..81d791cabac 100644
--- a/cloud/src/recycler/s3_obj_client.cpp
+++ b/cloud/src/recycler/s3_obj_client.cpp
@@ -46,6 +46,12 @@ namespace doris::cloud {
 template <typename Func>
 auto s3_rate_limit(S3RateLimitType op, Func callback) -> decltype(callback()) {
     using T = decltype(callback());
+    // Fault injection for testing rate limit handling in recycler
+    if (config::enable_s3_rate_limit_inject && op == S3RateLimitType::PUT) {
+        if (rand() % 100 < config::s3_rate_limit_inject_probility) {
+            return T(s3_error_factory());
+        }
+    }
     if (!config::enable_s3_rate_limiter) {
         return callback();
     }


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

Reply via email to