Skip to content

Commit 8254cb5

Browse files
committed
Merge PR ceph#54067 into main
* refs/pull/54067/head: mds: add dispatch killpoint and delay configs Reviewed-by: Leonid Usov <[email protected]>
2 parents f34b439 + 0070081 commit 8254cb5

File tree

4 files changed

+41
-0
lines changed

4 files changed

+41
-0
lines changed

src/common/options/mds.yaml.in

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1680,3 +1680,19 @@ options:
16801680
- mds
16811681
flags:
16821682
- runtime
1683+
- name: mds_server_dispatch_killpoint_random
1684+
type: float
1685+
level: dev
1686+
default: 0.0
1687+
services:
1688+
- mds
1689+
flags:
1690+
- runtime
1691+
- name: mds_server_dispatch_client_request_delay
1692+
type: millisecs
1693+
level: dev
1694+
default: 0
1695+
services:
1696+
- mds
1697+
flags:
1698+
- runtime

src/mds/MDSRank.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4029,6 +4029,8 @@ const char** MDSRankDispatcher::get_tracked_conf_keys() const
40294029
"mds_debug_subtrees",
40304030
"mds_dir_max_entries",
40314031
"mds_dump_cache_threshold_file",
4032+
"mds_server_dispatch_client_request_delay",
4033+
"mds_server_dispatch_killpoint_random",
40324034
"mds_dump_cache_threshold_formatter",
40334035
"mds_enable_op_tracker",
40344036
"mds_export_ephemeral_distributed",

src/mds/Server.cc

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,8 @@ Server::Server(MDSRank *m, MetricsHandler *metrics_handler) :
273273
caps_throttle_retry_request_timeout = g_conf().get_val<double>("mds_cap_acquisition_throttle_retry_request_timeout");
274274
dir_max_entries = g_conf().get_val<uint64_t>("mds_dir_max_entries");
275275
bal_fragment_size_max = g_conf().get_val<int64_t>("mds_bal_fragment_size_max");
276+
dispatch_client_request_delay = g_conf().get_val<std::chrono::milliseconds>("mds_server_dispatch_client_request_delay");
277+
dispatch_killpoint_random = g_conf().get_val<double>("mds_server_dispatch_killpoint_random");
276278
supported_features = feature_bitset_t(CEPHFS_FEATURES_MDS_SUPPORTED);
277279
supported_metric_spec = feature_bitset_t(CEPHFS_METRIC_FEATURES_ALL);
278280
}
@@ -1375,6 +1377,16 @@ void Server::handle_conf_change(const std::set<std::string>& changed) {
13751377
if (changed.count("mds_inject_rename_corrupt_dentry_first")) {
13761378
inject_rename_corrupt_dentry_first = g_conf().get_val<double>("mds_inject_rename_corrupt_dentry_first");
13771379
}
1380+
if (changed.count("mds_server_dispatch_client_request_delay")) {
1381+
dispatch_client_request_delay = g_conf().get_val<std::chrono::milliseconds>("mds_server_dispatch_client_request_delay");
1382+
dout(20) << __func__ << " mds_server_dispatch_client_request_delay now "
1383+
<< dispatch_client_request_delay << dendl;
1384+
}
1385+
if (changed.count("mds_server_dispatch_killpoint_random")) {
1386+
dispatch_killpoint_random = g_conf().get_val<double>("mds_server_dispatch_killpoint_random");
1387+
dout(20) << __func__ << " mds_server_dispatch_killpoint_random now "
1388+
<< dispatch_killpoint_random << dendl;
1389+
}
13781390
}
13791391

13801392
/*
@@ -2667,6 +2679,14 @@ void Server::dispatch_client_request(const MDRequestRef& mdr)
26672679

26682680
dout(7) << "dispatch_client_request " << *req << dendl;
26692681

2682+
auto zeroms = std::chrono::milliseconds::zero();
2683+
if (unlikely(dispatch_client_request_delay > zeroms)) {
2684+
std::this_thread::sleep_for(dispatch_client_request_delay);
2685+
}
2686+
if (unlikely(dispatch_killpoint_random > 0.0) && dispatch_killpoint_random >= ceph::util::generate_random_number(0.0, 1.0)) {
2687+
ceph_abort("dispatch_killpoint_random");
2688+
}
2689+
26702690
if (req->may_write() && mdcache->is_readonly()) {
26712691
dout(10) << " read-only FS" << dendl;
26722692
respond_to_request(mdr, -CEPHFS_EROFS);

src/mds/Server.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -566,6 +566,9 @@ class Server {
566566
double max_caps_throttle_ratio;
567567
double caps_throttle_retry_request_timeout;
568568

569+
std::chrono::milliseconds dispatch_client_request_delay{0};
570+
double dispatch_killpoint_random{0.0};
571+
569572
size_t alternate_name_max = g_conf().get_val<Option::size_t>("mds_alternate_name_max");
570573
size_t fscrypt_last_block_max_size = g_conf().get_val<Option::size_t>("mds_fscrypt_last_block_max_size");
571574

0 commit comments

Comments
 (0)