]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/client_request: support inject delay request 56446/head
authorjunxiang Mu <1948535941@qq.com>
Tue, 11 Jun 2024 06:23:21 +0000 (14:23 +0800)
committermujunxiang <1948535941@qq.com>
Thu, 28 Nov 2024 01:33:21 +0000 (09:33 +0800)
Signed-off-by: junxiang Mu <1948535941@qq.com>
src/crimson/osd/osd_operations/client_request.cc
src/crimson/osd/osd_operations/client_request.h

index 61a56600a57040bd1ec9b82185cbddc107cdefe4..a6afe36d305f4f96e07d18000defad4288ff8518 100644 (file)
@@ -462,6 +462,9 @@ ClientRequest::do_process(
       co_return;
     }
   }
+
+  co_await maybe_inject_delay();
+
   if (m->get_oid().name.size()
     > crimson::common::local_conf()->osd_max_object_name_len) {
     co_await reply_op_error(pg, -ENAMETOOLONG);
index 6d1043e27835eaf88f5063b568f9d77b68e5e9a3..f8e0dd92f2800d0afe3cce700b2a9f07e55a287f 100644 (file)
@@ -4,6 +4,7 @@
 #pragma once
 
 #include <seastar/core/future.hh>
+#include <seastar/core/sleep.hh>
 
 #include <boost/intrusive/list.hpp>
 #include <boost/intrusive_ptr.hpp>
@@ -321,6 +322,18 @@ public:
   };
 
   void put_historic() const;
+  static interruptible_future<> maybe_inject_delay() {
+    if (common::local_conf()->osd_debug_inject_dispatch_delay_probability > 0) {
+      if (rand() % 10000 <
+        common::local_conf()->osd_debug_inject_dispatch_delay_probability * 10000) {
+        auto delay_duration = std::chrono::duration<double>(
+          common::local_conf()->osd_debug_inject_dispatch_delay_duration);
+        auto a_while = std::chrono::duration_cast<std::chrono::seconds>(delay_duration);
+        return seastar::sleep(a_while);
+      }
+    }
+    return seastar::now();
+  }
 };
 
 }