]> git.proxmox.com Git - ceph.git/blame - ceph/src/common/options.cc
import 14.2.4 nautilus point release
[ceph.git] / ceph / src / common / options.cc
CommitLineData
c07f9fc5
FG
1// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2// vim: ts=8 sw=2 smarttab
3
4#include "acconfig.h"
5#include "options.h"
6#include "common/Formatter.h"
7
8// Helpers for validators
9#include "include/stringify.h"
10#include <boost/algorithm/string.hpp>
11#include <boost/lexical_cast.hpp>
11fdf7f2 12#include <regex>
c07f9fc5 13
3efd9988
FG
14// Definitions for enums
15#include "common/perf_counters.h"
16
11fdf7f2
TL
17// rbd feature validation
18#include "librbd/Features.h"
19
20namespace {
21class printer : public boost::static_visitor<> {
22 ostream& out;
23public:
24 explicit printer(ostream& os)
25 : out(os) {}
26 template<typename T>
27 void operator()(const T& v) const {
28 out << v;
29 }
30 void operator()(boost::blank blank) const {
31 return;
32 }
33 void operator()(bool v) const {
34 out << (v ? "true" : "false");
35 }
36 void operator()(double v) const {
37 out << std::fixed << v << std::defaultfloat;
38 }
39 void operator()(const Option::size_t& v) const {
40 out << v.value;
41 }
42 void operator()(const std::chrono::seconds v) const {
43 out << v.count();
44 }
45};
46}
47
48ostream& operator<<(ostream& os, const Option::value_t& v) {
49 printer p{os};
50 v.apply_visitor(p);
51 return os;
52}
c07f9fc5
FG
53
54void Option::dump_value(const char *field_name,
55 const Option::value_t &v, Formatter *f) const
56{
57 if (boost::get<boost::blank>(&v)) {
58 // This should be nil but Formatter doesn't allow it.
59 f->dump_string(field_name, "");
11fdf7f2
TL
60 return;
61 }
62 switch (type) {
63 case TYPE_INT:
64 f->dump_int(field_name, boost::get<int64_t>(v)); break;
65 case TYPE_UINT:
66 f->dump_unsigned(field_name, boost::get<uint64_t>(v)); break;
67 case TYPE_STR:
68 f->dump_string(field_name, boost::get<std::string>(v)); break;
69 case TYPE_FLOAT:
70 f->dump_float(field_name, boost::get<double>(v)); break;
71 case TYPE_BOOL:
72 f->dump_bool(field_name, boost::get<bool>(v)); break;
73 default:
74 f->dump_stream(field_name) << v; break;
c07f9fc5
FG
75 }
76}
77
78int Option::pre_validate(std::string *new_value, std::string *err) const
79{
80 if (validator) {
81 return validator(new_value, err);
82 } else {
83 return 0;
84 }
85}
86
87int Option::validate(const Option::value_t &new_value, std::string *err) const
88{
89 // Generic validation: min
90 if (!boost::get<boost::blank>(&(min))) {
91 if (new_value < min) {
92 std::ostringstream oss;
93 oss << "Value '" << new_value << "' is below minimum " << min;
94 *err = oss.str();
95 return -EINVAL;
96 }
97 }
98
99 // Generic validation: max
100 if (!boost::get<boost::blank>(&(max))) {
101 if (new_value > max) {
102 std::ostringstream oss;
103 oss << "Value '" << new_value << "' exceeds maximum " << max;
104 *err = oss.str();
105 return -EINVAL;
106 }
107 }
108
109 // Generic validation: enum
110 if (!enum_allowed.empty() && type == Option::TYPE_STR) {
111 auto found = std::find(enum_allowed.begin(), enum_allowed.end(),
112 boost::get<std::string>(new_value));
113 if (found == enum_allowed.end()) {
114 std::ostringstream oss;
115 oss << "'" << new_value << "' is not one of the permitted "
116 "values: " << joinify(enum_allowed.begin(),
117 enum_allowed.end(),
118 std::string(", "));
119 *err = oss.str();
120 return -EINVAL;
121 }
122 }
123
124 return 0;
125}
126
11fdf7f2
TL
127int Option::parse_value(
128 const std::string& raw_val,
129 value_t *out,
130 std::string *error_message,
131 std::string *normalized_value) const
132{
133 std::string val = raw_val;
134
135 int r = pre_validate(&val, error_message);
136 if (r != 0) {
137 return r;
138 }
139
140 if (type == Option::TYPE_INT) {
141 int64_t f = strict_si_cast<int64_t>(val.c_str(), error_message);
142 if (!error_message->empty()) {
143 return -EINVAL;
144 }
145 *out = f;
146 } else if (type == Option::TYPE_UINT) {
147 uint64_t f = strict_si_cast<uint64_t>(val.c_str(), error_message);
148 if (!error_message->empty()) {
149 return -EINVAL;
150 }
151 *out = f;
152 } else if (type == Option::TYPE_STR) {
153 *out = val;
154 } else if (type == Option::TYPE_FLOAT) {
155 double f = strict_strtod(val.c_str(), error_message);
156 if (!error_message->empty()) {
157 return -EINVAL;
158 } else {
159 *out = f;
160 }
161 } else if (type == Option::TYPE_BOOL) {
162 if (strcasecmp(val.c_str(), "false") == 0) {
163 *out = false;
164 } else if (strcasecmp(val.c_str(), "true") == 0) {
165 *out = true;
166 } else {
167 int b = strict_strtol(val.c_str(), 10, error_message);
168 if (!error_message->empty()) {
169 return -EINVAL;
170 }
171 *out = (bool)!!b;
172 }
173 } else if (type == Option::TYPE_ADDR) {
174 entity_addr_t addr;
175 if (!addr.parse(val.c_str())){
176 return -EINVAL;
177 }
178 *out = addr;
179 } else if (type == Option::TYPE_ADDR) {
180 entity_addrvec_t addr;
181 if (!addr.parse(val.c_str())){
182 return -EINVAL;
183 }
184 *out = addr;
185 } else if (type == Option::TYPE_UUID) {
186 uuid_d uuid;
187 if (!uuid.parse(val.c_str())) {
188 return -EINVAL;
189 }
190 *out = uuid;
191 } else if (type == Option::TYPE_SIZE) {
192 Option::size_t sz{strict_iecstrtoll(val.c_str(), error_message)};
193 if (!error_message->empty()) {
194 return -EINVAL;
195 }
196 *out = sz;
197 } else if (type == Option::TYPE_SECS) {
198 try {
199 *out = parse_timespan(val);
200 } catch (const invalid_argument& e) {
201 *error_message = e.what();
202 return -EINVAL;
203 }
204 } else {
205 ceph_abort();
206 }
207
208 r = validate(*out, error_message);
209 if (r != 0) {
210 return r;
211 }
212
213 if (normalized_value) {
214 *normalized_value = to_str(*out);
215 }
216 return 0;
217}
218
c07f9fc5
FG
219void Option::dump(Formatter *f) const
220{
c07f9fc5
FG
221 f->dump_string("name", name);
222
223 f->dump_string("type", type_to_str(type));
c07f9fc5
FG
224
225 f->dump_string("level", level_to_str(level));
226
227 f->dump_string("desc", desc);
228 f->dump_string("long_desc", long_desc);
229
230 dump_value("default", value, f);
231 dump_value("daemon_default", daemon_value, f);
232
233 f->open_array_section("tags");
234 for (const auto t : tags) {
235 f->dump_string("tag", t);
236 }
237 f->close_section();
238
239 f->open_array_section("services");
240 for (const auto s : services) {
241 f->dump_string("service", s);
242 }
243 f->close_section();
244
245 f->open_array_section("see_also");
246 for (const auto sa : see_also) {
247 f->dump_string("see_also", sa);
248 }
249 f->close_section();
250
251 if (type == TYPE_STR) {
252 f->open_array_section("enum_values");
253 for (const auto &ea : enum_allowed) {
254 f->dump_string("enum_value", ea);
255 }
256 f->close_section();
257 }
258
259 dump_value("min", min, f);
260 dump_value("max", max, f);
261
11fdf7f2
TL
262 f->dump_bool("can_update_at_runtime", can_update_at_runtime());
263
264 f->open_array_section("flags");
265 if (has_flag(FLAG_RUNTIME)) {
266 f->dump_string("option", "runtime");
267 }
268 if (has_flag(FLAG_NO_MON_UPDATE)) {
269 f->dump_string("option", "no_mon_update");
270 }
271 if (has_flag(FLAG_STARTUP)) {
272 f->dump_string("option", "startup");
273 }
274 if (has_flag(FLAG_CLUSTER_CREATE)) {
275 f->dump_string("option", "cluster_create");
276 }
277 if (has_flag(FLAG_CREATE)) {
278 f->dump_string("option", "create");
279 }
c07f9fc5
FG
280 f->close_section();
281}
282
11fdf7f2
TL
283std::string Option::to_str(const Option::value_t& v)
284{
285 return stringify(v);
286}
287
288void Option::print(ostream *out) const
289{
290 *out << name << " - " << desc << "\n";
291 *out << " (" << type_to_str(type) << ", " << level_to_str(level) << ")\n";
292 if (!boost::get<boost::blank>(&daemon_value)) {
293 *out << " Default (non-daemon): " << stringify(value) << "\n";
294 *out << " Default (daemon): " << stringify(daemon_value) << "\n";
295 } else {
296 *out << " Default: " << stringify(value) << "\n";
297 }
298 if (!enum_allowed.empty()) {
299 *out << " Possible values: ";
300 for (auto& i : enum_allowed) {
301 *out << " " << stringify(i);
302 }
303 *out << "\n";
304 }
305 if (!boost::get<boost::blank>(&min)) {
306 *out << " Minimum: " << stringify(min) << "\n"
307 << " Maximum: " << stringify(max) << "\n";
308 }
309 *out << " Can update at runtime: "
310 << (can_update_at_runtime() ? "true" : "false") << "\n";
311 if (!services.empty()) {
312 *out << " Services: " << services << "\n";
313 }
314 if (!tags.empty()) {
315 *out << " Tags: " << tags << "\n";
316 }
317 if (!see_also.empty()) {
318 *out << " See also: " << see_also << "\n";
319 }
320
321 if (long_desc.size()) {
322 *out << "\n" << long_desc << "\n";
323 }
324}
325
b32b8144
FG
326constexpr unsigned long long operator"" _min (unsigned long long min) {
327 return min * 60;
328}
329constexpr unsigned long long operator"" _hr (unsigned long long hr) {
330 return hr * 60 * 60;
331}
332constexpr unsigned long long operator"" _day (unsigned long long day) {
333 return day * 60 * 60 * 24;
334}
335constexpr unsigned long long operator"" _K (unsigned long long n) {
336 return n << 10;
337}
338constexpr unsigned long long operator"" _M (unsigned long long n) {
339 return n << 20;
340}
341constexpr unsigned long long operator"" _G (unsigned long long n) {
342 return n << 30;
343}
c07f9fc5 344
d2e6a577
FG
345std::vector<Option> get_global_options() {
346 return std::vector<Option>({
347 Option("host", Option::TYPE_STR, Option::LEVEL_BASIC)
348 .set_description("local hostname")
349 .set_long_description("if blank, ceph assumes the short hostname (hostname -s)")
11fdf7f2 350 .set_flag(Option::FLAG_NO_MON_UPDATE)
d2e6a577
FG
351 .add_service("common")
352 .add_tag("network"),
353
354 Option("fsid", Option::TYPE_UUID, Option::LEVEL_BASIC)
355 .set_description("cluster fsid (uuid)")
11fdf7f2 356 .set_flag(Option::FLAG_NO_MON_UPDATE)
81eedcae 357 .set_flag(Option::FLAG_STARTUP)
d2e6a577
FG
358 .add_service("common")
359 .add_tag("service"),
360
361 Option("public_addr", Option::TYPE_ADDR, Option::LEVEL_BASIC)
362 .set_description("public-facing address to bind to")
81eedcae 363 .set_flag(Option::FLAG_STARTUP)
d2e6a577
FG
364 .add_service({"mon", "mds", "osd", "mgr"}),
365
366 Option("public_bind_addr", Option::TYPE_ADDR, Option::LEVEL_ADVANCED)
367 .set_default(entity_addr_t())
81eedcae 368 .set_flag(Option::FLAG_STARTUP)
d2e6a577
FG
369 .add_service("mon")
370 .set_description(""),
371
372 Option("cluster_addr", Option::TYPE_ADDR, Option::LEVEL_BASIC)
373 .set_description("cluster-facing address to bind to")
374 .add_service("osd")
81eedcae 375 .set_flag(Option::FLAG_STARTUP)
d2e6a577
FG
376 .add_tag("network"),
377
378 Option("public_network", Option::TYPE_STR, Option::LEVEL_ADVANCED)
379 .add_service({"mon", "mds", "osd", "mgr"})
81eedcae 380 .set_flag(Option::FLAG_STARTUP)
d2e6a577 381 .add_tag("network")
3efd9988
FG
382 .set_description("Network(s) from which to choose a public address to bind to"),
383
384 Option("public_network_interface", Option::TYPE_STR, Option::LEVEL_ADVANCED)
385 .add_service({"mon", "mds", "osd", "mgr"})
386 .add_tag("network")
81eedcae 387 .set_flag(Option::FLAG_STARTUP)
3efd9988
FG
388 .set_description("Interface name(s) from which to choose an address from a public_network to bind to; public_network must also be specified.")
389 .add_see_also("public_network"),
d2e6a577
FG
390
391 Option("cluster_network", Option::TYPE_STR, Option::LEVEL_ADVANCED)
392 .add_service("osd")
81eedcae 393 .set_flag(Option::FLAG_STARTUP)
d2e6a577 394 .add_tag("network")
3efd9988
FG
395 .set_description("Network(s) from which to choose a cluster address to bind to"),
396
397 Option("cluster_network_interface", Option::TYPE_STR, Option::LEVEL_ADVANCED)
398 .add_service({"mon", "mds", "osd", "mgr"})
81eedcae 399 .set_flag(Option::FLAG_STARTUP)
3efd9988
FG
400 .add_tag("network")
401 .set_description("Interface name(s) from which to choose an address from a cluster_network to bind to; cluster_network must also be specified.")
402 .add_see_also("cluster_network"),
d2e6a577
FG
403
404 Option("monmap", Option::TYPE_STR, Option::LEVEL_ADVANCED)
405 .set_description("path to MonMap file")
406 .set_long_description("This option is normally used during mkfs, but can also "
407 "be used to identify which monitors to connect to.")
11fdf7f2 408 .set_flag(Option::FLAG_NO_MON_UPDATE)
d2e6a577 409 .add_service("mon")
11fdf7f2 410 .set_flag(Option::FLAG_CREATE),
d2e6a577
FG
411
412 Option("mon_host", Option::TYPE_STR, Option::LEVEL_BASIC)
413 .set_description("list of hosts or addresses to search for a monitor")
414 .set_long_description("This is a comma, whitespace, or semicolon separated "
415 "list of IP addresses or hostnames. Hostnames are "
416 "resolved via DNS and all A or AAAA records are "
417 "included in the search list.")
11fdf7f2 418 .set_flag(Option::FLAG_NO_MON_UPDATE)
81eedcae 419 .set_flag(Option::FLAG_STARTUP)
d2e6a577
FG
420 .add_service("common"),
421
422 Option("mon_dns_srv_name", Option::TYPE_STR, Option::LEVEL_ADVANCED)
3efd9988 423 .set_default("ceph-mon")
d2e6a577 424 .set_description("name of DNS SRV record to check for monitor addresses")
11fdf7f2 425 .set_flag(Option::FLAG_NO_MON_UPDATE)
81eedcae 426 .set_flag(Option::FLAG_STARTUP)
d2e6a577
FG
427 .add_service("common")
428 .add_tag("network")
429 .add_see_also("mon_host"),
430
431 // lockdep
432 Option("lockdep", Option::TYPE_BOOL, Option::LEVEL_DEV)
433 .set_description("enable lockdep lock dependency analyzer")
11fdf7f2 434 .set_flag(Option::FLAG_NO_MON_UPDATE)
81eedcae 435 .set_flag(Option::FLAG_STARTUP)
d2e6a577
FG
436 .add_service("common"),
437
438 Option("lockdep_force_backtrace", Option::TYPE_BOOL, Option::LEVEL_DEV)
439 .set_description("always gather current backtrace at every lock")
81eedcae 440 .set_flag(Option::FLAG_STARTUP)
d2e6a577
FG
441 .add_service("common")
442 .add_see_also("lockdep"),
443
444 Option("run_dir", Option::TYPE_STR, Option::LEVEL_ADVANCED)
445 .set_default("/var/run/ceph")
81eedcae 446 .set_flag(Option::FLAG_STARTUP)
d2e6a577
FG
447 .set_description("path for the 'run' directory for storing pid and socket files")
448 .add_service("common")
449 .add_see_also("admin_socket"),
450
451 Option("admin_socket", Option::TYPE_STR, Option::LEVEL_ADVANCED)
452 .set_default("")
453 .set_daemon_default("$run_dir/$cluster-$name.asok")
81eedcae 454 .set_flag(Option::FLAG_STARTUP)
d2e6a577
FG
455 .set_description("path for the runtime control socket file, used by the 'ceph daemon' command")
456 .add_service("common"),
457
458 Option("admin_socket_mode", Option::TYPE_STR, Option::LEVEL_ADVANCED)
459 .set_description("file mode to set for the admin socket file, e.g, '0755'")
81eedcae 460 .set_flag(Option::FLAG_STARTUP)
d2e6a577
FG
461 .add_service("common")
462 .add_see_also("admin_socket"),
463
d2e6a577
FG
464 // daemon
465 Option("daemonize", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
466 .set_default(false)
467 .set_daemon_default(true)
468 .set_description("whether to daemonize (background) after startup")
81eedcae 469 .set_flag(Option::FLAG_STARTUP)
11fdf7f2 470 .set_flag(Option::FLAG_NO_MON_UPDATE)
d2e6a577
FG
471 .add_service({"mon", "mgr", "osd", "mds"})
472 .add_tag("service")
473 .add_see_also({"pid_file", "chdir"}),
474
475 Option("setuser", Option::TYPE_STR, Option::LEVEL_ADVANCED)
81eedcae 476 .set_flag(Option::FLAG_STARTUP)
d2e6a577
FG
477 .set_description("uid or user name to switch to on startup")
478 .set_long_description("This is normally specified by the systemd unit file.")
479 .add_service({"mon", "mgr", "osd", "mds"})
480 .add_tag("service")
481 .add_see_also("setgroup"),
482
483 Option("setgroup", Option::TYPE_STR, Option::LEVEL_ADVANCED)
81eedcae 484 .set_flag(Option::FLAG_STARTUP)
d2e6a577
FG
485 .set_description("gid or group name to switch to on startup")
486 .set_long_description("This is normally specified by the systemd unit file.")
487 .add_service({"mon", "mgr", "osd", "mds"})
488 .add_tag("service")
489 .add_see_also("setuser"),
490
491 Option("setuser_match_path", Option::TYPE_STR, Option::LEVEL_ADVANCED)
81eedcae 492 .set_flag(Option::FLAG_STARTUP)
d2e6a577
FG
493 .set_description("if set, setuser/setgroup is condition on this path matching ownership")
494 .set_long_description("If setuser or setgroup are specified, and this option is non-empty, then the uid/gid of the daemon will only be changed if the file or directory specified by this option has a matching uid and/or gid. This exists primarily to allow switching to user ceph for OSDs to be conditional on whether the osd data contents have also been chowned after an upgrade. This is normally specified by the systemd unit file.")
495 .add_service({"mon", "mgr", "osd", "mds"})
496 .add_tag("service")
497 .add_see_also({"setuser", "setgroup"}),
498
499 Option("pid_file", Option::TYPE_STR, Option::LEVEL_ADVANCED)
81eedcae 500 .set_flag(Option::FLAG_STARTUP)
d2e6a577
FG
501 .set_description("path to write a pid file (if any)")
502 .add_service({"mon", "mgr", "osd", "mds"})
503 .add_tag("service"),
504
505 Option("chdir", Option::TYPE_STR, Option::LEVEL_ADVANCED)
506 .set_description("path to chdir(2) to after daemonizing")
81eedcae 507 .set_flag(Option::FLAG_STARTUP)
11fdf7f2 508 .set_flag(Option::FLAG_NO_MON_UPDATE)
d2e6a577
FG
509 .add_service({"mon", "mgr", "osd", "mds"})
510 .add_tag("service")
511 .add_see_also("daemonize"),
512
513 Option("fatal_signal_handlers", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
514 .set_default(true)
81eedcae 515 .set_flag(Option::FLAG_STARTUP)
d2e6a577
FG
516 .set_description("whether to register signal handlers for SIGABRT etc that dump a stack trace")
517 .set_long_description("This is normally true for daemons and values for libraries.")
518 .add_service({"mon", "mgr", "osd", "mds"})
519 .add_tag("service"),
520
11fdf7f2 521 Option("crash_dir", Option::TYPE_STR, Option::LEVEL_ADVANCED)
81eedcae 522 .set_flag(Option::FLAG_STARTUP)
11fdf7f2
TL
523 .set_default("/var/lib/ceph/crash")
524 .set_description("Directory where crash reports are archived"),
525
d2e6a577
FG
526 // restapi
527 Option("restapi_log_level", Option::TYPE_STR, Option::LEVEL_ADVANCED)
528 .set_description("default set by python code"),
529
530 Option("restapi_base_url", Option::TYPE_STR, Option::LEVEL_ADVANCED)
531 .set_description("default set by python code"),
532
533 Option("erasure_code_dir", Option::TYPE_STR, Option::LEVEL_ADVANCED)
534 .set_default(CEPH_PKGLIBDIR"/erasure-code")
81eedcae 535 .set_flag(Option::FLAG_STARTUP)
d2e6a577 536 .set_description("directory where erasure-code plugins can be found")
11fdf7f2 537 .add_service({"mon", "osd"}),
d2e6a577
FG
538
539 // logging
540 Option("log_file", Option::TYPE_STR, Option::LEVEL_BASIC)
541 .set_default("")
542 .set_daemon_default("/var/log/ceph/$cluster-$name.log")
543 .set_description("path to log file")
11fdf7f2
TL
544 .add_see_also({"log_to_file",
545 "log_to_stderr",
d2e6a577
FG
546 "err_to_stderr",
547 "log_to_syslog",
548 "err_to_syslog"}),
549
550 Option("log_max_new", Option::TYPE_INT, Option::LEVEL_ADVANCED)
551 .set_default(1000)
552 .set_description("max unwritten log entries to allow before waiting to flush to the log")
553 .add_see_also("log_max_recent"),
554
555 Option("log_max_recent", Option::TYPE_INT, Option::LEVEL_ADVANCED)
556 .set_default(500)
557 .set_daemon_default(10000)
558 .set_description("recent log entries to keep in memory to dump in the event of a crash")
559 .set_long_description("The purpose of this option is to log at a higher debug level only to the in-memory buffer, and write out the detailed log messages only if there is a crash. Only log entries below the lower log level will be written unconditionally to the log. For example, debug_osd=1/5 will write everything <= 1 to the log unconditionally but keep entries at levels 2-5 in memory. If there is a seg fault or assertion failure, all entries will be dumped to the log."),
560
11fdf7f2
TL
561 Option("log_to_file", Option::TYPE_BOOL, Option::LEVEL_BASIC)
562 .set_default(true)
563 .set_description("send log lines to a file")
564 .add_see_also("log_file"),
565
d2e6a577
FG
566 Option("log_to_stderr", Option::TYPE_BOOL, Option::LEVEL_BASIC)
567 .set_default(true)
568 .set_daemon_default(false)
569 .set_description("send log lines to stderr"),
570
571 Option("err_to_stderr", Option::TYPE_BOOL, Option::LEVEL_BASIC)
572 .set_default(false)
573 .set_daemon_default(true)
574 .set_description("send critical error log lines to stderr"),
575
b32b8144 576 Option("log_stderr_prefix", Option::TYPE_STR, Option::LEVEL_ADVANCED)
11fdf7f2
TL
577 .set_description("String to prefix log messages with when sent to stderr")
578 .set_long_description("This is useful in container environments when combined with mon_cluster_log_to_stderr. The mon log prefixes each line with the channel name (e.g., 'default', 'audit'), while log_stderr_prefix can be set to 'debug '.")
579 .add_see_also("mon_cluster_log_to_stderr"),
b32b8144 580
d2e6a577
FG
581 Option("log_to_syslog", Option::TYPE_BOOL, Option::LEVEL_BASIC)
582 .set_default(false)
583 .set_description("send log lines to syslog facility"),
584
585 Option("err_to_syslog", Option::TYPE_BOOL, Option::LEVEL_BASIC)
586 .set_default(false)
587 .set_description("send critical error log lines to syslog facility"),
588
589 Option("log_flush_on_exit", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
590 .set_default(false)
591 .set_description("set a process exit handler to ensure the log is flushed on exit"),
592
593 Option("log_stop_at_utilization", Option::TYPE_FLOAT, Option::LEVEL_BASIC)
594 .set_default(.97)
595 .set_min_max(0.0, 1.0)
596 .set_description("stop writing to the log file when device utilization reaches this ratio")
597 .add_see_also("log_file"),
598
599 Option("log_to_graylog", Option::TYPE_BOOL, Option::LEVEL_BASIC)
600 .set_default(false)
601 .set_description("send log lines to remote graylog server")
602 .add_see_also({"err_to_graylog",
603 "log_graylog_host",
604 "log_graylog_port"}),
605
606 Option("err_to_graylog", Option::TYPE_BOOL, Option::LEVEL_BASIC)
607 .set_default(false)
608 .set_description("send critical error log lines to remote graylog server")
609 .add_see_also({"log_to_graylog",
610 "log_graylog_host",
611 "log_graylog_port"}),
612
613 Option("log_graylog_host", Option::TYPE_STR, Option::LEVEL_BASIC)
614 .set_default("127.0.0.1")
615 .set_description("address or hostname of graylog server to log to")
616 .add_see_also({"log_to_graylog",
617 "err_to_graylog",
618 "log_graylog_port"}),
619
620 Option("log_graylog_port", Option::TYPE_INT, Option::LEVEL_BASIC)
621 .set_default(12201)
622 .set_description("port number for the remote graylog server")
623 .add_see_also("log_graylog_host"),
624
11fdf7f2
TL
625 Option("log_coarse_timestamps", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
626 .set_default(true)
627 .set_description("timestamp log entries from coarse system clock "
628 "to improve performance")
629 .add_service("common")
630 .add_tag("performance")
631 .add_tag("service"),
d2e6a577
FG
632
633
634 // unmodified
635 Option("clog_to_monitors", Option::TYPE_STR, Option::LEVEL_ADVANCED)
636 .set_default("default=true")
81eedcae 637 .set_flag(Option::FLAG_RUNTIME)
11fdf7f2 638 .set_description("Make daemons send cluster log messages to monitors"),
d2e6a577
FG
639
640 Option("clog_to_syslog", Option::TYPE_STR, Option::LEVEL_ADVANCED)
641 .set_default("false")
81eedcae 642 .set_flag(Option::FLAG_RUNTIME)
11fdf7f2 643 .set_description("Make daemons send cluster log messages to syslog"),
d2e6a577
FG
644
645 Option("clog_to_syslog_level", Option::TYPE_STR, Option::LEVEL_ADVANCED)
646 .set_default("info")
81eedcae 647 .set_flag(Option::FLAG_RUNTIME)
11fdf7f2
TL
648 .set_description("Syslog level for cluster log messages")
649 .add_see_also("clog_to_syslog"),
d2e6a577
FG
650
651 Option("clog_to_syslog_facility", Option::TYPE_STR, Option::LEVEL_ADVANCED)
652 .set_default("default=daemon audit=local0")
81eedcae 653 .set_flag(Option::FLAG_RUNTIME)
11fdf7f2
TL
654 .set_description("Syslog facility for cluster log messages")
655 .add_see_also("clog_to_syslog"),
d2e6a577
FG
656
657 Option("clog_to_graylog", Option::TYPE_STR, Option::LEVEL_ADVANCED)
658 .set_default("false")
81eedcae 659 .set_flag(Option::FLAG_RUNTIME)
11fdf7f2 660 .set_description("Make daemons send cluster log to graylog"),
d2e6a577
FG
661
662 Option("clog_to_graylog_host", Option::TYPE_STR, Option::LEVEL_ADVANCED)
663 .set_default("127.0.0.1")
81eedcae 664 .set_flag(Option::FLAG_RUNTIME)
11fdf7f2
TL
665 .set_description("Graylog host to cluster log messages")
666 .add_see_also("clog_to_graylog"),
d2e6a577
FG
667
668 Option("clog_to_graylog_port", Option::TYPE_STR, Option::LEVEL_ADVANCED)
669 .set_default("12201")
81eedcae 670 .set_flag(Option::FLAG_RUNTIME)
11fdf7f2
TL
671 .set_description("Graylog port number for cluster log messages")
672 .add_see_also("clog_to_graylog"),
d2e6a577 673
b32b8144
FG
674 Option("mon_cluster_log_to_stderr", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
675 .set_default(false)
11fdf7f2 676 .add_service("mon")
81eedcae 677 .set_flag(Option::FLAG_RUNTIME)
11fdf7f2
TL
678 .set_description("Make monitor send cluster log messages to stderr (prefixed by channel)")
679 .add_see_also("log_stderr_prefix"),
b32b8144 680
d2e6a577
FG
681 Option("mon_cluster_log_to_syslog", Option::TYPE_STR, Option::LEVEL_ADVANCED)
682 .set_default("default=false")
81eedcae 683 .set_flag(Option::FLAG_RUNTIME)
11fdf7f2
TL
684 .add_service("mon")
685 .set_description("Make monitor send cluster log messages to syslog"),
d2e6a577
FG
686
687 Option("mon_cluster_log_to_syslog_level", Option::TYPE_STR, Option::LEVEL_ADVANCED)
688 .set_default("info")
11fdf7f2 689 .add_service("mon")
81eedcae 690 .set_flag(Option::FLAG_RUNTIME)
11fdf7f2
TL
691 .set_description("Syslog level for cluster log messages")
692 .add_see_also("mon_cluster_log_to_syslog"),
d2e6a577
FG
693
694 Option("mon_cluster_log_to_syslog_facility", Option::TYPE_STR, Option::LEVEL_ADVANCED)
695 .set_default("daemon")
11fdf7f2 696 .add_service("mon")
81eedcae 697 .set_flag(Option::FLAG_RUNTIME)
11fdf7f2
TL
698 .set_description("Syslog facility for cluster log messages")
699 .add_see_also("mon_cluster_log_to_syslog"),
700
701 Option("mon_cluster_log_to_file", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
702 .set_default(true)
81eedcae 703 .set_flag(Option::FLAG_RUNTIME)
11fdf7f2
TL
704 .add_service("mon")
705 .set_description("Make monitor send cluster log messages to file")
706 .add_see_also("mon_cluster_log_file"),
d2e6a577
FG
707
708 Option("mon_cluster_log_file", Option::TYPE_STR, Option::LEVEL_ADVANCED)
709 .set_default("default=/var/log/ceph/$cluster.$channel.log cluster=/var/log/ceph/$cluster.log")
81eedcae 710 .set_flag(Option::FLAG_RUNTIME)
11fdf7f2
TL
711 .add_service("mon")
712 .set_description("File(s) to write cluster log to")
713 .set_long_description("This can either be a simple file name to receive all messages, or a list of key/value pairs where the key is the log channel and the value is the filename, which may include $cluster and $channel metavariables")
714 .add_see_also("mon_cluster_log_to_file"),
d2e6a577
FG
715
716 Option("mon_cluster_log_file_level", Option::TYPE_STR, Option::LEVEL_ADVANCED)
a8e16298 717 .set_default("debug")
81eedcae 718 .set_flag(Option::FLAG_RUNTIME)
11fdf7f2
TL
719 .add_service("mon")
720 .set_description("Lowest level to include is cluster log file")
721 .add_see_also("mon_cluster_log_file"),
d2e6a577
FG
722
723 Option("mon_cluster_log_to_graylog", Option::TYPE_STR, Option::LEVEL_ADVANCED)
724 .set_default("false")
81eedcae 725 .set_flag(Option::FLAG_RUNTIME)
11fdf7f2
TL
726 .add_service("mon")
727 .set_description("Make monitor send cluster log to graylog"),
d2e6a577
FG
728
729 Option("mon_cluster_log_to_graylog_host", Option::TYPE_STR, Option::LEVEL_ADVANCED)
730 .set_default("127.0.0.1")
81eedcae 731 .set_flag(Option::FLAG_RUNTIME)
11fdf7f2
TL
732 .add_service("mon")
733 .set_description("Graylog host for cluster log messages")
734 .add_see_also("mon_cluster_log_to_graylog"),
d2e6a577
FG
735
736 Option("mon_cluster_log_to_graylog_port", Option::TYPE_STR, Option::LEVEL_ADVANCED)
737 .set_default("12201")
81eedcae 738 .set_flag(Option::FLAG_RUNTIME)
11fdf7f2
TL
739 .add_service("mon")
740 .set_description("Graylog port for cluster log messages")
741 .add_see_also("mon_cluster_log_to_graylog"),
d2e6a577
FG
742
743 Option("enable_experimental_unrecoverable_data_corrupting_features", Option::TYPE_STR, Option::LEVEL_ADVANCED)
81eedcae 744 .set_flag(Option::FLAG_RUNTIME)
d2e6a577 745 .set_default("")
11fdf7f2 746 .set_description("Enable named (or all with '*') experimental features that may be untested, dangerous, and/or cause permanent data loss"),
d2e6a577
FG
747
748 Option("plugin_dir", Option::TYPE_STR, Option::LEVEL_ADVANCED)
749 .set_default(CEPH_PKGLIBDIR)
81eedcae 750 .set_flag(Option::FLAG_STARTUP)
11fdf7f2
TL
751 .add_service({"mon", "osd"})
752 .set_description("Base directory for dynamically loaded plugins"),
d2e6a577 753
11fdf7f2 754 // XIO
d2e6a577
FG
755 Option("xio_trace_mempool", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
756 .set_default(false)
757 .set_description(""),
758
759 Option("xio_trace_msgcnt", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
760 .set_default(false)
761 .set_description(""),
762
763 Option("xio_trace_xcon", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
764 .set_default(false)
765 .set_description(""),
766
767 Option("xio_queue_depth", Option::TYPE_INT, Option::LEVEL_ADVANCED)
768 .set_default(128)
769 .set_description(""),
770
771 Option("xio_mp_min", Option::TYPE_INT, Option::LEVEL_ADVANCED)
772 .set_default(128)
773 .set_description(""),
774
11fdf7f2 775 Option("xio_mp_max_64", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577
FG
776 .set_default(65536)
777 .set_description(""),
778
11fdf7f2 779 Option("xio_mp_max_256", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577
FG
780 .set_default(8192)
781 .set_description(""),
c07f9fc5 782
11fdf7f2 783 Option("xio_mp_max_1k", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577
FG
784 .set_default(8192)
785 .set_description(""),
786
11fdf7f2 787 Option("xio_mp_max_page", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577
FG
788 .set_default(4096)
789 .set_description(""),
790
11fdf7f2 791 Option("xio_mp_max_hint", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577
FG
792 .set_default(4096)
793 .set_description(""),
794
795 Option("xio_portal_threads", Option::TYPE_INT, Option::LEVEL_ADVANCED)
796 .set_default(2)
797 .set_description(""),
798
799 Option("xio_max_conns_per_portal", Option::TYPE_INT, Option::LEVEL_ADVANCED)
800 .set_default(32)
801 .set_description(""),
802
803 Option("xio_transport_type", Option::TYPE_STR, Option::LEVEL_ADVANCED)
804 .set_default("rdma")
805 .set_description(""),
806
11fdf7f2 807 Option("xio_max_send_inline", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577
FG
808 .set_default(512)
809 .set_description(""),
810
11fdf7f2 811 // Compressor
d2e6a577
FG
812 Option("compressor_zlib_isal", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
813 .set_default(false)
11fdf7f2 814 .set_description("Use Intel ISA-L accelerated zlib implementation if available"),
d2e6a577
FG
815
816 Option("compressor_zlib_level", Option::TYPE_INT, Option::LEVEL_ADVANCED)
817 .set_default(5)
11fdf7f2 818 .set_description("Zlib compression level to use"),
d2e6a577 819
11fdf7f2 820 Option("qat_compressor_enabled", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
d2e6a577 821 .set_default(false)
11fdf7f2 822 .set_description("Enable Intel QAT acceleration support for compression if available"),
d2e6a577
FG
823
824 Option("plugin_crypto_accelerator", Option::TYPE_STR, Option::LEVEL_ADVANCED)
825 .set_default("crypto_isal")
11fdf7f2 826 .set_description("Crypto accelerator library to use"),
d2e6a577 827
11fdf7f2 828 Option("mempool_debug", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577 829 .set_default(false)
11fdf7f2 830 .set_flag(Option::FLAG_NO_MON_UPDATE)
d2e6a577
FG
831 .set_description(""),
832
833 Option("key", Option::TYPE_STR, Option::LEVEL_ADVANCED)
834 .set_default("")
3efd9988
FG
835 .set_description("Authentication key")
836 .set_long_description("A CephX authentication key, base64 encoded. It normally looks something like 'AQAtut9ZdMbNJBAAHz6yBAWyJyz2yYRyeMWDag=='.")
81eedcae 837 .set_flag(Option::FLAG_STARTUP)
11fdf7f2 838 .set_flag(Option::FLAG_NO_MON_UPDATE)
3efd9988
FG
839 .add_see_also("keyfile")
840 .add_see_also("keyring"),
d2e6a577
FG
841
842 Option("keyfile", Option::TYPE_STR, Option::LEVEL_ADVANCED)
843 .set_default("")
3efd9988
FG
844 .set_description("Path to a file containing a key")
845 .set_long_description("The file should contain a CephX authentication key and optionally a trailing newline, but nothing else.")
81eedcae 846 .set_flag(Option::FLAG_STARTUP)
11fdf7f2 847 .set_flag(Option::FLAG_NO_MON_UPDATE)
3efd9988 848 .add_see_also("key"),
d2e6a577
FG
849
850 Option("keyring", Option::TYPE_STR, Option::LEVEL_ADVANCED)
851 .set_default(
852 "/etc/ceph/$cluster.$name.keyring,/etc/ceph/$cluster.keyring,"
11fdf7f2 853 "/etc/ceph/keyring,/etc/ceph/keyring.bin,"
d2e6a577
FG
854 #if defined(__FreeBSD)
855 "/usr/local/etc/ceph/$cluster.$name.keyring,"
856 "/usr/local/etc/ceph/$cluster.keyring,"
11fdf7f2 857 "/usr/local/etc/ceph/keyring,/usr/local/etc/ceph/keyring.bin,"
d2e6a577
FG
858 #endif
859 )
3efd9988
FG
860 .set_description("Path to a keyring file.")
861 .set_long_description("A keyring file is an INI-style formatted file where the section names are client or daemon names (e.g., 'osd.0') and each section contains a 'key' property with CephX authentication key as the value.")
81eedcae 862 .set_flag(Option::FLAG_STARTUP)
11fdf7f2 863 .set_flag(Option::FLAG_NO_MON_UPDATE)
3efd9988
FG
864 .add_see_also("key")
865 .add_see_also("keyfile"),
d2e6a577
FG
866
867 Option("heartbeat_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
868 .set_default(5)
81eedcae 869 .set_flag(Option::FLAG_STARTUP)
11fdf7f2 870 .set_description("Frequency of internal heartbeat checks (seconds)"),
d2e6a577
FG
871
872 Option("heartbeat_file", Option::TYPE_STR, Option::LEVEL_ADVANCED)
873 .set_default("")
81eedcae 874 .set_flag(Option::FLAG_STARTUP)
11fdf7f2
TL
875 .set_description("File to touch on successful internal heartbeat")
876 .set_long_description("If set, this file will be touched every time an internal heartbeat check succeeds.")
877 .add_see_also("heartbeat_interval"),
d2e6a577
FG
878
879 Option("heartbeat_inject_failure", Option::TYPE_INT, Option::LEVEL_DEV)
880 .set_default(0)
881 .set_description(""),
882
883 Option("perf", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
884 .set_default(true)
11fdf7f2
TL
885 .set_description("Enable internal performance metrics")
886 .set_long_description("If enabled, collect and expose internal health metrics"),
d2e6a577
FG
887
888 Option("ms_type", Option::TYPE_STR, Option::LEVEL_ADVANCED)
81eedcae 889 .set_flag(Option::FLAG_STARTUP)
d2e6a577 890 .set_default("async+posix")
11fdf7f2 891 .set_description("Messenger implementation to use for network communication"),
d2e6a577
FG
892
893 Option("ms_public_type", Option::TYPE_STR, Option::LEVEL_ADVANCED)
894 .set_default("")
81eedcae 895 .set_flag(Option::FLAG_STARTUP)
11fdf7f2
TL
896 .set_description("Messenger implementation to use for the public network")
897 .set_long_description("If not specified, use ms_type")
898 .add_see_also("ms_type"),
d2e6a577
FG
899
900 Option("ms_cluster_type", Option::TYPE_STR, Option::LEVEL_ADVANCED)
901 .set_default("")
81eedcae 902 .set_flag(Option::FLAG_STARTUP)
11fdf7f2
TL
903 .set_description("Messenger implementation to use for the internal cluster network")
904 .set_long_description("If not specified, use ms_type")
905 .add_see_also("ms_type"),
906
907 Option("ms_mon_cluster_mode", Option::TYPE_STR, Option::LEVEL_BASIC)
494da23a 908 .set_default("secure crc")
81eedcae 909 .set_flag(Option::FLAG_STARTUP)
11fdf7f2
TL
910 .set_description("Connection modes (crc, secure) for intra-mon connections in order of preference")
911 .add_see_also("ms_mon_service_mode")
912 .add_see_also("ms_mon_client_mode")
913 .add_see_also("ms_service_mode")
914 .add_see_also("ms_cluster_mode")
915 .add_see_also("ms_client_mode"),
916
917 Option("ms_mon_service_mode", Option::TYPE_STR, Option::LEVEL_BASIC)
494da23a 918 .set_default("secure crc")
81eedcae 919 .set_flag(Option::FLAG_STARTUP)
11fdf7f2
TL
920 .set_description("Allowed connection modes (crc, secure) for connections to mons")
921 .add_see_also("ms_service_mode")
922 .add_see_also("ms_mon_cluster_mode")
923 .add_see_also("ms_mon_client_mode")
924 .add_see_also("ms_cluster_mode")
925 .add_see_also("ms_client_mode"),
926
927 Option("ms_mon_client_mode", Option::TYPE_STR, Option::LEVEL_BASIC)
494da23a 928 .set_default("secure crc")
81eedcae 929 .set_flag(Option::FLAG_STARTUP)
11fdf7f2
TL
930 .set_description("Connection modes (crc, secure) for connections from clients to monitors in order of preference")
931 .add_see_also("ms_mon_service_mode")
932 .add_see_also("ms_mon_cluster_mode")
933 .add_see_also("ms_service_mode")
934 .add_see_also("ms_cluster_mode")
935 .add_see_also("ms_client_mode"),
936
937 Option("ms_cluster_mode", Option::TYPE_STR, Option::LEVEL_BASIC)
494da23a 938 .set_default("crc secure")
81eedcae 939 .set_flag(Option::FLAG_STARTUP)
11fdf7f2
TL
940 .set_description("Connection modes (crc, secure) for intra-cluster connections in order of preference")
941 .add_see_also("ms_service_mode")
942 .add_see_also("ms_client_mode"),
943
944 Option("ms_service_mode", Option::TYPE_STR, Option::LEVEL_BASIC)
494da23a 945 .set_default("crc secure")
81eedcae 946 .set_flag(Option::FLAG_STARTUP)
11fdf7f2
TL
947 .set_description("Allowed connection modes (crc, secure) for connections to daemons")
948 .add_see_also("ms_cluster_mode")
949 .add_see_also("ms_client_mode"),
950
951 Option("ms_client_mode", Option::TYPE_STR, Option::LEVEL_BASIC)
494da23a 952 .set_default("crc secure")
81eedcae 953 .set_flag(Option::FLAG_STARTUP)
11fdf7f2
TL
954 .set_description("Connection modes (crc, secure) for connections from clients in order of preference")
955 .add_see_also("ms_cluster_mode")
956 .add_see_also("ms_service_mode"),
d2e6a577 957
81eedcae
TL
958 Option("ms_learn_addr_from_peer", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
959 .set_default(true)
960 .set_description("Learn address from what IP our first peer thinks we connect from")
961 .set_long_description("Use the IP address our first peer (usually a monitor) sees that we are connecting from. This is useful if a client is behind some sort of NAT and we want to see it identified by its local (not NATed) address."),
962
d2e6a577
FG
963 Option("ms_tcp_nodelay", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
964 .set_default(true)
11fdf7f2 965 .set_description("Disable Nagle's algorithm and send queued network traffic immediately"),
d2e6a577 966
11fdf7f2 967 Option("ms_tcp_rcvbuf", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577 968 .set_default(0)
11fdf7f2 969 .set_description("Size of TCP socket receive buffer"),
d2e6a577 970
11fdf7f2 971 Option("ms_tcp_prefetch_max_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 972 .set_default(4_K)
11fdf7f2 973 .set_description("Maximum amount of data to prefetch out of the socket receive buffer"),
d2e6a577
FG
974
975 Option("ms_initial_backoff", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
976 .set_default(.2)
11fdf7f2 977 .set_description("Initial backoff after a network error is detected (seconds)"),
d2e6a577
FG
978
979 Option("ms_max_backoff", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
980 .set_default(15.0)
11fdf7f2
TL
981 .set_description("Maximum backoff after a network error before retrying (seconds)")
982 .add_see_also("ms_initial_backoff"),
d2e6a577 983
11fdf7f2 984 Option("ms_crc_data", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577 985 .set_default(true)
11fdf7f2 986 .set_description("Set and/or verify crc32c checksum on data payload sent over network"),
d2e6a577 987
11fdf7f2 988 Option("ms_crc_header", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577 989 .set_default(true)
11fdf7f2 990 .set_description("Set and/or verify crc32c checksum on header payload sent over network"),
d2e6a577 991
11fdf7f2 992 Option("ms_die_on_bad_msg", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577 993 .set_default(false)
11fdf7f2 994 .set_description("Induce a daemon crash/exit when a bad network message is received"),
d2e6a577 995
11fdf7f2 996 Option("ms_die_on_unhandled_msg", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577 997 .set_default(false)
11fdf7f2 998 .set_description("Induce a daemon crash/exit when an unrecognized message is received"),
d2e6a577 999
11fdf7f2 1000 Option("ms_die_on_old_message", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577 1001 .set_default(false)
11fdf7f2 1002 .set_description("Induce a daemon crash/exit when a old, undecodable message is received"),
d2e6a577 1003
11fdf7f2 1004 Option("ms_die_on_skipped_message", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577 1005 .set_default(false)
11fdf7f2 1006 .set_description("Induce a daemon crash/exit if sender skips a message sequence number"),
d2e6a577 1007
11fdf7f2
TL
1008 Option("ms_die_on_bug", Option::TYPE_BOOL, Option::LEVEL_DEV)
1009 .set_default(false)
1010 .set_description("Induce a crash/exit on various bugs (for testing purposes)"),
1011
1012 Option("ms_dispatch_throttle_bytes", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
1013 .set_default(100_M)
1014 .set_description("Limit messages that are read off the network but still being processed"),
1015
1016 Option("ms_msgr2_sign_messages", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1017 .set_default(false)
1018 .set_description("Sign msgr2 frames' payload")
1019 .add_see_also("ms_msgr2_encrypt_messages"),
1020
1021 Option("ms_msgr2_encrypt_messages", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1022 .set_default(false)
1023 .set_description("Encrypt msgr2 frames' payload")
1024 .add_see_also("ms_msgr2_sign_messages"),
1025
1026 Option("ms_bind_ipv4", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1027 .set_default(true)
1028 .set_description("Bind servers to IPv4 address(es)")
1029 .add_see_also("ms_bind_ipv6"),
d2e6a577
FG
1030
1031 Option("ms_bind_ipv6", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1032 .set_default(false)
11fdf7f2
TL
1033 .set_description("Bind servers to IPv6 address(es)")
1034 .add_see_also("ms_bind_ipv4"),
1035
1036 Option("ms_bind_prefer_ipv4", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1037 .set_default(false)
1038 .set_description("Prefer IPV4 over IPV6 address(es)"),
1039
1040 Option("ms_bind_msgr1", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1041 .set_default(true)
1042 .set_description("Bind servers to msgr1 (legacy) protocol address(es)")
1043 .add_see_also("ms_bind_msgr2"),
1044
1045 Option("ms_bind_msgr2", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1046 .set_default(true)
1047 .set_description("Bind servers to msgr2 (nautilus+) protocol address(es)")
1048 .add_see_also("ms_bind_msgr1"),
d2e6a577
FG
1049
1050 Option("ms_bind_port_min", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1051 .set_default(6800)
11fdf7f2 1052 .set_description("Lowest port number to bind daemon(s) to"),
d2e6a577
FG
1053
1054 Option("ms_bind_port_max", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1055 .set_default(7300)
11fdf7f2 1056 .set_description("Highest port number to bind daemon(s) to"),
d2e6a577
FG
1057
1058 Option("ms_bind_retry_count", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1059 #if !defined(__FreeBSD__)
1060 .set_default(3)
1061 #else
1062 // FreeBSD does not use SO_REAUSEADDR so allow for a bit more time per default
1063 .set_default(6)
1064 #endif
11fdf7f2 1065 .set_description("Number of attempts to make while bind(2)ing to a port"),
d2e6a577
FG
1066
1067 Option("ms_bind_retry_delay", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1068 #if !defined(__FreeBSD__)
1069 .set_default(5)
1070 #else
1071 // FreeBSD does not use SO_REAUSEADDR so allow for a bit more time per default
1072 .set_default(6)
1073 #endif
11fdf7f2 1074 .set_description("Delay between bind(2) attempts (seconds)"),
d2e6a577
FG
1075
1076 Option("ms_bind_before_connect", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1077 .set_default(false)
11fdf7f2 1078 .set_description("Call bind(2) on client sockets"),
d2e6a577
FG
1079
1080 Option("ms_tcp_listen_backlog", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1081 .set_default(512)
11fdf7f2 1082 .set_description("Size of queue of incoming connections for accept(2)"),
d2e6a577 1083
11fdf7f2 1084 Option("ms_rwthread_stack_bytes", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 1085 .set_default(1_M)
11fdf7f2 1086 .set_description("Size of stack for SimpleMessenger read/write threads"),
d2e6a577 1087
81eedcae
TL
1088 Option("ms_connection_ready_timeout", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1089 .set_default(10)
1090 .set_description("Time before we declare a not yet ready connection as dead (seconds)"),
1091
1092 Option("ms_connection_idle_timeout", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577 1093 .set_default(900)
81eedcae 1094 .set_description("Time before an idle connection is closed (seconds)"),
d2e6a577 1095
11fdf7f2 1096 Option("ms_pq_max_tokens_per_priority", Option::TYPE_UINT, Option::LEVEL_DEV)
d2e6a577
FG
1097 .set_default(16777216)
1098 .set_description(""),
1099
11fdf7f2 1100 Option("ms_pq_min_cost", Option::TYPE_SIZE, Option::LEVEL_DEV)
d2e6a577
FG
1101 .set_default(65536)
1102 .set_description(""),
1103
1104 Option("ms_inject_socket_failures", Option::TYPE_UINT, Option::LEVEL_DEV)
1105 .set_default(0)
11fdf7f2 1106 .set_description("Inject a socket failure every Nth socket operation"),
d2e6a577
FG
1107
1108 Option("ms_inject_delay_type", Option::TYPE_STR, Option::LEVEL_DEV)
1109 .set_default("")
11fdf7f2
TL
1110 .set_description("Entity type to inject delays for")
1111 .set_flag(Option::FLAG_RUNTIME),
d2e6a577
FG
1112
1113 Option("ms_inject_delay_msg_type", Option::TYPE_STR, Option::LEVEL_DEV)
1114 .set_default("")
11fdf7f2 1115 .set_description("Message type to inject delays for"),
d2e6a577
FG
1116
1117 Option("ms_inject_delay_max", Option::TYPE_FLOAT, Option::LEVEL_DEV)
1118 .set_default(1)
11fdf7f2 1119 .set_description("Max delay to inject"),
d2e6a577
FG
1120
1121 Option("ms_inject_delay_probability", Option::TYPE_FLOAT, Option::LEVEL_DEV)
1122 .set_default(0)
1123 .set_description(""),
1124
1125 Option("ms_inject_internal_delays", Option::TYPE_FLOAT, Option::LEVEL_DEV)
1126 .set_default(0)
11fdf7f2 1127 .set_description("Inject various internal delays to induce races (seconds)"),
d2e6a577
FG
1128
1129 Option("ms_dump_on_send", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1130 .set_default(false)
11fdf7f2 1131 .set_description("Hexdump message to debug log on message send"),
d2e6a577
FG
1132
1133 Option("ms_dump_corrupt_message_level", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1134 .set_default(1)
11fdf7f2 1135 .set_description("Log level at which to hexdump corrupt messages we receive"),
d2e6a577
FG
1136
1137 Option("ms_async_op_threads", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1138 .set_default(3)
11fdf7f2
TL
1139 .set_min_max(1, 24)
1140 .set_description("Threadpool size for AsyncMessenger (ms_type=async)"),
d2e6a577
FG
1141
1142 Option("ms_async_max_op_threads", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1143 .set_default(5)
11fdf7f2
TL
1144 .set_description("Maximum threadpool size of AsyncMessenger")
1145 .add_see_also("ms_async_op_threads"),
d2e6a577
FG
1146
1147 Option("ms_async_rdma_device_name", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1148 .set_default("")
1149 .set_description(""),
1150
1151 Option("ms_async_rdma_enable_hugepage", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1152 .set_default(false)
1153 .set_description(""),
1154
11fdf7f2 1155 Option("ms_async_rdma_buffer_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 1156 .set_default(128_K)
d2e6a577
FG
1157 .set_description(""),
1158
1159 Option("ms_async_rdma_send_buffers", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 1160 .set_default(1_K)
d2e6a577
FG
1161 .set_description(""),
1162
1163 Option("ms_async_rdma_receive_buffers", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
11fdf7f2
TL
1164 .set_default(32768)
1165 .set_description(""),
1166
1167 Option("ms_async_rdma_receive_queue_len", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1168 .set_default(4096)
1169 .set_description(""),
1170
1171 Option("ms_async_rdma_support_srq", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1172 .set_default(true)
d2e6a577
FG
1173 .set_description(""),
1174
1175 Option("ms_async_rdma_port_num", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1176 .set_default(1)
1177 .set_description(""),
1178
1179 Option("ms_async_rdma_polling_us", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1180 .set_default(1000)
1181 .set_description(""),
1182
1183 Option("ms_async_rdma_local_gid", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1184 .set_default("")
1185 .set_description(""),
1186
1187 Option("ms_async_rdma_roce_ver", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1188 .set_default(1)
1189 .set_description(""),
1190
1191 Option("ms_async_rdma_sl", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1192 .set_default(3)
1193 .set_description(""),
1194
1195 Option("ms_async_rdma_dscp", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1196 .set_default(96)
1197 .set_description(""),
1198
91327a77
AA
1199 Option("ms_max_accept_failures", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1200 .set_default(4)
1201 .set_description("The maximum number of consecutive failed accept() calls before "
1202 "considering the daemon is misconfigured and abort it."),
1203
11fdf7f2
TL
1204 Option("ms_async_rdma_cm", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1205 .set_default(false)
1206 .set_description(""),
1207
1208 Option("ms_async_rdma_type", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1209 .set_default("ib")
1210 .set_description(""),
1211
d2e6a577
FG
1212 Option("ms_dpdk_port_id", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1213 .set_default(0)
1214 .set_description(""),
1215
1216 Option("ms_dpdk_coremask", Option::TYPE_STR, Option::LEVEL_ADVANCED)
11fdf7f2 1217 .set_default("0xF") //begin with 0x for the string
d2e6a577 1218 .set_description("")
11fdf7f2 1219 .add_see_also("ms_async_op_threads"),
d2e6a577
FG
1220
1221 Option("ms_dpdk_memory_channel", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1222 .set_default("4")
1223 .set_description(""),
1224
1225 Option("ms_dpdk_hugepages", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1226 .set_default("")
1227 .set_description(""),
1228
1229 Option("ms_dpdk_pmd", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1230 .set_default("")
1231 .set_description(""),
1232
1233 Option("ms_dpdk_host_ipv4_addr", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1234 .set_default("")
11fdf7f2 1235 .set_description(""),
d2e6a577
FG
1236
1237 Option("ms_dpdk_gateway_ipv4_addr", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1238 .set_default("")
11fdf7f2 1239 .set_description(""),
d2e6a577
FG
1240
1241 Option("ms_dpdk_netmask_ipv4_addr", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1242 .set_default("")
11fdf7f2 1243 .set_description(""),
c07f9fc5 1244
d2e6a577
FG
1245 Option("ms_dpdk_lro", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1246 .set_default(true)
1247 .set_description(""),
c07f9fc5 1248
d2e6a577
FG
1249 Option("ms_dpdk_hw_flow_control", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1250 .set_default(true)
1251 .set_description(""),
c07f9fc5 1252
d2e6a577
FG
1253 Option("ms_dpdk_hw_queue_weight", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1254 .set_default(1)
1255 .set_description(""),
c07f9fc5 1256
d2e6a577
FG
1257 Option("ms_dpdk_debug_allow_loopback", Option::TYPE_BOOL, Option::LEVEL_DEV)
1258 .set_default(false)
1259 .set_description(""),
c07f9fc5 1260
d2e6a577
FG
1261 Option("ms_dpdk_rx_buffer_count_per_core", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1262 .set_default(8192)
1263 .set_description(""),
c07f9fc5 1264
d2e6a577
FG
1265 Option("inject_early_sigterm", Option::TYPE_BOOL, Option::LEVEL_DEV)
1266 .set_default(false)
11fdf7f2
TL
1267 .set_description("send ourselves a SIGTERM early during startup"),
1268
1269 // MON
1270 Option("mon_enable_op_tracker", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1271 .set_default(true)
1272 .add_service("mon")
1273 .set_description("enable/disable MON op tracking"),
1274
1275 Option("mon_op_complaint_time", Option::TYPE_SECS, Option::LEVEL_ADVANCED)
1276 .set_default(30)
1277 .add_service("mon")
1278 .set_description("time after which to consider a monitor operation blocked "
1279 "after no updates"),
1280
1281 Option("mon_op_log_threshold", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1282 .set_default(5)
1283 .add_service("mon")
1284 .set_description("max number of slow ops to display"),
1285
1286 Option("mon_op_history_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1287 .set_default(20)
1288 .add_service("mon")
1289 .set_description("max number of completed ops to track"),
1290
1291 Option("mon_op_history_duration", Option::TYPE_SECS, Option::LEVEL_ADVANCED)
1292 .set_default(600)
1293 .add_service("mon")
1294 .set_description("expiration time in seconds of historical MON OPS"),
1295
1296 Option("mon_op_history_slow_op_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1297 .set_default(20)
1298 .add_service("mon")
1299 .set_description("max number of slow historical MON OPS to keep"),
1300
1301 Option("mon_op_history_slow_op_threshold", Option::TYPE_SECS, Option::LEVEL_ADVANCED)
1302 .set_default(10)
1303 .add_service("mon")
1304 .set_description("duration of an op to be considered as a historical slow op"),
c07f9fc5 1305
d2e6a577 1306 Option("mon_data", Option::TYPE_STR, Option::LEVEL_ADVANCED)
11fdf7f2 1307 .set_flag(Option::FLAG_NO_MON_UPDATE)
d2e6a577 1308 .set_default("/var/lib/ceph/mon/$cluster-$id")
11fdf7f2
TL
1309 .add_service("mon")
1310 .set_description("path to mon database"),
c07f9fc5 1311
d2e6a577
FG
1312 Option("mon_initial_members", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1313 .set_default("")
11fdf7f2
TL
1314 .add_service("mon")
1315 .set_flag(Option::FLAG_NO_MON_UPDATE)
1316 .set_flag(Option::FLAG_CLUSTER_CREATE)
d2e6a577 1317 .set_description(""),
c07f9fc5 1318
d2e6a577
FG
1319 Option("mon_compact_on_start", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1320 .set_default(false)
11fdf7f2 1321 .add_service("mon")
d2e6a577 1322 .set_description(""),
c07f9fc5 1323
d2e6a577
FG
1324 Option("mon_compact_on_bootstrap", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1325 .set_default(false)
11fdf7f2 1326 .add_service("mon")
d2e6a577 1327 .set_description(""),
c07f9fc5 1328
d2e6a577
FG
1329 Option("mon_compact_on_trim", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1330 .set_default(true)
11fdf7f2 1331 .add_service("mon")
d2e6a577 1332 .set_description(""),
c07f9fc5 1333
11fdf7f2
TL
1334 /* -- mon: osdmap prune (begin) -- */
1335 Option("mon_osdmap_full_prune_enabled", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1336 .set_default(true)
1337 .add_service("mon")
1338 .set_description("enables pruning full osdmap versions when we go over a given number of maps")
1339 .add_see_also("mon_osdmap_full_prune_min")
1340 .add_see_also("mon_osdmap_full_prune_interval")
1341 .add_see_also("mon_osdmap_full_prune_txsize"),
1342
1343 Option("mon_osdmap_full_prune_min", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1344 .set_default(10000)
1345 .add_service("mon")
1346 .set_description("minimum number of versions in the store to trigger full map pruning")
1347 .add_see_also("mon_osdmap_full_prune_enabled")
1348 .add_see_also("mon_osdmap_full_prune_interval")
1349 .add_see_also("mon_osdmap_full_prune_txsize"),
1350
1351 Option("mon_osdmap_full_prune_interval", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1352 .set_default(10)
1353 .add_service("mon")
1354 .set_description("interval between maps that will not be pruned; maps in the middle will be pruned.")
1355 .add_see_also("mon_osdmap_full_prune_enabled")
1356 .add_see_also("mon_osdmap_full_prune_interval")
1357 .add_see_also("mon_osdmap_full_prune_txsize"),
1358
1359 Option("mon_osdmap_full_prune_txsize", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1360 .set_default(100)
1361 .add_service("mon")
1362 .set_description("number of maps we will prune per iteration")
1363 .add_see_also("mon_osdmap_full_prune_enabled")
1364 .add_see_also("mon_osdmap_full_prune_interval")
1365 .add_see_also("mon_osdmap_full_prune_txsize"),
1366 /* -- mon: osdmap prune (end) -- */
1367
d2e6a577 1368 Option("mon_osd_cache_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
f64942e4 1369 .set_default(500)
11fdf7f2
TL
1370 .add_service("mon")
1371 .set_description("maximum number of OSDMaps to cache in memory"),
c07f9fc5 1372
d2e6a577
FG
1373 Option("mon_cpu_threads", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1374 .set_default(4)
11fdf7f2
TL
1375 .add_service("mon")
1376 .set_description("worker threads for CPU intensive background work"),
c07f9fc5 1377
11fdf7f2 1378 Option("mon_osd_mapping_pgs_per_chunk", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577 1379 .set_default(4096)
11fdf7f2
TL
1380 .add_service("mon")
1381 .set_description("granularity of PG placement calculation background work"),
c07f9fc5 1382
494da23a
TL
1383 Option("mon_clean_pg_upmaps_per_chunk", Option::TYPE_INT, Option::LEVEL_DEV)
1384 .set_default(256)
1385 .add_service("mon")
1386 .set_description("granularity of PG upmap validation background work"),
1387
d2e6a577
FG
1388 Option("mon_osd_max_creating_pgs", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1389 .set_default(1024)
11fdf7f2
TL
1390 .add_service("mon")
1391 .set_description("maximum number of PGs the mon will create at once"),
1392
1393 Option("mon_osd_max_initial_pgs", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1394 .set_default(1024)
1395 .add_service("mon")
1396 .set_description("maximum number of PGs a pool will created with")
1397 .set_long_description("If the user specifies more PGs than this, the cluster will subsequently split PGs after the pool is created in order to reach the target."),
c07f9fc5 1398
d2e6a577
FG
1399 Option("mon_tick_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1400 .set_default(5)
11fdf7f2
TL
1401 .add_service("mon")
1402 .set_description("interval for internal mon background checks"),
c07f9fc5 1403
d2e6a577
FG
1404 Option("mon_session_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1405 .set_default(300)
11fdf7f2
TL
1406 .add_service("mon")
1407 .set_description("close inactive mon client connections after this many seconds"),
c07f9fc5 1408
11fdf7f2 1409 Option("mon_subscribe_interval", Option::TYPE_FLOAT, Option::LEVEL_DEV)
b32b8144 1410 .set_default(1_day)
11fdf7f2
TL
1411 .add_service("mon")
1412 .set_description("subscribe interval for pre-jewel clients"),
c07f9fc5 1413
d2e6a577
FG
1414 Option("mon_delta_reset_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1415 .set_default(10)
11fdf7f2
TL
1416 .add_service("mon")
1417 .add_service("mon")
1418 .set_description("window duration for rate calculations in 'ceph status'"),
1419
d2e6a577 1420 Option("mon_osd_laggy_halflife", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144 1421 .set_default(1_hr)
11fdf7f2
TL
1422 .add_service("mon")
1423 .set_description("halflife of OSD 'lagginess' factor"),
c07f9fc5 1424
d2e6a577
FG
1425 Option("mon_osd_laggy_weight", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1426 .set_default(.3)
11fdf7f2
TL
1427 .set_min_max(0.0, 1.0)
1428 .add_service("mon")
1429 .set_description("how heavily to weight OSD marking itself back up in overall laggy_probability")
1430 .set_long_description("1.0 means that an OSD marking itself back up (because it was marked down but not actually dead) means a 100% laggy_probability; 0.0 effectively disables tracking of laggy_probability."),
c07f9fc5 1431
d2e6a577
FG
1432 Option("mon_osd_laggy_max_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1433 .set_default(300)
11fdf7f2
TL
1434 .add_service("mon")
1435 .set_description("cap value for period for OSD to be marked for laggy_interval calculation"),
c07f9fc5 1436
d2e6a577
FG
1437 Option("mon_osd_adjust_heartbeat_grace", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1438 .set_default(true)
11fdf7f2
TL
1439 .add_service("mon")
1440 .set_description("increase OSD heartbeat grace if peers appear to be laggy")
1441 .set_long_description("If an OSD is marked down but then marks itself back up, it implies it wasn't actually down but was unable to respond to heartbeats. If this option is true, we can use the laggy_probability and laggy_interval values calculated to model this situation to increase the heartbeat grace period for this OSD so that it isn't marked down again. laggy_probability is an estimated probability that the given OSD is down because it is laggy (not actually down), and laggy_interval is an estiate on how long it stays down when it is laggy.")
1442 .add_see_also("mon_osd_laggy_halflife")
1443 .add_see_also("mon_osd_laggy_weight")
1444 .add_see_also("mon_osd_laggy_max_interval"),
c07f9fc5 1445
d2e6a577
FG
1446 Option("mon_osd_adjust_down_out_interval", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1447 .set_default(true)
11fdf7f2
TL
1448 .add_service("mon")
1449 .set_description("increase the mon_osd_down_out_interval if an OSD appears to be laggy")
1450 .add_see_also("mon_osd_adjust_heartbeat_grace"),
c07f9fc5 1451
d2e6a577
FG
1452 Option("mon_osd_auto_mark_in", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1453 .set_default(false)
11fdf7f2
TL
1454 .add_service("mon")
1455 .set_description("mark any OSD that comes up 'in'"),
c07f9fc5 1456
d2e6a577
FG
1457 Option("mon_osd_auto_mark_auto_out_in", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1458 .set_default(true)
11fdf7f2
TL
1459 .add_service("mon")
1460 .set_description("mark any OSD that comes up that was automatically marked 'out' back 'in'")
1461 .add_see_also("mon_osd_down_out_interval"),
c07f9fc5 1462
d2e6a577
FG
1463 Option("mon_osd_auto_mark_new_in", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1464 .set_default(true)
11fdf7f2
TL
1465 .add_service("mon")
1466 .set_description("mark any new OSD that comes up 'in'"),
c07f9fc5 1467
d2e6a577
FG
1468 Option("mon_osd_destroyed_out_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1469 .set_default(600)
11fdf7f2
TL
1470 .add_service("mon")
1471 .set_description("mark any OSD 'out' that has been 'destroy'ed for this long (seconds)"),
c07f9fc5 1472
d2e6a577
FG
1473 Option("mon_osd_down_out_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1474 .set_default(600)
11fdf7f2
TL
1475 .add_service("mon")
1476 .set_description("mark any OSD 'out' that has been 'down' for this long (seconds)"),
c07f9fc5 1477
d2e6a577
FG
1478 Option("mon_osd_down_out_subtree_limit", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1479 .set_default("rack")
11fdf7f2
TL
1480 .set_flag(Option::FLAG_RUNTIME)
1481 .add_service("mon")
1482 .set_description("do not automatically mark OSDs 'out' if an entire subtree of this size is down")
1483 .add_see_also("mon_osd_down_out_interval"),
c07f9fc5 1484
d2e6a577
FG
1485 Option("mon_osd_min_up_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1486 .set_default(.3)
11fdf7f2
TL
1487 .add_service("mon")
1488 .set_description("do not automatically mark OSDs 'out' if fewer than this many OSDs are 'up'")
1489 .add_see_also("mon_osd_down_out_interval"),
c07f9fc5 1490
d2e6a577
FG
1491 Option("mon_osd_min_in_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1492 .set_default(.75)
11fdf7f2
TL
1493 .add_service("mon")
1494 .set_description("do not automatically mark OSDs 'out' if fewer than this many OSDs are 'in'")
1495 .add_see_also("mon_osd_down_out_interval"),
c07f9fc5 1496
d2e6a577
FG
1497 Option("mon_osd_warn_op_age", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1498 .set_default(32)
11fdf7f2
TL
1499 .add_service("mgr")
1500 .set_description("issue REQUEST_SLOW health warning if OSD ops are slower than this age (seconds)"),
c07f9fc5 1501
d2e6a577
FG
1502 Option("mon_osd_err_op_age_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1503 .set_default(128)
11fdf7f2
TL
1504 .add_service("mgr")
1505 .set_description("issue REQUEST_STUCK health error if OSD ops are slower than is age (seconds)"),
c07f9fc5 1506
11fdf7f2 1507 Option("mon_osd_prime_pg_temp", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577 1508 .set_default(true)
11fdf7f2
TL
1509 .add_service("mon")
1510 .set_description("minimize peering work by priming pg_temp values after a map change"),
c07f9fc5 1511
11fdf7f2 1512 Option("mon_osd_prime_pg_temp_max_time", Option::TYPE_FLOAT, Option::LEVEL_DEV)
d2e6a577 1513 .set_default(.5)
11fdf7f2
TL
1514 .add_service("mon")
1515 .set_description("maximum time to spend precalculating PG mappings on map change (seconds)"),
c07f9fc5 1516
d2e6a577
FG
1517 Option("mon_osd_prime_pg_temp_max_estimate", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1518 .set_default(.25)
11fdf7f2
TL
1519 .add_service("mon")
1520 .set_description("calculate all PG mappings if estimated fraction of PGs that change is above this amount"),
c07f9fc5 1521
b32b8144 1522 Option("mon_stat_smooth_intervals", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577 1523 .set_default(6)
b32b8144
FG
1524 .set_min(1)
1525 .add_service("mgr")
1526 .set_description("number of PGMaps stats over which we calc the average read/write throughput of the whole cluster"),
c07f9fc5 1527
d2e6a577
FG
1528 Option("mon_election_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1529 .set_default(5)
11fdf7f2
TL
1530 .add_service("mon")
1531 .set_description("maximum time for a mon election (seconds)"),
c07f9fc5 1532
d2e6a577
FG
1533 Option("mon_lease", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1534 .set_default(5)
11fdf7f2
TL
1535 .add_service("mon")
1536 .set_description("lease interval between quorum monitors (seconds)")
1537 .set_long_description("This setting controls how sensitive your mon quorum is to intermittent network issues or other failures."),
c07f9fc5 1538
d2e6a577
FG
1539 Option("mon_lease_renew_interval_factor", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1540 .set_default(.6)
11fdf7f2
TL
1541 .set_min_max((double)0.0, (double).9999999)
1542 .add_service("mon")
1543 .set_description("multiple of mon_lease for the lease renewal interval")
1544 .set_long_description("Leases must be renewed before they time out. A smaller value means frequent renewals, while a value close to 1 makes a lease expiration more likely.")
1545 .add_see_also("mon_lease"),
c07f9fc5 1546
d2e6a577
FG
1547 Option("mon_lease_ack_timeout_factor", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1548 .set_default(2.0)
11fdf7f2
TL
1549 .set_min_max(1.0001, 100.0)
1550 .add_service("mon")
1551 .set_description("multiple of mon_lease for the lease ack interval before calling new election")
1552 .add_see_also("mon_lease"),
c07f9fc5 1553
d2e6a577
FG
1554 Option("mon_accept_timeout_factor", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1555 .set_default(2.0)
11fdf7f2
TL
1556 .add_service("mon")
1557 .set_description("multiple of mon_lease for follower mons to accept proposed state changes before calling a new election")
1558 .add_see_also("mon_lease"),
c07f9fc5 1559
d2e6a577
FG
1560 Option("mon_clock_drift_allowed", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1561 .set_default(.050)
11fdf7f2
TL
1562 .add_service("mon")
1563 .set_description("allowed clock drift (in seconds) between mons before issuing a health warning"),
c07f9fc5 1564
d2e6a577
FG
1565 Option("mon_clock_drift_warn_backoff", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1566 .set_default(5)
11fdf7f2
TL
1567 .add_service("mon")
1568 .set_description("exponential backoff factor for logging clock drift warnings in the cluster log"),
c07f9fc5 1569
d2e6a577
FG
1570 Option("mon_timecheck_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1571 .set_default(300.0)
11fdf7f2
TL
1572 .add_service("mon")
1573 .set_description("frequency of clock synchronization checks between monitors (seconds)"),
c07f9fc5 1574
d2e6a577
FG
1575 Option("mon_timecheck_skew_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1576 .set_default(30.0)
11fdf7f2
TL
1577 .add_service("mon")
1578 .set_description("frequency of clock synchronization (re)checks between monitors while clocks are believed to be skewed (seconds)")
1579 .add_see_also("mon_timecheck_interval"),
c07f9fc5 1580
d2e6a577
FG
1581 Option("mon_pg_stuck_threshold", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1582 .set_default(60)
b32b8144
FG
1583 .set_description("number of seconds after which pgs can be considered stuck inactive, unclean, etc")
1584 .set_long_description("see doc/control.rst under dump_stuck for more info")
1585 .add_service("mgr"),
c07f9fc5 1586
3efd9988 1587 Option("mon_pg_warn_min_per_osd", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577 1588 .set_default(30)
11fdf7f2 1589 .add_service("mgr")
3efd9988 1590 .set_description("minimal number PGs per (in) osd before we warn the admin"),
c07f9fc5 1591
3efd9988 1592 Option("mon_max_pg_per_osd", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
11fdf7f2 1593 .set_min(1)
91327a77 1594 .set_default(250)
11fdf7f2
TL
1595 .add_service("mgr")
1596 .set_description("Max number of PGs per OSD the cluster will allow")
1597 .set_long_description("If the number of PGs per OSD exceeds this, a "
1598 "health warning will be visible in `ceph status`. This is also used "
1599 "in automated PG management, as the threshold at which some pools' "
1600 "pg_num may be shrunk in order to enable increasing the pg_num of "
1601 "others."),
1602
1603 Option("mon_target_pg_per_osd", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1604 .set_min(1)
1605 .set_default(100)
1606 .set_description("Automated PG management creates this many PGs per OSD")
1607 .set_long_description("When creating pools, the automated PG management "
1608 "logic will attempt to reach this target. In some circumstances, it "
1609 "may exceed this target, up to the ``mon_max_pg_per_osd`` limit. "
1610 "Conversely, a lower number of PGs per OSD may be created if the "
1611 "cluster is not yet fully utilised"),
c07f9fc5 1612
d2e6a577
FG
1613 Option("mon_pg_warn_max_object_skew", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1614 .set_default(10.0)
b32b8144
FG
1615 .set_description("max skew few average in objects per pg")
1616 .add_service("mgr"),
c07f9fc5 1617
d2e6a577
FG
1618 Option("mon_pg_warn_min_objects", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1619 .set_default(10000)
b32b8144
FG
1620 .set_description("do not warn below this object #")
1621 .add_service("mgr"),
c07f9fc5 1622
d2e6a577
FG
1623 Option("mon_pg_warn_min_pool_objects", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1624 .set_default(1000)
b32b8144
FG
1625 .set_description("do not warn on pools below this object #")
1626 .add_service("mgr"),
c07f9fc5 1627
d2e6a577
FG
1628 Option("mon_pg_check_down_all_threshold", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1629 .set_default(.5)
b32b8144
FG
1630 .set_description("threshold of down osds after which we check all pgs")
1631 .add_service("mgr"),
c07f9fc5 1632
d2e6a577
FG
1633 Option("mon_cache_target_full_warn_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1634 .set_default(.66)
11fdf7f2
TL
1635 .add_service("mgr")
1636 .set_flag(Option::FLAG_NO_MON_UPDATE)
1637 .set_flag(Option::FLAG_CLUSTER_CREATE)
1638 .set_description("issue CACHE_POOL_NEAR_FULL health warning when cache pool utilization exceeds this ratio of usable space"),
c07f9fc5 1639
d2e6a577
FG
1640 Option("mon_osd_full_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1641 .set_default(.95)
11fdf7f2
TL
1642 .set_flag(Option::FLAG_NO_MON_UPDATE)
1643 .set_flag(Option::FLAG_CLUSTER_CREATE)
1644 .set_description("full ratio of OSDs to be set during initial creation of the cluster"),
c07f9fc5 1645
d2e6a577
FG
1646 Option("mon_osd_backfillfull_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1647 .set_default(.90)
11fdf7f2
TL
1648 .set_flag(Option::FLAG_NO_MON_UPDATE)
1649 .set_flag(Option::FLAG_CLUSTER_CREATE)
d2e6a577 1650 .set_description(""),
c07f9fc5 1651
d2e6a577
FG
1652 Option("mon_osd_nearfull_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1653 .set_default(.85)
11fdf7f2
TL
1654 .set_flag(Option::FLAG_NO_MON_UPDATE)
1655 .set_flag(Option::FLAG_CLUSTER_CREATE)
1656 .set_description("nearfull ratio for OSDs to be set during initial creation of cluster"),
c07f9fc5 1657
d2e6a577
FG
1658 Option("mon_osd_initial_require_min_compat_client", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1659 .set_default("jewel")
11fdf7f2
TL
1660 .set_flag(Option::FLAG_NO_MON_UPDATE)
1661 .set_flag(Option::FLAG_CLUSTER_CREATE)
d2e6a577 1662 .set_description(""),
c07f9fc5 1663
d2e6a577
FG
1664 Option("mon_allow_pool_delete", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1665 .set_default(false)
11fdf7f2
TL
1666 .add_service("mon")
1667 .set_description("allow pool deletions"),
c07f9fc5 1668
d2e6a577
FG
1669 Option("mon_fake_pool_delete", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1670 .set_default(false)
11fdf7f2
TL
1671 .add_service("mon")
1672 .set_description("fake pool deletions by renaming the rados pool"),
c07f9fc5 1673
d2e6a577
FG
1674 Option("mon_globalid_prealloc", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1675 .set_default(10000)
11fdf7f2
TL
1676 .add_service("mon")
1677 .set_description("number of globalid values to preallocate")
1678 .set_long_description("This setting caps how many new clients can authenticate with the cluster before the monitors have to perform a write to preallocate more. Large values burn through the 64-bit ID space more quickly."),
c07f9fc5 1679
d2e6a577
FG
1680 Option("mon_osd_report_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1681 .set_default(900)
11fdf7f2
TL
1682 .add_service("mon")
1683 .set_description("time before OSDs who do not report to the mons are marked down (seconds)"),
c07f9fc5 1684
11fdf7f2 1685 Option("mon_warn_on_msgr2_not_enabled", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
d2e6a577 1686 .set_default(true)
11fdf7f2
TL
1687 .add_service("mon")
1688 .set_description("issue MON_MSGR2_NOT_ENABLED health warning if monitors are all running Nautilus but not all binding to a msgr2 port")
1689 .add_see_also("ms_bind_msgr2"),
c07f9fc5 1690
d2e6a577
FG
1691 Option("mon_warn_on_legacy_crush_tunables", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1692 .set_default(true)
11fdf7f2
TL
1693 .add_service("mgr")
1694 .set_description("issue OLD_CRUSH_TUNABLES health warning if CRUSH tunables are older than mon_crush_min_required_version")
1695 .add_see_also("mon_crush_min_required_version"),
c07f9fc5 1696
d2e6a577 1697 Option("mon_crush_min_required_version", Option::TYPE_STR, Option::LEVEL_ADVANCED)
81eedcae 1698 .set_default("hammer")
11fdf7f2
TL
1699 .add_service("mgr")
1700 .set_description("minimum ceph release to use for mon_warn_on_legacy_crush_tunables")
1701 .add_see_also("mon_warn_on_legacy_crush_tunables"),
c07f9fc5 1702
d2e6a577
FG
1703 Option("mon_warn_on_crush_straw_calc_version_zero", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1704 .set_default(true)
11fdf7f2
TL
1705 .add_service("mgr")
1706 .set_description("issue OLD_CRUSH_STRAW_CALC_VERSION health warning if the CRUSH map's straw_calc_version is zero"),
c07f9fc5 1707
d2e6a577
FG
1708 Option("mon_warn_on_osd_down_out_interval_zero", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1709 .set_default(true)
11fdf7f2
TL
1710 .add_service("mgr")
1711 .set_description("issue OSD_NO_DOWN_OUT_INTERVAL health warning if mon_osd_down_out_interval is zero")
1712 .set_long_description("Having mon_osd_down_out_interval set to 0 means that down OSDs are not marked out automatically and the cluster does not heal itself without administrator intervention.")
1713 .add_see_also("mon_osd_down_out_interval"),
c07f9fc5 1714
d2e6a577
FG
1715 Option("mon_warn_on_cache_pools_without_hit_sets", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1716 .set_default(true)
11fdf7f2
TL
1717 .add_service("mgr")
1718 .set_description("issue CACHE_POOL_NO_HIT_SET health warning for cache pools that do not have hit sets configured"),
c07f9fc5 1719
d2e6a577
FG
1720 Option("mon_warn_on_pool_no_app", Option::TYPE_BOOL, Option::LEVEL_DEV)
1721 .set_default(true)
11fdf7f2
TL
1722 .add_service("mgr")
1723 .set_description("issue POOL_APP_NOT_ENABLED health warning if pool has not application enabled"),
c07f9fc5 1724
11fdf7f2
TL
1725 Option("mon_warn_on_misplaced", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1726 .set_default(false)
1727 .add_service("mgr")
1728 .set_description("Issue a health warning if there are misplaced objects"),
1729
1730 Option("mon_max_snap_prune_per_epoch", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1731 .set_default(100)
1732 .add_service("mon")
1733 .set_description("max number of pruned snaps we will process in a single OSDMap epoch"),
c07f9fc5 1734
11fdf7f2 1735 Option("mon_min_osdmap_epochs", Option::TYPE_INT, Option::LEVEL_ADVANCED)
d2e6a577 1736 .set_default(500)
11fdf7f2
TL
1737 .add_service("mon")
1738 .set_description("min number of OSDMaps to store"),
c07f9fc5 1739
d2e6a577
FG
1740 Option("mon_max_log_epochs", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1741 .set_default(500)
11fdf7f2
TL
1742 .add_service("mon")
1743 .set_description("max number of past cluster log epochs to store"),
c07f9fc5 1744
d2e6a577
FG
1745 Option("mon_max_mdsmap_epochs", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1746 .set_default(500)
11fdf7f2
TL
1747 .add_service("mon")
1748 .set_description("max number of FSMaps/MDSMaps to store"),
c07f9fc5 1749
b32b8144
FG
1750 Option("mon_max_mgrmap_epochs", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1751 .set_default(500)
11fdf7f2
TL
1752 .add_service("mon")
1753 .set_description("max number of MgrMaps to store"),
b32b8144 1754
d2e6a577
FG
1755 Option("mon_max_osd", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1756 .set_default(10000)
11fdf7f2
TL
1757 .add_service("mon")
1758 .set_description("max number of OSDs in a cluster"),
c07f9fc5 1759
d2e6a577
FG
1760 Option("mon_probe_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1761 .set_default(2.0)
11fdf7f2
TL
1762 .add_service("mon")
1763 .set_description("timeout for querying other mons during bootstrap pre-election phase (seconds)"),
c07f9fc5 1764
11fdf7f2 1765 Option("mon_client_bytes", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577 1766 .set_default(100ul << 20)
11fdf7f2
TL
1767 .add_service("mon")
1768 .set_description("max bytes of outstanding client messages mon will read off the network"),
1769
1770 Option("mon_daemon_bytes", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
1771 .set_default(400ul << 20)
1772 .add_service("mon")
1773 .set_description("max bytes of outstanding mon messages mon will read off the network"),
c07f9fc5 1774
3efd9988 1775 Option("mon_mgr_proxy_client_bytes_ratio", Option::TYPE_FLOAT, Option::LEVEL_DEV)
d2e6a577 1776 .set_default(.3)
11fdf7f2 1777 .add_service("mon")
3efd9988
FG
1778 .set_description("ratio of mon_client_bytes that can be consumed by "
1779 "proxied mgr commands before we error out to client"),
c07f9fc5 1780
d2e6a577
FG
1781 Option("mon_log_max_summary", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1782 .set_default(50)
11fdf7f2
TL
1783 .add_service("mon")
1784 .set_description("number of recent cluster log messages to retain"),
c07f9fc5 1785
d2e6a577
FG
1786 Option("mon_max_log_entries_per_event", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1787 .set_default(4096)
11fdf7f2
TL
1788 .add_service("mon")
1789 .set_description("max cluster log entries per paxos event"),
c07f9fc5 1790
d2e6a577
FG
1791 Option("mon_reweight_min_pgs_per_osd", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1792 .set_default(10)
11fdf7f2 1793 .add_service("mgr")
d2e6a577 1794 .set_description(""),
c07f9fc5 1795
11fdf7f2 1796 Option("mon_reweight_min_bytes_per_osd", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 1797 .set_default(100_M)
11fdf7f2 1798 .add_service("mgr")
d2e6a577 1799 .set_description(""),
c07f9fc5 1800
d2e6a577
FG
1801 Option("mon_reweight_max_osds", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1802 .set_default(4)
11fdf7f2 1803 .add_service("mgr")
d2e6a577 1804 .set_description(""),
c07f9fc5 1805
d2e6a577
FG
1806 Option("mon_reweight_max_change", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1807 .set_default(0.05)
11fdf7f2 1808 .add_service("mgr")
d2e6a577 1809 .set_description(""),
c07f9fc5 1810
d2e6a577
FG
1811 Option("mon_health_to_clog", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1812 .set_default(true)
11fdf7f2
TL
1813 .add_service("mon")
1814 .set_description("log monitor health to cluster log"),
c07f9fc5 1815
d2e6a577 1816 Option("mon_health_to_clog_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144 1817 .set_default(1_hr)
11fdf7f2
TL
1818 .add_service("mon")
1819 .set_description("frequency to log monitor health to cluster log")
1820 .add_see_also("mon_health_to_clog"),
c07f9fc5 1821
11fdf7f2 1822 Option("mon_health_to_clog_tick_interval", Option::TYPE_FLOAT, Option::LEVEL_DEV)
d2e6a577 1823 .set_default(60.0)
11fdf7f2 1824 .add_service("mon")
d2e6a577 1825 .set_description(""),
c07f9fc5 1826
b32b8144 1827 Option("mon_health_max_detail", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577 1828 .set_default(50)
11fdf7f2 1829 .add_service("mon")
b32b8144 1830 .set_description("max detailed pgs to report in health detail"),
c07f9fc5 1831
181888fb
FG
1832 Option("mon_health_log_update_period", Option::TYPE_INT, Option::LEVEL_DEV)
1833 .set_default(5)
11fdf7f2
TL
1834 .add_service("mon")
1835 .set_description("minimum time in seconds between log messages about "
181888fb
FG
1836 "each health check")
1837 .set_min(0),
1838
d2e6a577
FG
1839 Option("mon_data_avail_crit", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1840 .set_default(5)
11fdf7f2
TL
1841 .add_service("mon")
1842 .set_description("issue MON_DISK_CRIT health error when mon available space below this percentage"),
c07f9fc5 1843
d2e6a577
FG
1844 Option("mon_data_avail_warn", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1845 .set_default(30)
11fdf7f2
TL
1846 .add_service("mon")
1847 .set_description("issue MON_DISK_LOW health warning when mon available space below this percentage"),
c07f9fc5 1848
11fdf7f2 1849 Option("mon_data_size_warn", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 1850 .set_default(15_G)
11fdf7f2
TL
1851 .add_service("mon")
1852 .set_description("issue MON_DISK_BIG health warning when mon database is above this size"),
c07f9fc5 1853
11fdf7f2
TL
1854 Option("mon_warn_pg_not_scrubbed_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1855 .set_default(0.5)
1856 .set_min(0)
1857 .set_description("Percentage of the scrub max interval past the scrub max interval to warn")
1858 .set_long_description("")
1859 .add_see_also("osd_scrub_max_interval"),
c07f9fc5 1860
11fdf7f2
TL
1861 Option("mon_warn_pg_not_deep_scrubbed_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1862 .set_default(0.75)
1863 .set_min(0)
1864 .set_description("Percentage of the deep scrub interval past the deep scrub interval to warn")
1865 .set_long_description("")
1866 .add_see_also("osd_deep_scrub_interval"),
c07f9fc5 1867
d2e6a577 1868 Option("mon_scrub_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144 1869 .set_default(1_day)
11fdf7f2
TL
1870 .add_service("mon")
1871 .set_description("frequency for scrubbing mon database"),
c07f9fc5 1872
d2e6a577 1873 Option("mon_scrub_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144 1874 .set_default(5_min)
11fdf7f2
TL
1875 .add_service("mon")
1876 .set_description("timeout to restart scrub of mon quorum participant does not respond for the latest chunk"),
c07f9fc5 1877
d2e6a577
FG
1878 Option("mon_scrub_max_keys", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1879 .set_default(100)
11fdf7f2
TL
1880 .add_service("mon")
1881 .set_description("max keys per on scrub chunk/step"),
c07f9fc5 1882
d2e6a577
FG
1883 Option("mon_scrub_inject_crc_mismatch", Option::TYPE_FLOAT, Option::LEVEL_DEV)
1884 .set_default(0.0)
11fdf7f2
TL
1885 .add_service("mon")
1886 .set_description("probability for injecting crc mismatches into mon scrub"),
c07f9fc5 1887
d2e6a577
FG
1888 Option("mon_scrub_inject_missing_keys", Option::TYPE_FLOAT, Option::LEVEL_DEV)
1889 .set_default(0.0)
11fdf7f2
TL
1890 .add_service("mon")
1891 .set_description("probability for injecting missing keys into mon scrub"),
c07f9fc5 1892
11fdf7f2
TL
1893 Option("mon_config_key_max_entry_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
1894 .set_default(64_K)
1895 .add_service("mon")
1896 .set_description("Defines the number of bytes allowed to be held in a "
1897 "single config-key entry"),
c07f9fc5 1898
d2e6a577
FG
1899 Option("mon_sync_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1900 .set_default(60.0)
11fdf7f2
TL
1901 .add_service("mon")
1902 .set_description("timeout before canceling sync if syncing mon does not respond"),
c07f9fc5 1903
11fdf7f2 1904 Option("mon_sync_max_payload_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 1905 .set_default(1_M)
11fdf7f2
TL
1906 .add_service("mon")
1907 .set_description("target max message payload for mon sync"),
c07f9fc5 1908
11fdf7f2 1909 Option("mon_sync_debug", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577 1910 .set_default(false)
11fdf7f2
TL
1911 .add_service("mon")
1912 .set_description("enable extra debugging during mon sync"),
c07f9fc5 1913
d2e6a577
FG
1914 Option("mon_inject_sync_get_chunk_delay", Option::TYPE_FLOAT, Option::LEVEL_DEV)
1915 .set_default(0)
11fdf7f2
TL
1916 .add_service("mon")
1917 .set_description("inject delay during sync (seconds)"),
c07f9fc5 1918
11fdf7f2 1919 Option("mon_osd_min_down_reporters", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577 1920 .set_default(2)
11fdf7f2
TL
1921 .add_service("mon")
1922 .set_description("number of OSDs from different subtrees who need to report a down OSD for it to count")
1923 .add_see_also("mon_osd_reporter_subtree_level"),
c07f9fc5 1924
d2e6a577
FG
1925 Option("mon_osd_reporter_subtree_level", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1926 .set_default("host")
11fdf7f2
TL
1927 .add_service("mon")
1928 .set_flag(Option::FLAG_RUNTIME)
1929 .set_description("in which level of parent bucket the reporters are counted"),
c07f9fc5 1930
b32b8144
FG
1931 Option("mon_osd_snap_trim_queue_warn_on", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1932 .set_default(32768)
11fdf7f2 1933 .add_service("mon")
b32b8144
FG
1934 .set_description("Warn when snap trim queue is that large (or larger).")
1935 .set_long_description("Warn when snap trim queue length for at least one PG crosses this value, as this is indicator of snap trimmer not keeping up, wasting disk space"),
1936
11fdf7f2 1937 Option("mon_osd_force_trim_to", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577 1938 .set_default(0)
11fdf7f2
TL
1939 .add_service("mon")
1940 .set_description("force mons to trim osdmaps through this epoch"),
c07f9fc5 1941
11fdf7f2 1942 Option("mon_mds_force_trim_to", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577 1943 .set_default(0)
11fdf7f2
TL
1944 .add_service("mon")
1945 .set_description("force mons to trim mdsmaps/fsmaps through this epoch"),
c07f9fc5 1946
d2e6a577
FG
1947 Option("mon_mds_skip_sanity", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1948 .set_default(false)
11fdf7f2
TL
1949 .add_service("mon")
1950 .set_description("skip sanity checks on fsmap/mdsmap"),
c07f9fc5 1951
11fdf7f2
TL
1952 Option("mon_debug_extra_checks", Option::TYPE_BOOL, Option::LEVEL_DEV)
1953 .set_default(false)
1954 .add_service("mon")
1955 .set_description("Enable some additional monitor checks")
1956 .set_long_description(
1957 "Enable some additional monitor checks that would be too expensive "
1958 "to run on production systems, or would only be relevant while "
1959 "testing or debugging."),
1960
1961 Option("mon_debug_block_osdmap_trim", Option::TYPE_BOOL, Option::LEVEL_DEV)
1962 .set_default(false)
1963 .add_service("mon")
1964 .set_description("Block OSDMap trimming while the option is enabled.")
1965 .set_long_description(
1966 "Blocking OSDMap trimming may be quite helpful to easily reproduce "
1967 "states in which the monitor keeps (hundreds of) thousands of "
1968 "osdmaps."),
3efd9988 1969
d2e6a577
FG
1970 Option("mon_debug_deprecated_as_obsolete", Option::TYPE_BOOL, Option::LEVEL_DEV)
1971 .set_default(false)
11fdf7f2
TL
1972 .add_service("mon")
1973 .set_description("treat deprecated mon commands as obsolete"),
c07f9fc5 1974
d2e6a577
FG
1975 Option("mon_debug_dump_transactions", Option::TYPE_BOOL, Option::LEVEL_DEV)
1976 .set_default(false)
11fdf7f2
TL
1977 .add_service("mon")
1978 .set_description("dump paxos transactions to log")
1979 .add_see_also("mon_debug_dump_location"),
c07f9fc5 1980
d2e6a577
FG
1981 Option("mon_debug_dump_json", Option::TYPE_BOOL, Option::LEVEL_DEV)
1982 .set_default(false)
11fdf7f2
TL
1983 .add_service("mon")
1984 .set_description("dump paxos transasctions to log as json")
1985 .add_see_also("mon_debug_dump_transactions"),
c07f9fc5 1986
d2e6a577
FG
1987 Option("mon_debug_dump_location", Option::TYPE_STR, Option::LEVEL_DEV)
1988 .set_default("/var/log/ceph/$cluster-$name.tdump")
11fdf7f2
TL
1989 .add_service("mon")
1990 .set_description("file to dump paxos transactions to")
1991 .add_see_also("mon_debug_dump_transactions"),
c07f9fc5 1992
11fdf7f2 1993 Option("mon_debug_no_require_mimic", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577 1994 .set_default(false)
11fdf7f2
TL
1995 .add_service("mon")
1996 .set_flag(Option::FLAG_CLUSTER_CREATE)
1997 .set_description("do not set mimic feature for new mon clusters"),
1998
1999 Option("mon_debug_no_require_nautilus", Option::TYPE_BOOL, Option::LEVEL_DEV)
2000 .set_default(false)
2001 .add_service("mon")
2002 .set_flag(Option::FLAG_CLUSTER_CREATE)
2003 .set_description("do not set nautilus feature for new mon clusters"),
c07f9fc5 2004
d2e6a577
FG
2005 Option("mon_debug_no_require_bluestore_for_ec_overwrites", Option::TYPE_BOOL, Option::LEVEL_DEV)
2006 .set_default(false)
11fdf7f2
TL
2007 .add_service("mon")
2008 .set_description("do not require bluestore OSDs to enable EC overwrites on a rados pool"),
c07f9fc5 2009
d2e6a577
FG
2010 Option("mon_debug_no_initial_persistent_features", Option::TYPE_BOOL, Option::LEVEL_DEV)
2011 .set_default(false)
11fdf7f2
TL
2012 .add_service("mon")
2013 .set_flag(Option::FLAG_CLUSTER_CREATE)
2014 .set_description("do not set any monmap features for new mon clusters"),
c07f9fc5 2015
d2e6a577
FG
2016 Option("mon_inject_transaction_delay_max", Option::TYPE_FLOAT, Option::LEVEL_DEV)
2017 .set_default(10.0)
11fdf7f2
TL
2018 .add_service("mon")
2019 .set_description("max duration of injected delay in paxos"),
c07f9fc5 2020
d2e6a577
FG
2021 Option("mon_inject_transaction_delay_probability", Option::TYPE_FLOAT, Option::LEVEL_DEV)
2022 .set_default(0)
11fdf7f2
TL
2023 .add_service("mon")
2024 .set_description("probability of injecting a delay in paxos"),
2025
2026 Option("mon_inject_pg_merge_bounce_probability", Option::TYPE_FLOAT, Option::LEVEL_DEV)
2027 .set_default(0)
2028 .add_service("mon")
2029 .set_description("probability of failing and reverting a pg_num decrement"),
c07f9fc5 2030
d2e6a577
FG
2031 Option("mon_sync_provider_kill_at", Option::TYPE_INT, Option::LEVEL_DEV)
2032 .set_default(0)
11fdf7f2
TL
2033 .add_service("mon")
2034 .set_description("kill mon sync requester at specific point"),
c07f9fc5 2035
d2e6a577
FG
2036 Option("mon_sync_requester_kill_at", Option::TYPE_INT, Option::LEVEL_DEV)
2037 .set_default(0)
11fdf7f2
TL
2038 .add_service("mon")
2039 .set_description("kill mon sync requestor at specific point"),
c07f9fc5 2040
d2e6a577
FG
2041 Option("mon_force_quorum_join", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2042 .set_default(false)
11fdf7f2
TL
2043 .add_service("mon")
2044 .set_description("force mon to rejoin quorum even though it was just removed"),
c07f9fc5 2045
d2e6a577
FG
2046 Option("mon_keyvaluedb", Option::TYPE_STR, Option::LEVEL_ADVANCED)
2047 .set_default("rocksdb")
11fdf7f2
TL
2048 .set_enum_allowed({"leveldb", "rocksdb"})
2049 .set_flag(Option::FLAG_CREATE)
2050 .add_service("mon")
2051 .set_description("database backend to use for the mon database"),
c07f9fc5 2052
d2e6a577
FG
2053 Option("mon_debug_unsafe_allow_tier_with_nonempty_snaps", Option::TYPE_BOOL, Option::LEVEL_DEV)
2054 .set_default(false)
11fdf7f2 2055 .add_service("mon")
d2e6a577 2056 .set_description(""),
c07f9fc5 2057
d2e6a577 2058 Option("mon_osd_blacklist_default_expire", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
b32b8144 2059 .set_default(1_hr)
11fdf7f2 2060 .add_service("mon")
b32b8144
FG
2061 .set_description("Duration in seconds that blacklist entries for clients "
2062 "remain in the OSD map"),
2063
2064 Option("mon_mds_blacklist_interval", Option::TYPE_FLOAT, Option::LEVEL_DEV)
2065 .set_default(1_day)
2066 .set_min(1_hr)
11fdf7f2 2067 .add_service("mon")
b32b8144
FG
2068 .set_description("Duration in seconds that blacklist entries for MDS "
2069 "daemons remain in the OSD map"),
c07f9fc5 2070
d2e6a577
FG
2071 Option("mon_osd_crush_smoke_test", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2072 .set_default(true)
11fdf7f2
TL
2073 .add_service("mon")
2074 .set_description("perform a smoke test on any new CRUSH map before accepting changes"),
2075
2076 Option("mon_smart_report_timeout", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2077 .set_default(5)
2078 .add_service("mon")
2079 .set_description("Timeout (in seconds) for smarctl to run, default is set to 5"),
2080
2081
2082 // PAXOS
c07f9fc5 2083
d2e6a577
FG
2084 Option("paxos_stash_full_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2085 .set_default(25)
11fdf7f2 2086 .add_service("mon")
d2e6a577 2087 .set_description(""),
c07f9fc5 2088
d2e6a577
FG
2089 Option("paxos_max_join_drift", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2090 .set_default(10)
11fdf7f2 2091 .add_service("mon")
d2e6a577 2092 .set_description(""),
c07f9fc5 2093
d2e6a577
FG
2094 Option("paxos_propose_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2095 .set_default(1.0)
11fdf7f2 2096 .add_service("mon")
d2e6a577 2097 .set_description(""),
c07f9fc5 2098
d2e6a577
FG
2099 Option("paxos_min_wait", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2100 .set_default(0.05)
11fdf7f2 2101 .add_service("mon")
d2e6a577 2102 .set_description(""),
c07f9fc5 2103
d2e6a577
FG
2104 Option("paxos_min", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2105 .set_default(500)
11fdf7f2 2106 .add_service("mon")
d2e6a577 2107 .set_description(""),
c07f9fc5 2108
d2e6a577
FG
2109 Option("paxos_trim_min", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2110 .set_default(250)
11fdf7f2 2111 .add_service("mon")
d2e6a577 2112 .set_description(""),
c07f9fc5 2113
d2e6a577
FG
2114 Option("paxos_trim_max", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2115 .set_default(500)
11fdf7f2 2116 .add_service("mon")
d2e6a577 2117 .set_description(""),
c07f9fc5 2118
d2e6a577
FG
2119 Option("paxos_service_trim_min", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2120 .set_default(250)
11fdf7f2 2121 .add_service("mon")
d2e6a577 2122 .set_description(""),
c07f9fc5 2123
d2e6a577
FG
2124 Option("paxos_service_trim_max", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2125 .set_default(500)
11fdf7f2 2126 .add_service("mon")
d2e6a577 2127 .set_description(""),
c07f9fc5 2128
d2e6a577
FG
2129 Option("paxos_kill_at", Option::TYPE_INT, Option::LEVEL_DEV)
2130 .set_default(0)
11fdf7f2 2131 .add_service("mon")
d2e6a577 2132 .set_description(""),
c07f9fc5 2133
11fdf7f2
TL
2134
2135 // AUTH
2136
d2e6a577
FG
2137 Option("auth_cluster_required", Option::TYPE_STR, Option::LEVEL_ADVANCED)
2138 .set_default("cephx")
11fdf7f2 2139 .set_description("authentication methods required by the cluster"),
c07f9fc5 2140
d2e6a577
FG
2141 Option("auth_service_required", Option::TYPE_STR, Option::LEVEL_ADVANCED)
2142 .set_default("cephx")
11fdf7f2 2143 .set_description("authentication methods required by service daemons"),
c07f9fc5 2144
d2e6a577
FG
2145 Option("auth_client_required", Option::TYPE_STR, Option::LEVEL_ADVANCED)
2146 .set_default("cephx, none")
11fdf7f2
TL
2147 .set_flag(Option::FLAG_MINIMAL_CONF)
2148 .set_description("authentication methods allowed by clients"),
c07f9fc5 2149
d2e6a577
FG
2150 Option("auth_supported", Option::TYPE_STR, Option::LEVEL_ADVANCED)
2151 .set_default("")
11fdf7f2 2152 .set_description("authentication methods required (deprecated)"),
c07f9fc5 2153
d2e6a577
FG
2154 Option("max_rotating_auth_attempts", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2155 .set_default(10)
11fdf7f2
TL
2156 .set_description("number of attempts to initialize rotating keys before giving up"),
2157
2158 Option("rotating_keys_bootstrap_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2159 .set_default(30)
2160 .set_description("timeout for obtaining rotating keys during bootstrap phase (seconds)"),
2161
2162 Option("rotating_keys_renewal_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2163 .set_default(10)
2164 .set_description("timeout for updating rotating keys (seconds)"),
c07f9fc5 2165
d2e6a577
FG
2166 Option("cephx_require_signatures", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2167 .set_default(false)
2168 .set_description(""),
c07f9fc5 2169
28e407b8
AA
2170 Option("cephx_require_version", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2171 .set_default(1)
2172 .set_description("Cephx version required (1 = pre-mimic, 2 = mimic+)"),
2173
d2e6a577
FG
2174 Option("cephx_cluster_require_signatures", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2175 .set_default(false)
2176 .set_description(""),
c07f9fc5 2177
28e407b8
AA
2178 Option("cephx_cluster_require_version", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2179 .set_default(1)
2180 .set_description("Cephx version required by the cluster from clients (1 = pre-mimic, 2 = mimic+)"),
2181
d2e6a577
FG
2182 Option("cephx_service_require_signatures", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2183 .set_default(false)
2184 .set_description(""),
c07f9fc5 2185
28e407b8
AA
2186 Option("cephx_service_require_version", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2187 .set_default(1)
2188 .set_description("Cephx version required from ceph services (1 = pre-mimic, 2 = mimic+)"),
2189
d2e6a577
FG
2190 Option("cephx_sign_messages", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2191 .set_default(true)
2192 .set_description(""),
c07f9fc5 2193
d2e6a577 2194 Option("auth_mon_ticket_ttl", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
b32b8144 2195 .set_default(12_hr)
d2e6a577 2196 .set_description(""),
c07f9fc5 2197
d2e6a577 2198 Option("auth_service_ticket_ttl", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
b32b8144 2199 .set_default(1_hr)
d2e6a577 2200 .set_description(""),
c07f9fc5 2201
d2e6a577
FG
2202 Option("auth_debug", Option::TYPE_BOOL, Option::LEVEL_DEV)
2203 .set_default(false)
2204 .set_description(""),
c07f9fc5 2205
d2e6a577 2206 Option("mon_client_hunt_parallel", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
11fdf7f2 2207 .set_default(3)
d2e6a577 2208 .set_description(""),
c07f9fc5 2209
d2e6a577
FG
2210 Option("mon_client_hunt_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2211 .set_default(3.0)
2212 .set_description(""),
c07f9fc5 2213
d2e6a577
FG
2214 Option("mon_client_ping_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2215 .set_default(10.0)
2216 .set_description(""),
c07f9fc5 2217
d2e6a577
FG
2218 Option("mon_client_ping_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2219 .set_default(30.0)
2220 .set_description(""),
c07f9fc5 2221
d2e6a577 2222 Option("mon_client_hunt_interval_backoff", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
11fdf7f2 2223 .set_default(1.5)
d2e6a577 2224 .set_description(""),
c07f9fc5 2225
d2e6a577
FG
2226 Option("mon_client_hunt_interval_min_multiple", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2227 .set_default(1.0)
2228 .set_description(""),
c07f9fc5 2229
d2e6a577
FG
2230 Option("mon_client_hunt_interval_max_multiple", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2231 .set_default(10.0)
2232 .set_description(""),
c07f9fc5 2233
d2e6a577
FG
2234 Option("mon_client_max_log_entries_per_message", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2235 .set_default(1000)
2236 .set_description(""),
c07f9fc5 2237
11fdf7f2 2238 Option("mon_max_pool_pg_num", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577
FG
2239 .set_default(65536)
2240 .set_description(""),
c07f9fc5 2241
d2e6a577
FG
2242 Option("mon_pool_quota_warn_threshold", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2243 .set_default(0)
b32b8144
FG
2244 .set_description("percent of quota at which to issue warnings")
2245 .add_service("mgr"),
c07f9fc5 2246
d2e6a577
FG
2247 Option("mon_pool_quota_crit_threshold", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2248 .set_default(0)
b32b8144
FG
2249 .set_description("percent of quota at which to issue errors")
2250 .add_service("mgr"),
c07f9fc5 2251
d2e6a577
FG
2252 Option("crush_location", Option::TYPE_STR, Option::LEVEL_ADVANCED)
2253 .set_default("")
2254 .set_description(""),
c07f9fc5 2255
d2e6a577
FG
2256 Option("crush_location_hook", Option::TYPE_STR, Option::LEVEL_ADVANCED)
2257 .set_default("")
2258 .set_description(""),
c07f9fc5 2259
d2e6a577
FG
2260 Option("crush_location_hook_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2261 .set_default(10)
2262 .set_description(""),
c07f9fc5 2263
11fdf7f2 2264 Option("objecter_tick_interval", Option::TYPE_FLOAT, Option::LEVEL_DEV)
d2e6a577
FG
2265 .set_default(5.0)
2266 .set_description(""),
c07f9fc5 2267
d2e6a577
FG
2268 Option("objecter_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2269 .set_default(10.0)
11fdf7f2 2270 .set_description("Seconds before in-flight op is considered 'laggy' and we query mon for the latest OSDMap"),
c07f9fc5 2271
11fdf7f2 2272 Option("objecter_inflight_op_bytes", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 2273 .set_default(100_M)
11fdf7f2 2274 .set_description("Max in-flight data in bytes (both directions)"),
c07f9fc5 2275
d2e6a577
FG
2276 Option("objecter_inflight_ops", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2277 .set_default(1024)
11fdf7f2 2278 .set_description("Max in-flight operations"),
c07f9fc5 2279
11fdf7f2 2280 Option("objecter_completion_locks_per_session", Option::TYPE_UINT, Option::LEVEL_DEV)
d2e6a577
FG
2281 .set_default(32)
2282 .set_description(""),
c07f9fc5 2283
d2e6a577
FG
2284 Option("objecter_inject_no_watch_ping", Option::TYPE_BOOL, Option::LEVEL_DEV)
2285 .set_default(false)
2286 .set_description(""),
c07f9fc5 2287
11fdf7f2 2288 Option("objecter_retry_writes_after_first_reply", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577
FG
2289 .set_default(false)
2290 .set_description(""),
c07f9fc5 2291
d2e6a577
FG
2292 Option("objecter_debug_inject_relock_delay", Option::TYPE_BOOL, Option::LEVEL_DEV)
2293 .set_default(false)
2294 .set_description(""),
c07f9fc5 2295
d2e6a577
FG
2296 Option("filer_max_purge_ops", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2297 .set_default(10)
11fdf7f2 2298 .set_description("Max in-flight operations for purging a striped range (e.g., MDS journal)"),
c07f9fc5 2299
d2e6a577
FG
2300 Option("filer_max_truncate_ops", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2301 .set_default(128)
11fdf7f2 2302 .set_description("Max in-flight operations for truncating/deleting a striped sequence (e.g., MDS journal)"),
c07f9fc5 2303
d2e6a577
FG
2304 Option("journaler_write_head_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2305 .set_default(15)
11fdf7f2 2306 .set_description("Interval in seconds between journal header updates (to help bound replay time)"),
c07f9fc5 2307
11fdf7f2
TL
2308 // * journal object size
2309 Option("journaler_prefetch_periods", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577 2310 .set_default(10)
11fdf7f2
TL
2311 .set_min(2) // we need at least 2 periods to make progress.
2312 .set_description("Number of striping periods to prefetch while reading MDS journal"),
c07f9fc5 2313
11fdf7f2
TL
2314 // * journal object size
2315 Option("journaler_prezero_periods", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2316 .set_default(5)
2317 // we need to zero at least two periods, minimum, to ensure that we
2318 // have a full empty object/period in front of us.
2319 .set_min(2)
2320 .set_description("Number of striping periods to zero head of MDS journal write position"),
2321
2322 // -- OSD --
a8e16298
TL
2323 Option("osd_calc_pg_upmaps_aggressively", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2324 .set_default(true)
11fdf7f2 2325 .set_flag(Option::FLAG_RUNTIME)
a8e16298
TL
2326 .set_description("try to calculate PG upmaps more aggressively, e.g., "
2327 "by doing a fairly exhaustive search of existing PGs "
2328 "that can be unmapped or upmapped"),
2329
2330 Option("osd_calc_pg_upmaps_max_stddev", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2331 .set_default(1.0)
11fdf7f2 2332 .set_flag(Option::FLAG_RUNTIME)
a8e16298
TL
2333 .set_description("standard deviation below which there is no attempt made "
2334 "while trying to calculate PG upmaps"),
2335
2336 Option("osd_calc_pg_upmaps_local_fallback_retries", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2337 .set_default(100)
11fdf7f2 2338 .set_flag(Option::FLAG_RUNTIME)
a8e16298
TL
2339 .set_description("Maximum number of PGs we can attempt to unmap or upmap "
2340 "for a specific overfull or underfull osd per iteration "),
2341
11fdf7f2
TL
2342 Option("osd_numa_prefer_iface", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2343 .set_default(true)
2344 .set_flag(Option::FLAG_STARTUP)
2345 .set_description("prefer IP on network interface on same numa node as storage")
2346 .add_see_also("osd_numa_auto_affinity"),
2347
2348 Option("osd_numa_auto_affinity", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2349 .set_default(true)
2350 .set_flag(Option::FLAG_STARTUP)
2351 .set_description("automatically set affinity to numa node when storage and network match"),
2352
2353 Option("osd_numa_node", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2354 .set_default(-1)
2355 .set_flag(Option::FLAG_STARTUP)
2356 .set_description("set affinity to a numa node (-1 for none)")
2357 .add_see_also("osd_numa_auto_affinity"),
2358
2359 Option("osd_smart_report_timeout", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577 2360 .set_default(5)
11fdf7f2 2361 .set_description("Timeout (in seconds) for smarctl to run, default is set to 5"),
c07f9fc5 2362
11fdf7f2 2363 Option("osd_check_max_object_name_len_on_startup", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577
FG
2364 .set_default(true)
2365 .set_description(""),
c07f9fc5 2366
d2e6a577
FG
2367 Option("osd_max_backfills", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2368 .set_default(1)
11fdf7f2
TL
2369 .set_description("Maximum number of concurrent local and remote backfills or recoveries per OSD ")
2370 .set_long_description("There can be osd_max_backfills local reservations AND the same remote reservations per OSD. So a value of 1 lets this OSD participate as 1 PG primary in recovery and 1 shard of another recovering PG."),
c07f9fc5 2371
d2e6a577
FG
2372 Option("osd_min_recovery_priority", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2373 .set_default(0)
11fdf7f2
TL
2374 .set_description("Minimum priority below which recovery is not performed")
2375 .set_long_description("The purpose here is to prevent the cluster from doing *any* lower priority work (e.g., rebalancing) below this threshold and focus solely on higher priority work (e.g., replicating degraded objects)."),
c07f9fc5 2376
d2e6a577
FG
2377 Option("osd_backfill_retry_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2378 .set_default(30.0)
11fdf7f2 2379 .set_description("how frequently to retry backfill reservations after being denied (e.g., due to a full OSD)"),
c07f9fc5 2380
d2e6a577
FG
2381 Option("osd_recovery_retry_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2382 .set_default(30.0)
11fdf7f2 2383 .set_description("how frequently to retry recovery reservations after being denied (e.g., due to a full OSD)"),
c07f9fc5 2384
d2e6a577
FG
2385 Option("osd_agent_max_ops", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2386 .set_default(4)
11fdf7f2 2387 .set_description("maximum concurrent tiering operations for tiering agent"),
c07f9fc5 2388
d2e6a577
FG
2389 Option("osd_agent_max_low_ops", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2390 .set_default(2)
11fdf7f2 2391 .set_description("maximum concurrent low-priority tiering operations for tiering agent"),
c07f9fc5 2392
d2e6a577
FG
2393 Option("osd_agent_min_evict_effort", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2394 .set_default(.1)
11fdf7f2
TL
2395 .set_min_max(0.0, .99)
2396 .set_description("minimum effort to expend evicting clean objects"),
c07f9fc5 2397
d2e6a577
FG
2398 Option("osd_agent_quantize_effort", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2399 .set_default(.1)
11fdf7f2 2400 .set_description("size of quantize unit for eviction effort"),
c07f9fc5 2401
d2e6a577
FG
2402 Option("osd_agent_delay_time", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2403 .set_default(5.0)
11fdf7f2 2404 .set_description("how long agent should sleep if it has no work to do"),
c07f9fc5 2405
11fdf7f2 2406 Option("osd_find_best_info_ignore_history_les", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577 2407 .set_default(false)
11fdf7f2
TL
2408 .set_description("ignore last_epoch_started value when peering AND PROBABLY LOSE DATA")
2409 .set_long_description("THIS IS AN EXTREMELY DANGEROUS OPTION THAT SHOULD ONLY BE USED AT THE DIRECTION OF A DEVELOPER. It makes peering ignore the last_epoch_started value when peering, which can allow the OSD to believe an OSD has an authoritative view of a PG's contents even when it is in fact old and stale, typically leading to data loss (by believing a stale PG is up to date)."),
c07f9fc5 2410
d2e6a577
FG
2411 Option("osd_agent_hist_halflife", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2412 .set_default(1000)
11fdf7f2 2413 .set_description("halflife of agent atime and temp histograms"),
c07f9fc5 2414
d2e6a577
FG
2415 Option("osd_agent_slop", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2416 .set_default(.02)
11fdf7f2 2417 .set_description("slop factor to avoid switching tiering flush and eviction mode"),
c07f9fc5 2418
d2e6a577
FG
2419 Option("osd_uuid", Option::TYPE_UUID, Option::LEVEL_ADVANCED)
2420 .set_default(uuid_d())
11fdf7f2
TL
2421 .set_flag(Option::FLAG_CREATE)
2422 .set_description("uuid label for a new OSD"),
c07f9fc5 2423
d2e6a577
FG
2424 Option("osd_data", Option::TYPE_STR, Option::LEVEL_ADVANCED)
2425 .set_default("/var/lib/ceph/osd/$cluster-$id")
11fdf7f2
TL
2426 .set_flag(Option::FLAG_NO_MON_UPDATE)
2427 .set_description("path to OSD data"),
c07f9fc5 2428
d2e6a577
FG
2429 Option("osd_journal", Option::TYPE_STR, Option::LEVEL_ADVANCED)
2430 .set_default("/var/lib/ceph/osd/$cluster-$id/journal")
11fdf7f2
TL
2431 .set_flag(Option::FLAG_NO_MON_UPDATE)
2432 .set_description("path to OSD journal (when FileStore backend is in use)"),
c07f9fc5 2433
11fdf7f2 2434 Option("osd_journal_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577 2435 .set_default(5120)
11fdf7f2
TL
2436 .set_flag(Option::FLAG_CREATE)
2437 .set_description("size of FileStore journal (in MiB)"),
c07f9fc5 2438
d2e6a577
FG
2439 Option("osd_journal_flush_on_shutdown", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2440 .set_default(true)
11fdf7f2 2441 .set_description("flush FileStore journal contents during clean OSD shutdown"),
c07f9fc5 2442
11fdf7f2 2443 Option("osd_os_flags", Option::TYPE_UINT, Option::LEVEL_DEV)
d2e6a577 2444 .set_default(0)
11fdf7f2 2445 .set_description("flags to skip filestore omap or journal initialization"),
c07f9fc5 2446
11fdf7f2
TL
2447 Option("osd_max_write_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
2448 .set_min(4)
d2e6a577 2449 .set_default(90)
11fdf7f2
TL
2450 .set_description("Maximum size of a RADOS write operation in megabytes")
2451 .set_long_description("This setting prevents clients from doing "
2452 "very large writes to RADOS. If you set this to a value "
2453 "below what clients expect, they will receive an error "
2454 "when attempting to write to the cluster."),
c07f9fc5 2455
d2e6a577
FG
2456 Option("osd_max_pgls", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2457 .set_default(1024)
11fdf7f2 2458 .set_description("maximum number of results when listing objects in a pool"),
c07f9fc5 2459
11fdf7f2 2460 Option("osd_client_message_size_cap", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 2461 .set_default(500_M)
11fdf7f2
TL
2462 .set_description("maximum memory to devote to in-flight client requests")
2463 .set_long_description("If this value is exceeded, the OSD will not read any new client data off of the network until memory is freed."),
c07f9fc5 2464
d2e6a577
FG
2465 Option("osd_client_message_cap", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2466 .set_default(100)
11fdf7f2 2467 .set_description("maximum number of in-flight client requests"),
c07f9fc5 2468
d2e6a577
FG
2469 Option("osd_crush_update_weight_set", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2470 .set_default(true)
11fdf7f2
TL
2471 .set_description("update CRUSH weight-set weights when updating weights")
2472 .set_long_description("If this setting is true, we will update the weight-set weights when adjusting an item's weight, effectively making changes take effect immediately, and discarding any previous optimization in the weight-set value. Setting this value to false will leave it to the balancer to (slowly, presumably) adjust weights to approach the new target value."),
c07f9fc5 2473
11fdf7f2 2474 Option("osd_crush_chooseleaf_type", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577 2475 .set_default(1)
11fdf7f2
TL
2476 .set_flag(Option::FLAG_CREATE)
2477 .set_description("default chooseleaf type for osdmaptool --create"),
c07f9fc5 2478
11fdf7f2 2479 Option("osd_pool_use_gmt_hitset", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577 2480 .set_default(true)
11fdf7f2
TL
2481 .set_description("use UTC for hitset timestamps")
2482 .set_long_description("This setting only exists for compatibility with hammer (and older) clusters."),
c07f9fc5 2483
d2e6a577
FG
2484 Option("osd_crush_update_on_start", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2485 .set_default(true)
11fdf7f2 2486 .set_description("update OSD CRUSH location on startup"),
c07f9fc5 2487
d2e6a577
FG
2488 Option("osd_class_update_on_start", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2489 .set_default(true)
11fdf7f2 2490 .set_description("set OSD device class on startup"),
c07f9fc5 2491
d2e6a577
FG
2492 Option("osd_crush_initial_weight", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2493 .set_default(-1)
11fdf7f2
TL
2494 .set_description("if >= 0, initial CRUSH weight for newly created OSDs")
2495 .set_long_description("If this value is negative, the size of the OSD in TiB is used."),
2496
2497 Option("osd_pool_default_ec_fast_read", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2498 .set_default(false)
2499 .set_description("set ec_fast_read for new erasure-coded pools")
2500 .add_service("mon"),
c07f9fc5 2501
d2e6a577
FG
2502 Option("osd_pool_default_crush_rule", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2503 .set_default(-1)
11fdf7f2
TL
2504 .set_description("CRUSH rule for newly created pools")
2505 .add_service("mon"),
c07f9fc5 2506
11fdf7f2 2507 Option("osd_pool_erasure_code_stripe_unit", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 2508 .set_default(4_K)
11fdf7f2
TL
2509 .set_description("the amount of data (in bytes) in a data chunk, per stripe")
2510 .add_service("mon"),
c07f9fc5 2511
11fdf7f2 2512 Option("osd_pool_default_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577 2513 .set_default(3)
11fdf7f2
TL
2514 .set_min_max(0, 10)
2515 .set_flag(Option::FLAG_RUNTIME)
2516 .set_description("the number of copies of an object for new replicated pools")
2517 .add_service("mon"),
c07f9fc5 2518
11fdf7f2 2519 Option("osd_pool_default_min_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577 2520 .set_default(0)
11fdf7f2
TL
2521 .set_min_max(0, 255)
2522 .set_flag(Option::FLAG_RUNTIME)
2523 .set_description("the minimal number of copies allowed to write to a degraded pool for new replicated pools")
2524 .set_long_description("0 means no specific default; ceph will use size-size/2")
2525 .add_see_also("osd_pool_default_size")
2526 .add_service("mon"),
c07f9fc5 2527
11fdf7f2 2528 Option("osd_pool_default_pg_num", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577 2529 .set_default(8)
11fdf7f2
TL
2530 .set_description("number of PGs for new pools")
2531 .set_flag(Option::FLAG_RUNTIME)
2532 .add_service("mon"),
c07f9fc5 2533
11fdf7f2
TL
2534 Option("osd_pool_default_pgp_num", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2535 .set_default(0)
2536 .set_description("number of PGs for placement purposes (0 to match pg_num)")
2537 .add_see_also("osd_pool_default_pg_num")
2538 .set_flag(Option::FLAG_RUNTIME)
2539 .add_service("mon"),
c07f9fc5 2540
d2e6a577
FG
2541 Option("osd_pool_default_type", Option::TYPE_STR, Option::LEVEL_ADVANCED)
2542 .set_default("replicated")
11fdf7f2
TL
2543 .set_enum_allowed({"replicated", "erasure"})
2544 .set_flag(Option::FLAG_RUNTIME)
2545 .set_description("default type of pool to create")
2546 .add_service("mon"),
c07f9fc5 2547
d2e6a577
FG
2548 Option("osd_pool_default_erasure_code_profile", Option::TYPE_STR, Option::LEVEL_ADVANCED)
2549 .set_default("plugin=jerasure technique=reed_sol_van k=2 m=1")
11fdf7f2
TL
2550 .set_flag(Option::FLAG_RUNTIME)
2551 .set_description("default erasure code profile for new erasure-coded pools")
2552 .add_service("mon"),
c07f9fc5 2553
d2e6a577
FG
2554 Option("osd_erasure_code_plugins", Option::TYPE_STR, Option::LEVEL_ADVANCED)
2555 .set_default("jerasure lrc"
2556 #ifdef HAVE_BETTER_YASM_ELF64
2557 " isa"
2558 #endif
2559 )
11fdf7f2
TL
2560 .set_flag(Option::FLAG_STARTUP)
2561 .set_description("erasure code plugins to load")
2562 .add_service("mon")
2563 .add_service("osd"),
c07f9fc5 2564
11fdf7f2 2565 Option("osd_allow_recovery_below_min_size", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577 2566 .set_default(true)
11fdf7f2
TL
2567 .set_description("allow replicated pools to recover with < min_size active members")
2568 .add_service("osd"),
c07f9fc5 2569
11fdf7f2 2570 Option("osd_pool_default_flags", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577 2571 .set_default(0)
11fdf7f2
TL
2572 .set_description("(integer) flags to set on new pools")
2573 .add_service("mon"),
c07f9fc5 2574
d2e6a577
FG
2575 Option("osd_pool_default_flag_hashpspool", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2576 .set_default(true)
11fdf7f2
TL
2577 .set_description("set hashpspool (better hashing scheme) flag on new pools")
2578 .add_service("mon"),
c07f9fc5 2579
d2e6a577
FG
2580 Option("osd_pool_default_flag_nodelete", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2581 .set_default(false)
11fdf7f2
TL
2582 .set_description("set nodelete flag on new pools")
2583 .add_service("mon"),
c07f9fc5 2584
d2e6a577
FG
2585 Option("osd_pool_default_flag_nopgchange", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2586 .set_default(false)
11fdf7f2
TL
2587 .set_description("set nopgchange flag on new pools")
2588 .add_service("mon"),
c07f9fc5 2589
d2e6a577
FG
2590 Option("osd_pool_default_flag_nosizechange", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2591 .set_default(false)
11fdf7f2
TL
2592 .set_description("set nosizechange flag on new pools")
2593 .add_service("mon"),
c07f9fc5 2594
d2e6a577
FG
2595 Option("osd_pool_default_hit_set_bloom_fpp", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2596 .set_default(.05)
11fdf7f2
TL
2597 .set_description("")
2598 .add_see_also("osd_tier_default_cache_hit_set_type")
2599 .add_service("mon"),
c07f9fc5 2600
d2e6a577
FG
2601 Option("osd_pool_default_cache_target_dirty_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2602 .set_default(.4)
2603 .set_description(""),
c07f9fc5 2604
d2e6a577
FG
2605 Option("osd_pool_default_cache_target_dirty_high_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2606 .set_default(.6)
2607 .set_description(""),
c07f9fc5 2608
d2e6a577
FG
2609 Option("osd_pool_default_cache_target_full_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2610 .set_default(.8)
2611 .set_description(""),
c07f9fc5 2612
d2e6a577
FG
2613 Option("osd_pool_default_cache_min_flush_age", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2614 .set_default(0)
2615 .set_description(""),
c07f9fc5 2616
d2e6a577
FG
2617 Option("osd_pool_default_cache_min_evict_age", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2618 .set_default(0)
2619 .set_description(""),
c07f9fc5 2620
d2e6a577
FG
2621 Option("osd_pool_default_cache_max_evict_check_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2622 .set_default(10)
2623 .set_description(""),
c07f9fc5 2624
11fdf7f2
TL
2625 Option("osd_pool_default_pg_autoscale_mode", Option::TYPE_STR, Option::LEVEL_ADVANCED)
2626 .set_default("warn")
81eedcae 2627 .set_flag(Option::FLAG_RUNTIME)
11fdf7f2
TL
2628 .set_enum_allowed({"off", "warn", "on"})
2629 .set_description("Default PG autoscaling behavior for new pools"),
2630
d2e6a577
FG
2631 Option("osd_hit_set_min_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2632 .set_default(1000)
2633 .set_description(""),
c07f9fc5 2634
d2e6a577
FG
2635 Option("osd_hit_set_max_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2636 .set_default(100000)
2637 .set_description(""),
c07f9fc5 2638
d2e6a577
FG
2639 Option("osd_hit_set_namespace", Option::TYPE_STR, Option::LEVEL_ADVANCED)
2640 .set_default(".ceph-internal")
2641 .set_description(""),
c07f9fc5 2642
d2e6a577
FG
2643 Option("osd_tier_promote_max_objects_sec", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2644 .set_default(25)
2645 .set_description(""),
c07f9fc5 2646
11fdf7f2 2647 Option("osd_tier_promote_max_bytes_sec", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 2648 .set_default(5_M)
d2e6a577 2649 .set_description(""),
c07f9fc5 2650
d2e6a577
FG
2651 Option("osd_tier_default_cache_mode", Option::TYPE_STR, Option::LEVEL_ADVANCED)
2652 .set_default("writeback")
11fdf7f2
TL
2653 .set_enum_allowed({"none", "writeback", "forward",
2654 "readonly", "readforward", "readproxy", "proxy"})
2655 .set_flag(Option::FLAG_RUNTIME)
d2e6a577 2656 .set_description(""),
c07f9fc5 2657
11fdf7f2 2658 Option("osd_tier_default_cache_hit_set_count", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577
FG
2659 .set_default(4)
2660 .set_description(""),
c07f9fc5 2661
11fdf7f2 2662 Option("osd_tier_default_cache_hit_set_period", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577
FG
2663 .set_default(1200)
2664 .set_description(""),
c07f9fc5 2665
d2e6a577
FG
2666 Option("osd_tier_default_cache_hit_set_type", Option::TYPE_STR, Option::LEVEL_ADVANCED)
2667 .set_default("bloom")
11fdf7f2
TL
2668 .set_enum_allowed({"bloom", "explicit_hash", "explicit_object"})
2669 .set_flag(Option::FLAG_RUNTIME)
d2e6a577 2670 .set_description(""),
c07f9fc5 2671
11fdf7f2 2672 Option("osd_tier_default_cache_min_read_recency_for_promote", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577 2673 .set_default(1)
11fdf7f2 2674 .set_description("number of recent HitSets the object must appear in to be promoted (on read)"),
c07f9fc5 2675
11fdf7f2 2676 Option("osd_tier_default_cache_min_write_recency_for_promote", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577 2677 .set_default(1)
11fdf7f2 2678 .set_description("number of recent HitSets the object must appear in to be promoted (on write)"),
c07f9fc5 2679
11fdf7f2 2680 Option("osd_tier_default_cache_hit_set_grade_decay_rate", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577
FG
2681 .set_default(20)
2682 .set_description(""),
c07f9fc5 2683
11fdf7f2 2684 Option("osd_tier_default_cache_hit_set_search_last_n", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577
FG
2685 .set_default(1)
2686 .set_description(""),
c07f9fc5 2687
11fdf7f2
TL
2688 Option("osd_objecter_finishers", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2689 .set_default(1)
2690 .set_flag(Option::FLAG_STARTUP)
d2e6a577
FG
2691 .set_description(""),
2692
11fdf7f2
TL
2693 Option("osd_map_dedup", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2694 .set_default(true)
d2e6a577
FG
2695 .set_description(""),
2696
2697 Option("osd_map_cache_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2698 .set_default(50)
2699 .set_description(""),
2700
2701 Option("osd_map_message_max", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2702 .set_default(40)
11fdf7f2
TL
2703 .set_description("maximum number of OSDMaps to include in a single message"),
2704
2705 Option("osd_map_message_max_bytes", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
2706 .set_default(10_M)
2707 .set_description("maximum number of bytes worth of OSDMaps to include in a single message"),
d2e6a577
FG
2708
2709 Option("osd_map_share_max_epochs", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2710 .set_default(40)
2711 .set_description(""),
2712
11fdf7f2
TL
2713 Option("osd_pg_epoch_max_lag_factor", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2714 .set_default(2.0)
2715 .set_description("Max multiple of the map cache that PGs can lag before we throttle map injest")
2716 .add_see_also("osd_map_cache_size"),
2717
d2e6a577
FG
2718 Option("osd_inject_bad_map_crc_probability", Option::TYPE_FLOAT, Option::LEVEL_DEV)
2719 .set_default(0)
2720 .set_description(""),
2721
2722 Option("osd_inject_failure_on_pg_removal", Option::TYPE_BOOL, Option::LEVEL_DEV)
2723 .set_default(false)
2724 .set_description(""),
2725
2726 Option("osd_max_markdown_period", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2727 .set_default(600)
2728 .set_description(""),
2729
2730 Option("osd_max_markdown_count", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2731 .set_default(5)
2732 .set_description(""),
2733
d2e6a577
FG
2734 Option("osd_op_pq_max_tokens_per_priority", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2735 .set_default(4194304)
2736 .set_description(""),
2737
11fdf7f2 2738 Option("osd_op_pq_min_cost", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577
FG
2739 .set_default(65536)
2740 .set_description(""),
2741
d2e6a577
FG
2742 Option("osd_recover_clone_overlap", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2743 .set_default(true)
2744 .set_description(""),
2745
2746 Option("osd_op_num_threads_per_shard", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2747 .set_default(0)
11fdf7f2 2748 .set_flag(Option::FLAG_STARTUP)
d2e6a577
FG
2749 .set_description(""),
2750
2751 Option("osd_op_num_threads_per_shard_hdd", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2752 .set_default(1)
11fdf7f2
TL
2753 .set_flag(Option::FLAG_STARTUP)
2754 .set_description("")
2755 .add_see_also("osd_op_num_threads_per_shard"),
d2e6a577
FG
2756
2757 Option("osd_op_num_threads_per_shard_ssd", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2758 .set_default(2)
11fdf7f2
TL
2759 .set_flag(Option::FLAG_STARTUP)
2760 .set_description("")
2761 .add_see_also("osd_op_num_threads_per_shard"),
d2e6a577
FG
2762
2763 Option("osd_op_num_shards", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2764 .set_default(0)
11fdf7f2 2765 .set_flag(Option::FLAG_STARTUP)
d2e6a577
FG
2766 .set_description(""),
2767
2768 Option("osd_op_num_shards_hdd", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2769 .set_default(5)
11fdf7f2
TL
2770 .set_flag(Option::FLAG_STARTUP)
2771 .set_description("")
2772 .add_see_also("osd_op_num_shards"),
d2e6a577
FG
2773
2774 Option("osd_op_num_shards_ssd", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2775 .set_default(8)
11fdf7f2
TL
2776 .set_flag(Option::FLAG_STARTUP)
2777 .set_description("")
2778 .add_see_also("osd_op_num_shards"),
d2e6a577 2779
28e407b8
AA
2780 Option("osd_skip_data_digest", Option::TYPE_BOOL, Option::LEVEL_DEV)
2781 .set_default(false)
11fdf7f2 2782 .set_description("Do not store full-object checksums if the backend (bluestore) does its own checksums. Only usable with all BlueStore OSDs."),
28e407b8 2783
d2e6a577
FG
2784 Option("osd_op_queue", Option::TYPE_STR, Option::LEVEL_ADVANCED)
2785 .set_default("wpq")
2786 .set_enum_allowed( { "wpq", "prioritized", "mclock_opclass", "mclock_client", "debug_random" } )
2787 .set_description("which operation queue algorithm to use")
2788 .set_long_description("which operation queue algorithm to use; mclock_opclass and mclock_client are currently experimental")
11fdf7f2 2789 .set_flag(Option::FLAG_STARTUP)
d2e6a577
FG
2790 .add_see_also("osd_op_queue_cut_off"),
2791
2792 Option("osd_op_queue_cut_off", Option::TYPE_STR, Option::LEVEL_ADVANCED)
2793 .set_default("low")
2794 .set_enum_allowed( { "low", "high", "debug_random" } )
2795 .set_description("the threshold between high priority ops and low priority ops")
2796 .set_long_description("the threshold between high priority ops that use strict priority ordering and low priority ops that use a fairness algorithm that may or may not incorporate priority")
2797 .add_see_also("osd_op_queue"),
2798
2799 Option("osd_op_queue_mclock_client_op_res", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2800 .set_default(1000.0)
2801 .set_description("mclock reservation of client operator requests")
2802 .set_long_description("mclock reservation of client operator requests when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the reservation")
2803 .add_see_also("osd_op_queue")
2804 .add_see_also("osd_op_queue_mclock_client_op_wgt")
2805 .add_see_also("osd_op_queue_mclock_client_op_lim")
11fdf7f2
TL
2806 .add_see_also("osd_op_queue_mclock_osd_rep_op_res")
2807 .add_see_also("osd_op_queue_mclock_osd_rep_op_wgt")
2808 .add_see_also("osd_op_queue_mclock_osd_rep_op_lim")
d2e6a577
FG
2809 .add_see_also("osd_op_queue_mclock_snap_res")
2810 .add_see_also("osd_op_queue_mclock_snap_wgt")
2811 .add_see_also("osd_op_queue_mclock_snap_lim")
2812 .add_see_also("osd_op_queue_mclock_recov_res")
2813 .add_see_also("osd_op_queue_mclock_recov_wgt")
2814 .add_see_also("osd_op_queue_mclock_recov_lim")
2815 .add_see_also("osd_op_queue_mclock_scrub_res")
2816 .add_see_also("osd_op_queue_mclock_scrub_wgt")
11fdf7f2
TL
2817 .add_see_also("osd_op_queue_mclock_scrub_lim")
2818 .add_see_also("osd_op_queue_mclock_anticipation_timeout"),
d2e6a577
FG
2819
2820 Option("osd_op_queue_mclock_client_op_wgt", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2821 .set_default(500.0)
2822 .set_description("mclock weight of client operator requests")
2823 .set_long_description("mclock weight of client operator requests when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the weight")
2824 .add_see_also("osd_op_queue")
2825 .add_see_also("osd_op_queue_mclock_client_op_res")
2826 .add_see_also("osd_op_queue_mclock_client_op_lim")
11fdf7f2
TL
2827 .add_see_also("osd_op_queue_mclock_osd_rep_op_res")
2828 .add_see_also("osd_op_queue_mclock_osd_rep_op_wgt")
2829 .add_see_also("osd_op_queue_mclock_osd_rep_op_lim")
d2e6a577
FG
2830 .add_see_also("osd_op_queue_mclock_snap_res")
2831 .add_see_also("osd_op_queue_mclock_snap_wgt")
2832 .add_see_also("osd_op_queue_mclock_snap_lim")
2833 .add_see_also("osd_op_queue_mclock_recov_res")
2834 .add_see_also("osd_op_queue_mclock_recov_wgt")
2835 .add_see_also("osd_op_queue_mclock_recov_lim")
2836 .add_see_also("osd_op_queue_mclock_scrub_res")
2837 .add_see_also("osd_op_queue_mclock_scrub_wgt")
11fdf7f2
TL
2838 .add_see_also("osd_op_queue_mclock_scrub_lim")
2839 .add_see_also("osd_op_queue_mclock_anticipation_timeout"),
d2e6a577
FG
2840
2841 Option("osd_op_queue_mclock_client_op_lim", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2842 .set_default(0.0)
2843 .set_description("mclock limit of client operator requests")
2844 .set_long_description("mclock limit of client operator requests when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the limit")
2845 .add_see_also("osd_op_queue")
2846 .add_see_also("osd_op_queue_mclock_client_op_res")
2847 .add_see_also("osd_op_queue_mclock_client_op_wgt")
11fdf7f2
TL
2848 .add_see_also("osd_op_queue_mclock_osd_rep_op_res")
2849 .add_see_also("osd_op_queue_mclock_osd_rep_op_wgt")
2850 .add_see_also("osd_op_queue_mclock_osd_rep_op_lim")
d2e6a577
FG
2851 .add_see_also("osd_op_queue_mclock_snap_res")
2852 .add_see_also("osd_op_queue_mclock_snap_wgt")
2853 .add_see_also("osd_op_queue_mclock_snap_lim")
2854 .add_see_also("osd_op_queue_mclock_recov_res")
2855 .add_see_also("osd_op_queue_mclock_recov_wgt")
2856 .add_see_also("osd_op_queue_mclock_recov_lim")
2857 .add_see_also("osd_op_queue_mclock_scrub_res")
2858 .add_see_also("osd_op_queue_mclock_scrub_wgt")
11fdf7f2
TL
2859 .add_see_also("osd_op_queue_mclock_scrub_lim")
2860 .add_see_also("osd_op_queue_mclock_anticipation_timeout"),
d2e6a577 2861
11fdf7f2 2862 Option("osd_op_queue_mclock_osd_rep_op_res", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
d2e6a577 2863 .set_default(1000.0)
11fdf7f2
TL
2864 .set_description("mclock reservation of osd replication operation requests and replies")
2865 .set_long_description("mclock reservation of replication operation requests and replies when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the reservation")
d2e6a577
FG
2866 .add_see_also("osd_op_queue")
2867 .add_see_also("osd_op_queue_mclock_client_op_res")
2868 .add_see_also("osd_op_queue_mclock_client_op_wgt")
2869 .add_see_also("osd_op_queue_mclock_client_op_lim")
11fdf7f2
TL
2870 .add_see_also("osd_op_queue_mclock_osd_rep_op_wgt")
2871 .add_see_also("osd_op_queue_mclock_osd_rep_op_lim")
d2e6a577
FG
2872 .add_see_also("osd_op_queue_mclock_snap_res")
2873 .add_see_also("osd_op_queue_mclock_snap_wgt")
2874 .add_see_also("osd_op_queue_mclock_snap_lim")
2875 .add_see_also("osd_op_queue_mclock_recov_res")
2876 .add_see_also("osd_op_queue_mclock_recov_wgt")
2877 .add_see_also("osd_op_queue_mclock_recov_lim")
2878 .add_see_also("osd_op_queue_mclock_scrub_res")
2879 .add_see_also("osd_op_queue_mclock_scrub_wgt")
11fdf7f2
TL
2880 .add_see_also("osd_op_queue_mclock_scrub_lim")
2881 .add_see_also("osd_op_queue_mclock_anticipation_timeout"),
d2e6a577 2882
11fdf7f2 2883 Option("osd_op_queue_mclock_osd_rep_op_wgt", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
d2e6a577 2884 .set_default(500.0)
11fdf7f2
TL
2885 .set_description("mclock weight of osd replication operation requests and replies")
2886 .set_long_description("mclock weight of osd replication operation requests and replies when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the weight")
d2e6a577
FG
2887 .add_see_also("osd_op_queue")
2888 .add_see_also("osd_op_queue_mclock_client_op_res")
2889 .add_see_also("osd_op_queue_mclock_client_op_wgt")
2890 .add_see_also("osd_op_queue_mclock_client_op_lim")
11fdf7f2
TL
2891 .add_see_also("osd_op_queue_mclock_osd_rep_op_res")
2892 .add_see_also("osd_op_queue_mclock_osd_rep_op_lim")
d2e6a577
FG
2893 .add_see_also("osd_op_queue_mclock_snap_res")
2894 .add_see_also("osd_op_queue_mclock_snap_wgt")
2895 .add_see_also("osd_op_queue_mclock_snap_lim")
2896 .add_see_also("osd_op_queue_mclock_recov_res")
2897 .add_see_also("osd_op_queue_mclock_recov_wgt")
2898 .add_see_also("osd_op_queue_mclock_recov_lim")
2899 .add_see_also("osd_op_queue_mclock_scrub_res")
2900 .add_see_also("osd_op_queue_mclock_scrub_wgt")
11fdf7f2
TL
2901 .add_see_also("osd_op_queue_mclock_scrub_lim")
2902 .add_see_also("osd_op_queue_mclock_anticipation_timeout"),
d2e6a577 2903
11fdf7f2 2904 Option("osd_op_queue_mclock_osd_rep_op_lim", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
d2e6a577 2905 .set_default(0.0)
11fdf7f2 2906 .set_description("mclock limit of osd replication operation requests and replies")
d2e6a577
FG
2907 .set_long_description("mclock limit of osd sub-operation requests when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the limit")
2908 .add_see_also("osd_op_queue")
2909 .add_see_also("osd_op_queue_mclock_client_op_res")
2910 .add_see_also("osd_op_queue_mclock_client_op_wgt")
2911 .add_see_also("osd_op_queue_mclock_client_op_lim")
11fdf7f2
TL
2912 .add_see_also("osd_op_queue_mclock_osd_rep_op_res")
2913 .add_see_also("osd_op_queue_mclock_osd_rep_op_wgt")
d2e6a577
FG
2914 .add_see_also("osd_op_queue_mclock_snap_res")
2915 .add_see_also("osd_op_queue_mclock_snap_wgt")
2916 .add_see_also("osd_op_queue_mclock_snap_lim")
2917 .add_see_also("osd_op_queue_mclock_recov_res")
2918 .add_see_also("osd_op_queue_mclock_recov_wgt")
2919 .add_see_also("osd_op_queue_mclock_recov_lim")
2920 .add_see_also("osd_op_queue_mclock_scrub_res")
2921 .add_see_also("osd_op_queue_mclock_scrub_wgt")
11fdf7f2
TL
2922 .add_see_also("osd_op_queue_mclock_scrub_lim")
2923 .add_see_also("osd_op_queue_mclock_anticipation_timeout"),
d2e6a577
FG
2924
2925 Option("osd_op_queue_mclock_snap_res", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2926 .set_default(0.0)
2927 .set_description("mclock reservation of snaptrim requests")
2928 .set_long_description("mclock reservation of snaptrim requests when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the reservation")
2929 .add_see_also("osd_op_queue")
2930 .add_see_also("osd_op_queue_mclock_client_op_res")
2931 .add_see_also("osd_op_queue_mclock_client_op_wgt")
2932 .add_see_also("osd_op_queue_mclock_client_op_lim")
11fdf7f2
TL
2933 .add_see_also("osd_op_queue_mclock_osd_rep_op_res")
2934 .add_see_also("osd_op_queue_mclock_osd_rep_op_wgt")
2935 .add_see_also("osd_op_queue_mclock_osd_rep_op_lim")
d2e6a577
FG
2936 .add_see_also("osd_op_queue_mclock_snap_wgt")
2937 .add_see_also("osd_op_queue_mclock_snap_lim")
2938 .add_see_also("osd_op_queue_mclock_recov_res")
2939 .add_see_also("osd_op_queue_mclock_recov_wgt")
2940 .add_see_also("osd_op_queue_mclock_recov_lim")
2941 .add_see_also("osd_op_queue_mclock_scrub_res")
2942 .add_see_also("osd_op_queue_mclock_scrub_wgt")
11fdf7f2
TL
2943 .add_see_also("osd_op_queue_mclock_scrub_lim")
2944 .add_see_also("osd_op_queue_mclock_anticipation_timeout"),
d2e6a577
FG
2945
2946 Option("osd_op_queue_mclock_snap_wgt", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2947 .set_default(1.0)
2948 .set_description("mclock weight of snaptrim requests")
2949 .set_long_description("mclock weight of snaptrim requests when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the weight")
2950 .add_see_also("osd_op_queue")
2951 .add_see_also("osd_op_queue_mclock_client_op_res")
2952 .add_see_also("osd_op_queue_mclock_client_op_wgt")
2953 .add_see_also("osd_op_queue_mclock_client_op_lim")
11fdf7f2
TL
2954 .add_see_also("osd_op_queue_mclock_osd_rep_op_res")
2955 .add_see_also("osd_op_queue_mclock_osd_rep_op_wgt")
2956 .add_see_also("osd_op_queue_mclock_osd_rep_op_lim")
2957 .add_see_also("osd_op_queue_mclock_snap_res")
2958 .add_see_also("osd_op_queue_mclock_snap_lim")
2959 .add_see_also("osd_op_queue_mclock_recov_res")
2960 .add_see_also("osd_op_queue_mclock_recov_wgt")
2961 .add_see_also("osd_op_queue_mclock_recov_lim")
2962 .add_see_also("osd_op_queue_mclock_scrub_res")
2963 .add_see_also("osd_op_queue_mclock_scrub_wgt")
2964 .add_see_also("osd_op_queue_mclock_scrub_lim")
2965 .add_see_also("osd_op_queue_mclock_anticipation_timeout"),
2966
2967 Option("osd_op_queue_mclock_snap_lim", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2968 .set_default(0.001)
2969 .set_description("")
2970 .set_description("mclock limit of snaptrim requests")
2971 .set_long_description("mclock limit of snaptrim requests when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the limit")
2972 .add_see_also("osd_op_queue_mclock_client_op_res")
2973 .add_see_also("osd_op_queue_mclock_client_op_wgt")
2974 .add_see_also("osd_op_queue_mclock_client_op_lim")
2975 .add_see_also("osd_op_queue_mclock_osd_rep_op_res")
2976 .add_see_also("osd_op_queue_mclock_osd_rep_op_wgt")
2977 .add_see_also("osd_op_queue_mclock_osd_rep_op_lim")
2978 .add_see_also("osd_op_queue_mclock_snap_res")
2979 .add_see_also("osd_op_queue_mclock_snap_wgt")
2980 .add_see_also("osd_op_queue_mclock_recov_res")
2981 .add_see_also("osd_op_queue_mclock_recov_wgt")
2982 .add_see_also("osd_op_queue_mclock_recov_lim")
2983 .add_see_also("osd_op_queue_mclock_scrub_res")
2984 .add_see_also("osd_op_queue_mclock_scrub_wgt")
2985 .add_see_also("osd_op_queue_mclock_scrub_lim")
2986 .add_see_also("osd_op_queue_mclock_anticipation_timeout"),
2987
2988 Option("osd_op_queue_mclock_recov_res", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2989 .set_default(0.0)
2990 .set_description("mclock reservation of recovery requests")
2991 .set_long_description("mclock reservation of recovery requests when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the reservation")
2992 .add_see_also("osd_op_queue")
2993 .add_see_also("osd_op_queue_mclock_client_op_res")
2994 .add_see_also("osd_op_queue_mclock_client_op_wgt")
2995 .add_see_also("osd_op_queue_mclock_client_op_lim")
2996 .add_see_also("osd_op_queue_mclock_osd_rep_op_res")
2997 .add_see_also("osd_op_queue_mclock_osd_rep_op_wgt")
2998 .add_see_also("osd_op_queue_mclock_osd_rep_op_lim")
2999 .add_see_also("osd_op_queue_mclock_snap_res")
3000 .add_see_also("osd_op_queue_mclock_snap_wgt")
3001 .add_see_also("osd_op_queue_mclock_snap_lim")
3002 .add_see_also("osd_op_queue_mclock_recov_wgt")
3003 .add_see_also("osd_op_queue_mclock_recov_lim")
3004 .add_see_also("osd_op_queue_mclock_scrub_res")
3005 .add_see_also("osd_op_queue_mclock_scrub_wgt")
3006 .add_see_also("osd_op_queue_mclock_scrub_lim")
3007 .add_see_also("osd_op_queue_mclock_anticipation_timeout"),
3008
3009 Option("osd_op_queue_mclock_recov_wgt", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3010 .set_default(1.0)
3011 .set_description("mclock weight of recovery requests")
3012 .set_long_description("mclock weight of recovery requests when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the weight")
3013 .add_see_also("osd_op_queue")
3014 .add_see_also("osd_op_queue_mclock_client_op_res")
3015 .add_see_also("osd_op_queue_mclock_client_op_wgt")
3016 .add_see_also("osd_op_queue_mclock_client_op_lim")
3017 .add_see_also("osd_op_queue_mclock_osd_rep_op_res")
3018 .add_see_also("osd_op_queue_mclock_osd_rep_op_wgt")
3019 .add_see_also("osd_op_queue_mclock_osd_rep_op_lim")
3020 .add_see_also("osd_op_queue_mclock_snap_res")
3021 .add_see_also("osd_op_queue_mclock_snap_wgt")
3022 .add_see_also("osd_op_queue_mclock_snap_lim")
3023 .add_see_also("osd_op_queue_mclock_recov_res")
3024 .add_see_also("osd_op_queue_mclock_recov_lim")
3025 .add_see_also("osd_op_queue_mclock_scrub_res")
3026 .add_see_also("osd_op_queue_mclock_scrub_wgt")
3027 .add_see_also("osd_op_queue_mclock_scrub_lim")
3028 .add_see_also("osd_op_queue_mclock_anticipation_timeout"),
3029
3030 Option("osd_op_queue_mclock_recov_lim", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3031 .set_default(0.001)
3032 .set_description("mclock limit of recovery requests")
3033 .set_long_description("mclock limit of recovery requests when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the limit")
3034 .add_see_also("osd_op_queue")
3035 .add_see_also("osd_op_queue_mclock_client_op_res")
3036 .add_see_also("osd_op_queue_mclock_client_op_wgt")
3037 .add_see_also("osd_op_queue_mclock_client_op_lim")
3038 .add_see_also("osd_op_queue_mclock_osd_rep_op_res")
3039 .add_see_also("osd_op_queue_mclock_osd_rep_op_wgt")
3040 .add_see_also("osd_op_queue_mclock_osd_rep_op_lim")
3041 .add_see_also("osd_op_queue_mclock_snap_res")
3042 .add_see_also("osd_op_queue_mclock_snap_wgt")
3043 .add_see_also("osd_op_queue_mclock_snap_lim")
3044 .add_see_also("osd_op_queue_mclock_recov_res")
3045 .add_see_also("osd_op_queue_mclock_recov_wgt")
3046 .add_see_also("osd_op_queue_mclock_scrub_res")
3047 .add_see_also("osd_op_queue_mclock_scrub_wgt")
3048 .add_see_also("osd_op_queue_mclock_scrub_lim")
3049 .add_see_also("osd_op_queue_mclock_anticipation_timeout"),
3050
3051 Option("osd_op_queue_mclock_scrub_res", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3052 .set_default(0.0)
3053 .set_description("mclock reservation of scrub requests")
3054 .set_long_description("mclock reservation of scrub requests when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the reservation")
3055 .add_see_also("osd_op_queue")
3056 .add_see_also("osd_op_queue_mclock_client_op_res")
3057 .add_see_also("osd_op_queue_mclock_client_op_wgt")
3058 .add_see_also("osd_op_queue_mclock_client_op_lim")
3059 .add_see_also("osd_op_queue_mclock_osd_rep_op_res")
3060 .add_see_also("osd_op_queue_mclock_osd_rep_op_wgt")
3061 .add_see_also("osd_op_queue_mclock_osd_rep_op_lim")
3062 .add_see_also("osd_op_queue_mclock_snap_res")
3063 .add_see_also("osd_op_queue_mclock_snap_wgt")
3064 .add_see_also("osd_op_queue_mclock_snap_lim")
3065 .add_see_also("osd_op_queue_mclock_recov_res")
3066 .add_see_also("osd_op_queue_mclock_recov_wgt")
3067 .add_see_also("osd_op_queue_mclock_recov_lim")
3068 .add_see_also("osd_op_queue_mclock_scrub_wgt")
3069 .add_see_also("osd_op_queue_mclock_scrub_lim")
3070 .add_see_also("osd_op_queue_mclock_anticipation_timeout"),
3071
3072 Option("osd_op_queue_mclock_scrub_wgt", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3073 .set_default(1.0)
3074 .set_description("mclock weight of scrub requests")
3075 .set_long_description("mclock weight of scrub requests when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the weight")
3076 .add_see_also("osd_op_queue")
3077 .add_see_also("osd_op_queue_mclock_client_op_res")
3078 .add_see_also("osd_op_queue_mclock_client_op_wgt")
3079 .add_see_also("osd_op_queue_mclock_client_op_lim")
3080 .add_see_also("osd_op_queue_mclock_osd_rep_op_res")
3081 .add_see_also("osd_op_queue_mclock_osd_rep_op_wgt")
3082 .add_see_also("osd_op_queue_mclock_osd_rep_op_lim")
3083 .add_see_also("osd_op_queue_mclock_snap_res")
3084 .add_see_also("osd_op_queue_mclock_snap_wgt")
3085 .add_see_also("osd_op_queue_mclock_snap_lim")
3086 .add_see_also("osd_op_queue_mclock_recov_res")
3087 .add_see_also("osd_op_queue_mclock_recov_wgt")
3088 .add_see_also("osd_op_queue_mclock_recov_lim")
3089 .add_see_also("osd_op_queue_mclock_scrub_res")
3090 .add_see_also("osd_op_queue_mclock_scrub_lim")
3091 .add_see_also("osd_op_queue_mclock_anticipation_timeout"),
3092
3093 Option("osd_op_queue_mclock_scrub_lim", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3094 .set_default(0.001)
3095 .set_description("mclock weight of limit requests")
3096 .set_long_description("mclock weight of limit requests when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the limit")
3097 .add_see_also("osd_op_queue")
3098 .add_see_also("osd_op_queue_mclock_client_op_res")
3099 .add_see_also("osd_op_queue_mclock_client_op_wgt")
3100 .add_see_also("osd_op_queue_mclock_client_op_lim")
3101 .add_see_also("osd_op_queue_mclock_osd_rep_op_res")
3102 .add_see_also("osd_op_queue_mclock_osd_rep_op_wgt")
3103 .add_see_also("osd_op_queue_mclock_osd_rep_op_lim")
d2e6a577 3104 .add_see_also("osd_op_queue_mclock_snap_res")
11fdf7f2 3105 .add_see_also("osd_op_queue_mclock_snap_wgt")
d2e6a577
FG
3106 .add_see_also("osd_op_queue_mclock_snap_lim")
3107 .add_see_also("osd_op_queue_mclock_recov_res")
3108 .add_see_also("osd_op_queue_mclock_recov_wgt")
3109 .add_see_also("osd_op_queue_mclock_recov_lim")
3110 .add_see_also("osd_op_queue_mclock_scrub_res")
3111 .add_see_also("osd_op_queue_mclock_scrub_wgt")
11fdf7f2 3112 .add_see_also("osd_op_queue_mclock_anticipation_timeout"),
d2e6a577 3113
11fdf7f2
TL
3114 Option("osd_op_queue_mclock_anticipation_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3115 .set_default(0.0)
3116 .set_description("mclock anticipation timeout in seconds")
3117 .set_long_description("the amount of time that mclock waits until the unused resource is forfeited")
3118 .add_see_also("osd_op_queue")
d2e6a577
FG
3119 .add_see_also("osd_op_queue_mclock_client_op_res")
3120 .add_see_also("osd_op_queue_mclock_client_op_wgt")
3121 .add_see_also("osd_op_queue_mclock_client_op_lim")
11fdf7f2
TL
3122 .add_see_also("osd_op_queue_mclock_osd_rep_op_res")
3123 .add_see_also("osd_op_queue_mclock_osd_rep_op_wgt")
3124 .add_see_also("osd_op_queue_mclock_osd_rep_op_lim")
d2e6a577
FG
3125 .add_see_also("osd_op_queue_mclock_snap_res")
3126 .add_see_also("osd_op_queue_mclock_snap_wgt")
11fdf7f2 3127 .add_see_also("osd_op_queue_mclock_snap_lim")
d2e6a577
FG
3128 .add_see_also("osd_op_queue_mclock_recov_res")
3129 .add_see_also("osd_op_queue_mclock_recov_wgt")
3130 .add_see_also("osd_op_queue_mclock_recov_lim")
3131 .add_see_also("osd_op_queue_mclock_scrub_res")
3132 .add_see_also("osd_op_queue_mclock_scrub_wgt")
3133 .add_see_also("osd_op_queue_mclock_scrub_lim"),
3134
11fdf7f2 3135 Option("osd_op_queue_mclock_pg_delete_res", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
d2e6a577 3136 .set_default(0.0)
11fdf7f2
TL
3137 .set_description("mclock reservation of pg delete work")
3138 .set_long_description("mclock reservation of pg delete work when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the reservation")
d2e6a577
FG
3139 .add_see_also("osd_op_queue")
3140 .add_see_also("osd_op_queue_mclock_client_op_res")
3141 .add_see_also("osd_op_queue_mclock_client_op_wgt")
3142 .add_see_also("osd_op_queue_mclock_client_op_lim")
11fdf7f2
TL
3143 .add_see_also("osd_op_queue_mclock_osd_rep_op_res")
3144 .add_see_also("osd_op_queue_mclock_osd_rep_op_wgt")
3145 .add_see_also("osd_op_queue_mclock_osd_rep_op_lim")
d2e6a577
FG
3146 .add_see_also("osd_op_queue_mclock_snap_res")
3147 .add_see_also("osd_op_queue_mclock_snap_wgt")
3148 .add_see_also("osd_op_queue_mclock_snap_lim")
11fdf7f2 3149 .add_see_also("osd_op_queue_mclock_recov_res")
d2e6a577
FG
3150 .add_see_also("osd_op_queue_mclock_recov_wgt")
3151 .add_see_also("osd_op_queue_mclock_recov_lim")
d2e6a577
FG
3152 .add_see_also("osd_op_queue_mclock_scrub_wgt")
3153 .add_see_also("osd_op_queue_mclock_scrub_lim"),
3154
11fdf7f2 3155 Option("osd_op_queue_mclock_pg_delete_wgt", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
d2e6a577 3156 .set_default(1.0)
11fdf7f2
TL
3157 .set_description("mclock weight of pg delete work")
3158 .set_long_description("mclock weight of pg delete work when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the weight")
d2e6a577
FG
3159 .add_see_also("osd_op_queue")
3160 .add_see_also("osd_op_queue_mclock_client_op_res")
3161 .add_see_also("osd_op_queue_mclock_client_op_wgt")
3162 .add_see_also("osd_op_queue_mclock_client_op_lim")
11fdf7f2
TL
3163 .add_see_also("osd_op_queue_mclock_osd_rep_op_res")
3164 .add_see_also("osd_op_queue_mclock_osd_rep_op_wgt")
3165 .add_see_also("osd_op_queue_mclock_osd_rep_op_lim")
d2e6a577
FG
3166 .add_see_also("osd_op_queue_mclock_snap_res")
3167 .add_see_also("osd_op_queue_mclock_snap_wgt")
3168 .add_see_also("osd_op_queue_mclock_snap_lim")
3169 .add_see_also("osd_op_queue_mclock_recov_res")
11fdf7f2 3170 .add_see_also("osd_op_queue_mclock_recov_wgt")
d2e6a577
FG
3171 .add_see_also("osd_op_queue_mclock_recov_lim")
3172 .add_see_also("osd_op_queue_mclock_scrub_res")
d2e6a577
FG
3173 .add_see_also("osd_op_queue_mclock_scrub_lim"),
3174
11fdf7f2 3175 Option("osd_op_queue_mclock_pg_delete_lim", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
d2e6a577 3176 .set_default(0.001)
11fdf7f2
TL
3177 .set_description("mclock weight of pg delete work limit requests")
3178 .set_long_description("mclock weight of limit pg delete work when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the limit")
d2e6a577
FG
3179 .add_see_also("osd_op_queue")
3180 .add_see_also("osd_op_queue_mclock_client_op_res")
3181 .add_see_also("osd_op_queue_mclock_client_op_wgt")
3182 .add_see_also("osd_op_queue_mclock_client_op_lim")
11fdf7f2
TL
3183 .add_see_also("osd_op_queue_mclock_osd_rep_op_res")
3184 .add_see_also("osd_op_queue_mclock_osd_rep_op_wgt")
3185 .add_see_also("osd_op_queue_mclock_osd_rep_op_lim")
d2e6a577
FG
3186 .add_see_also("osd_op_queue_mclock_snap_res")
3187 .add_see_also("osd_op_queue_mclock_snap_wgt")
3188 .add_see_also("osd_op_queue_mclock_snap_lim")
3189 .add_see_also("osd_op_queue_mclock_recov_res")
3190 .add_see_also("osd_op_queue_mclock_recov_wgt")
11fdf7f2 3191 .add_see_also("osd_op_queue_mclock_recov_lim")
d2e6a577 3192 .add_see_also("osd_op_queue_mclock_scrub_res")
11fdf7f2 3193 .add_see_also("osd_op_queue_mclock_scrub_wgt"),
d2e6a577 3194
11fdf7f2 3195 Option("osd_op_queue_mclock_peering_event_res", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
d2e6a577 3196 .set_default(0.0)
11fdf7f2 3197 .set_description("mclock reservation of peering events")
d2e6a577
FG
3198 .set_long_description("mclock reservation of scrub requests when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the reservation")
3199 .add_see_also("osd_op_queue")
3200 .add_see_also("osd_op_queue_mclock_client_op_res")
3201 .add_see_also("osd_op_queue_mclock_client_op_wgt")
3202 .add_see_also("osd_op_queue_mclock_client_op_lim")
11fdf7f2
TL
3203 .add_see_also("osd_op_queue_mclock_osd_rep_op_res")
3204 .add_see_also("osd_op_queue_mclock_osd_rep_op_wgt")
3205 .add_see_also("osd_op_queue_mclock_osd_rep_op_lim")
d2e6a577
FG
3206 .add_see_also("osd_op_queue_mclock_snap_res")
3207 .add_see_also("osd_op_queue_mclock_snap_wgt")
3208 .add_see_also("osd_op_queue_mclock_snap_lim")
3209 .add_see_also("osd_op_queue_mclock_recov_res")
3210 .add_see_also("osd_op_queue_mclock_recov_wgt")
3211 .add_see_also("osd_op_queue_mclock_recov_lim")
3212 .add_see_also("osd_op_queue_mclock_scrub_wgt")
3213 .add_see_also("osd_op_queue_mclock_scrub_lim"),
3214
11fdf7f2 3215 Option("osd_op_queue_mclock_peering_event_wgt", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
d2e6a577 3216 .set_default(1.0)
11fdf7f2 3217 .set_description("mclock weight of peering events")
d2e6a577
FG
3218 .set_long_description("mclock weight of scrub requests when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the weight")
3219 .add_see_also("osd_op_queue")
3220 .add_see_also("osd_op_queue_mclock_client_op_res")
3221 .add_see_also("osd_op_queue_mclock_client_op_wgt")
3222 .add_see_also("osd_op_queue_mclock_client_op_lim")
11fdf7f2
TL
3223 .add_see_also("osd_op_queue_mclock_osd_rep_op_res")
3224 .add_see_also("osd_op_queue_mclock_osd_rep_op_wgt")
3225 .add_see_also("osd_op_queue_mclock_osd_rep_op_lim")
d2e6a577
FG
3226 .add_see_also("osd_op_queue_mclock_snap_res")
3227 .add_see_also("osd_op_queue_mclock_snap_wgt")
3228 .add_see_also("osd_op_queue_mclock_snap_lim")
3229 .add_see_also("osd_op_queue_mclock_recov_res")
3230 .add_see_also("osd_op_queue_mclock_recov_wgt")
3231 .add_see_also("osd_op_queue_mclock_recov_lim")
3232 .add_see_also("osd_op_queue_mclock_scrub_res")
3233 .add_see_also("osd_op_queue_mclock_scrub_lim"),
3234
11fdf7f2 3235 Option("osd_op_queue_mclock_peering_event_lim", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
d2e6a577 3236 .set_default(0.001)
11fdf7f2 3237 .set_description("mclock weight of limit peering events")
d2e6a577
FG
3238 .set_long_description("mclock weight of limit requests when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the limit")
3239 .add_see_also("osd_op_queue")
3240 .add_see_also("osd_op_queue_mclock_client_op_res")
3241 .add_see_also("osd_op_queue_mclock_client_op_wgt")
3242 .add_see_also("osd_op_queue_mclock_client_op_lim")
11fdf7f2
TL
3243 .add_see_also("osd_op_queue_mclock_osd_rep_op_res")
3244 .add_see_also("osd_op_queue_mclock_osd_rep_op_wgt")
3245 .add_see_also("osd_op_queue_mclock_osd_rep_op_lim")
d2e6a577
FG
3246 .add_see_also("osd_op_queue_mclock_snap_res")
3247 .add_see_also("osd_op_queue_mclock_snap_wgt")
3248 .add_see_also("osd_op_queue_mclock_snap_lim")
3249 .add_see_also("osd_op_queue_mclock_recov_res")
3250 .add_see_also("osd_op_queue_mclock_recov_wgt")
3251 .add_see_also("osd_op_queue_mclock_recov_lim")
3252 .add_see_also("osd_op_queue_mclock_scrub_res")
3253 .add_see_also("osd_op_queue_mclock_scrub_wgt"),
3254
3255 Option("osd_ignore_stale_divergent_priors", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3256 .set_default(false)
3257 .set_description(""),
3258
3259 Option("osd_read_ec_check_for_errors", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3260 .set_default(false)
3261 .set_description(""),
3262
3263 Option("osd_recover_clone_overlap_limit", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3264 .set_default(10)
3265 .set_description(""),
3266
81eedcae
TL
3267 Option("osd_debug_feed_pullee", Option::TYPE_INT, Option::LEVEL_DEV)
3268 .set_default(-1)
3269 .set_description("Feed a pullee, and force primary to pull "
3270 "a currently missing object from it"),
3271
d2e6a577
FG
3272 Option("osd_backfill_scan_min", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3273 .set_default(64)
3274 .set_description(""),
3275
3276 Option("osd_backfill_scan_max", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3277 .set_default(512)
3278 .set_description(""),
3279
3280 Option("osd_op_thread_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3281 .set_default(15)
3282 .set_description(""),
3283
3284 Option("osd_op_thread_suicide_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3285 .set_default(150)
3286 .set_description(""),
3287
d2e6a577
FG
3288 Option("osd_recovery_sleep", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3289 .set_default(0)
3290 .set_description("Time in seconds to sleep before next recovery or backfill op"),
3291
3292 Option("osd_recovery_sleep_hdd", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3293 .set_default(0.1)
3294 .set_description("Time in seconds to sleep before next recovery or backfill op for HDDs"),
3295
3296 Option("osd_recovery_sleep_ssd", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3297 .set_default(0)
11fdf7f2
TL
3298 .set_description("Time in seconds to sleep before next recovery or backfill op for SSDs")
3299 .add_see_also("osd_recovery_sleep"),
d2e6a577
FG
3300
3301 Option("osd_recovery_sleep_hybrid", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3302 .set_default(0.025)
11fdf7f2
TL
3303 .set_description("Time in seconds to sleep before next recovery or backfill op when data is on HDD and journal is on SSD")
3304 .add_see_also("osd_recovery_sleep"),
d2e6a577
FG
3305
3306 Option("osd_snap_trim_sleep", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3307 .set_default(0)
494da23a
TL
3308 .set_description("Time in seconds to sleep before next snap trim (overrides values below)"),
3309
3310 Option("osd_snap_trim_sleep_hdd", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3311 .set_default(5)
3312 .set_description("Time in seconds to sleep before next snap trim for HDDs"),
3313
3314 Option("osd_snap_trim_sleep_ssd", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3315 .set_default(0)
3316 .set_description("Time in seconds to sleep before next snap trim for SSDs"),
3317
3318 Option("osd_snap_trim_sleep_hybrid", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3319 .set_default(2)
3320 .set_description("Time in seconds to sleep before next snap trim when data is on HDD and journal is on SSD"),
d2e6a577
FG
3321
3322 Option("osd_scrub_invalid_stats", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3323 .set_default(true)
3324 .set_description(""),
3325
d2e6a577 3326 Option("osd_command_thread_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144 3327 .set_default(10_min)
d2e6a577
FG
3328 .set_description(""),
3329
3330 Option("osd_command_thread_suicide_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144 3331 .set_default(15_min)
d2e6a577
FG
3332 .set_description(""),
3333
d2e6a577
FG
3334 Option("osd_heartbeat_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3335 .set_default(6)
11fdf7f2
TL
3336 .set_min_max(1, 86400)
3337 .set_description("Interval (in seconds) between peer pings"),
d2e6a577
FG
3338
3339 Option("osd_heartbeat_grace", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3340 .set_default(20)
3341 .set_description(""),
3342
494da23a
TL
3343 Option("osd_heartbeat_stale", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3344 .set_default(600)
3345 .set_description("Interval (in seconds) we mark an unresponsive heartbeat peer as stale.")
3346 .set_long_description("Automatically mark unresponsive heartbeat sessions as stale and tear them down. "
3347 "The primary benefit is that OSD doesn't need to keep a flood of "
3348 "blocked heartbeat messages around in memory."),
3349
d2e6a577
FG
3350 Option("osd_heartbeat_min_peers", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3351 .set_default(10)
3352 .set_description(""),
3353
3354 Option("osd_heartbeat_use_min_delay_socket", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3355 .set_default(false)
3356 .set_description(""),
c07f9fc5 3357
11fdf7f2 3358 Option("osd_heartbeat_min_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577 3359 .set_default(2000)
11fdf7f2 3360 .set_description("Minimum heartbeat packet size in bytes. Will add dummy payload if heartbeat packet is smaller than this."),
c07f9fc5 3361
d2e6a577
FG
3362 Option("osd_pg_max_concurrent_snap_trims", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3363 .set_default(2)
3364 .set_description(""),
c07f9fc5 3365
d2e6a577
FG
3366 Option("osd_max_trimming_pgs", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3367 .set_default(2)
3368 .set_description(""),
c07f9fc5 3369
d2e6a577
FG
3370 Option("osd_heartbeat_min_healthy_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3371 .set_default(.33)
3372 .set_description(""),
c07f9fc5 3373
d2e6a577
FG
3374 Option("osd_mon_heartbeat_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3375 .set_default(30)
3376 .set_description(""),
c07f9fc5 3377
11fdf7f2 3378 Option("osd_mon_report_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
d2e6a577 3379 .set_default(5)
11fdf7f2 3380 .set_description("Frequency of OSD reports to mon for peer failures, fullness status changes"),
c07f9fc5 3381
d2e6a577
FG
3382 Option("osd_mon_report_max_in_flight", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3383 .set_default(2)
3384 .set_description(""),
c07f9fc5 3385
d2e6a577
FG
3386 Option("osd_beacon_report_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3387 .set_default(300)
3388 .set_description(""),
c07f9fc5 3389
d2e6a577
FG
3390 Option("osd_pg_stat_report_interval_max", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3391 .set_default(500)
3392 .set_description(""),
c07f9fc5 3393
d2e6a577
FG
3394 Option("osd_mon_ack_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3395 .set_default(30.0)
3396 .set_description(""),
c07f9fc5 3397
d2e6a577
FG
3398 Option("osd_stats_ack_timeout_factor", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3399 .set_default(2.0)
3400 .set_description(""),
c07f9fc5 3401
d2e6a577
FG
3402 Option("osd_stats_ack_timeout_decay", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3403 .set_default(.9)
3404 .set_description(""),
c07f9fc5 3405
11fdf7f2
TL
3406 Option("osd_max_snap_prune_intervals_per_epoch", Option::TYPE_UINT, Option::LEVEL_DEV)
3407 .set_default(512)
3408 .set_description("Max number of snap intervals to report to mgr in pg_stat_t"),
3409
d2e6a577
FG
3410 Option("osd_default_data_pool_replay_window", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3411 .set_default(45)
3412 .set_description(""),
c07f9fc5 3413
d2e6a577
FG
3414 Option("osd_auto_mark_unfound_lost", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3415 .set_default(false)
3416 .set_description(""),
c07f9fc5 3417
d2e6a577
FG
3418 Option("osd_recovery_delay_start", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3419 .set_default(0)
3420 .set_description(""),
c07f9fc5 3421
d2e6a577
FG
3422 Option("osd_recovery_max_active", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3423 .set_default(3)
3424 .set_description(""),
c07f9fc5 3425
d2e6a577
FG
3426 Option("osd_recovery_max_single_start", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3427 .set_default(1)
3428 .set_description(""),
c07f9fc5 3429
11fdf7f2
TL
3430 Option("osd_recovery_max_chunk", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
3431 .set_default(8_M)
d2e6a577 3432 .set_description(""),
c07f9fc5 3433
d2e6a577 3434 Option("osd_recovery_max_omap_entries_per_chunk", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 3435 .set_default(8096)
d2e6a577 3436 .set_description(""),
c07f9fc5 3437
11fdf7f2
TL
3438 Option("osd_copyfrom_max_chunk", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
3439 .set_default(8_M)
d2e6a577 3440 .set_description(""),
c07f9fc5 3441
11fdf7f2 3442 Option("osd_push_per_object_cost", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577
FG
3443 .set_default(1000)
3444 .set_description(""),
c07f9fc5 3445
11fdf7f2 3446 Option("osd_max_push_cost", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577
FG
3447 .set_default(8<<20)
3448 .set_description(""),
c07f9fc5 3449
d2e6a577
FG
3450 Option("osd_max_push_objects", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3451 .set_default(10)
3452 .set_description(""),
c07f9fc5 3453
d2e6a577
FG
3454 Option("osd_max_scrubs", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3455 .set_default(1)
28e407b8 3456 .set_description("Maximum concurrent scrubs on a single OSD"),
c07f9fc5 3457
d2e6a577
FG
3458 Option("osd_scrub_during_recovery", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3459 .set_default(false)
28e407b8 3460 .set_description("Allow scrubbing when PGs on the OSD are undergoing recovery"),
c07f9fc5 3461
d2e6a577
FG
3462 Option("osd_scrub_begin_hour", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3463 .set_default(0)
28e407b8
AA
3464 .set_description("Restrict scrubbing to this hour of the day or later")
3465 .add_see_also("osd_scrub_end_hour"),
c07f9fc5 3466
d2e6a577
FG
3467 Option("osd_scrub_end_hour", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3468 .set_default(24)
28e407b8
AA
3469 .set_description("Restrict scrubbing to hours of the day earlier than this")
3470 .add_see_also("osd_scrub_begin_hour"),
3471
3472 Option("osd_scrub_begin_week_day", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3473 .set_default(0)
3474 .set_description("Restrict scrubbing to this day of the week or later")
3475 .set_long_description("0 or 7 = Sunday, 1 = Monday, etc.")
3476 .add_see_also("osd_scrub_end_week_day"),
3477
3478 Option("osd_scrub_end_week_day", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3479 .set_default(7)
3480 .set_description("Restrict scrubbing to days of the week earlier than this")
3481 .set_long_description("0 or 7 = Sunday, 1 = Monday, etc.")
3482 .add_see_also("osd_scrub_begin_week_day"),
c07f9fc5 3483
d2e6a577
FG
3484 Option("osd_scrub_load_threshold", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3485 .set_default(0.5)
28e407b8 3486 .set_description("Allow scrubbing when system load divided by number of CPUs is below this value"),
c07f9fc5 3487
d2e6a577 3488 Option("osd_scrub_min_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
b32b8144 3489 .set_default(1_day)
28e407b8
AA
3490 .set_description("Scrub each PG no more often than this interval")
3491 .add_see_also("osd_scrub_max_interval"),
d2e6a577
FG
3492
3493 Option("osd_scrub_max_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
b32b8144 3494 .set_default(7_day)
28e407b8
AA
3495 .set_description("Scrub each PG no less often than this interval")
3496 .add_see_also("osd_scrub_min_interval"),
d2e6a577
FG
3497
3498 Option("osd_scrub_interval_randomize_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3499 .set_default(0.5)
28e407b8
AA
3500 .set_description("Ratio of scrub interval to randomly vary")
3501 .set_long_description("This prevents a scrub 'stampede' by randomly varying the scrub intervals so that they are soon uniformly distributed over the week")
3502 .add_see_also("osd_scrub_min_interval"),
d2e6a577 3503
28e407b8 3504 Option("osd_scrub_backoff_ratio", Option::TYPE_FLOAT, Option::LEVEL_DEV)
d2e6a577 3505 .set_default(.66)
a8e16298
TL
3506 .set_long_description("This is the precentage of ticks that do NOT schedule scrubs, 66% means that 1 out of 3 ticks will schedule scrubs")
3507 .set_description("Backoff ratio for scheduling scrubs"),
d2e6a577
FG
3508
3509 Option("osd_scrub_chunk_min", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3510 .set_default(5)
28e407b8
AA
3511 .set_description("Minimum number of objects to scrub in a single chunk")
3512 .add_see_also("osd_scrub_chunk_max"),
d2e6a577
FG
3513
3514 Option("osd_scrub_chunk_max", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3515 .set_default(25)
11fdf7f2 3516 .set_description("Maximum number of objects to scrub in a single chunk")
28e407b8 3517 .add_see_also("osd_scrub_chunk_min"),
d2e6a577
FG
3518
3519 Option("osd_scrub_sleep", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3520 .set_default(0)
28e407b8 3521 .set_description("Duration to inject a delay during scrubbing"),
d2e6a577
FG
3522
3523 Option("osd_scrub_auto_repair", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3524 .set_default(false)
28e407b8 3525 .set_description("Automatically repair damaged objects detected during scrub"),
d2e6a577
FG
3526
3527 Option("osd_scrub_auto_repair_num_errors", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3528 .set_default(5)
28e407b8
AA
3529 .set_description("Maximum number of detected errors to automatically repair")
3530 .add_see_also("osd_scrub_auto_repair"),
3531
3532 Option("osd_scrub_max_preemptions", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3533 .set_default(5)
3534 .set_description("Set the maximum number of times we will preempt a deep scrub due to a client operation before blocking client IO to complete the scrub"),
d2e6a577
FG
3535
3536 Option("osd_deep_scrub_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
b32b8144 3537 .set_default(7_day)
28e407b8 3538 .set_description("Deep scrub each PG (i.e., verify data checksums) at least this often"),
d2e6a577
FG
3539
3540 Option("osd_deep_scrub_randomize_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3541 .set_default(0.15)
a8e16298
TL
3542 .set_description("Scrubs will randomly become deep scrubs at this rate (0.15 -> 15% of scrubs are deep)")
3543 .set_long_description("This prevents a deep scrub 'stampede' by spreading deep scrubs so they are uniformly distributed over the week"),
d2e6a577 3544
11fdf7f2
TL
3545 Option("osd_deep_scrub_stride", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
3546 .set_default(512_K)
28e407b8
AA
3547 .set_description("Number of bytes to read from an object at a time during deep scrub"),
3548
3549 Option("osd_deep_scrub_keys", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3550 .set_default(1024)
3551 .set_description("Number of keys to read from an object at a time during deep scrub"),
d2e6a577
FG
3552
3553 Option("osd_deep_scrub_update_digest_min_age", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144 3554 .set_default(2_hr)
28e407b8
AA
3555 .set_description("Update overall object digest only if object was last modified longer ago than this"),
3556
3557 Option("osd_deep_scrub_large_omap_object_key_threshold", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
494da23a 3558 .set_default(200000)
28e407b8
AA
3559 .set_description("Warn when we encounter an object with more omap keys than this")
3560 .add_service("osd")
3561 .add_see_also("osd_deep_scrub_large_omap_object_value_sum_threshold"),
3562
11fdf7f2 3563 Option("osd_deep_scrub_large_omap_object_value_sum_threshold", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
28e407b8
AA
3564 .set_default(1_G)
3565 .set_description("Warn when we encounter an object with more omap key bytes than this")
3566 .add_service("osd")
3567 .add_see_also("osd_deep_scrub_large_omap_object_key_threshold"),
d2e6a577
FG
3568
3569 Option("osd_class_dir", Option::TYPE_STR, Option::LEVEL_ADVANCED)
3570 .set_default(CEPH_LIBDIR "/rados-classes")
3571 .set_description(""),
3572
3573 Option("osd_open_classes_on_start", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3574 .set_default(true)
3575 .set_description(""),
3576
3577 Option("osd_class_load_list", Option::TYPE_STR, Option::LEVEL_ADVANCED)
11fdf7f2 3578 .set_default("cephfs hello journal lock log numops " "otp rbd refcount rgw timeindex user version cas")
d2e6a577
FG
3579 .set_description(""),
3580
3581 Option("osd_class_default_list", Option::TYPE_STR, Option::LEVEL_ADVANCED)
11fdf7f2 3582 .set_default("cephfs hello journal lock log numops " "otp rbd refcount rgw timeindex user version cas")
d2e6a577
FG
3583 .set_description(""),
3584
3585 Option("osd_check_for_log_corruption", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3586 .set_default(false)
3587 .set_description(""),
3588
3589 Option("osd_use_stale_snap", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3590 .set_default(false)
3591 .set_description(""),
3592
3593 Option("osd_rollback_to_cluster_snap", Option::TYPE_STR, Option::LEVEL_ADVANCED)
3594 .set_default("")
3595 .set_description(""),
3596
3597 Option("osd_default_notify_timeout", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3598 .set_default(30)
3599 .set_description(""),
3600
3601 Option("osd_kill_backfill_at", Option::TYPE_INT, Option::LEVEL_DEV)
3602 .set_default(0)
3603 .set_description(""),
3604
3605 Option("osd_pg_epoch_persisted_max_stale", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3606 .set_default(40)
3607 .set_description(""),
3608
3609 Option("osd_min_pg_log_entries", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
11fdf7f2 3610 .set_default(3000)
d2e6a577
FG
3611 .set_description("minimum number of entries to maintain in the PG log")
3612 .add_service("osd")
3613 .add_see_also("osd_max_pg_log_entries")
3614 .add_see_also("osd_pg_log_dups_tracked"),
3615
3616 Option("osd_max_pg_log_entries", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
11fdf7f2 3617 .set_default(3000)
d2e6a577
FG
3618 .set_description("maximum number of entries to maintain in the PG log when degraded before we trim")
3619 .add_service("osd")
3620 .add_see_also("osd_min_pg_log_entries")
3621 .add_see_also("osd_pg_log_dups_tracked"),
3622
3623 Option("osd_pg_log_dups_tracked", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3624 .set_default(3000)
3625 .set_description("how many versions back to track in order to detect duplicate ops; this is combined with both the regular pg log entries and additional minimal dup detection entries")
3626 .add_service("osd")
3627 .add_see_also("osd_min_pg_log_entries")
3628 .add_see_also("osd_max_pg_log_entries"),
3629
3630 Option("osd_force_recovery_pg_log_entries_factor", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3631 .set_default(1.3)
3632 .set_description(""),
3633
3634 Option("osd_pg_log_trim_min", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3635 .set_default(100)
3636 .set_description(""),
3637
11fdf7f2
TL
3638 Option("osd_force_auth_primary_missing_objects", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3639 .set_default(100)
3640 .set_description("Approximate missing objects above which to force auth_log_shard to be primary temporarily"),
3641
3642 Option("osd_async_recovery_min_cost", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3643 .set_default(100)
3644 .set_description("A mixture measure of number of current log entries difference "
3645 "and historical missing objects, above which we switch to use "
3646 "asynchronous recovery when appropriate"),
3647
3efd9988 3648 Option("osd_max_pg_per_osd_hard_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
28e407b8 3649 .set_default(3)
3efd9988
FG
3650 .set_min(1)
3651 .set_description("Maximum number of PG per OSD, a factor of 'mon_max_pg_per_osd'")
3652 .set_long_description("OSD will refuse to instantiate PG if the number of PG it serves exceeds this number.")
3653 .add_see_also("mon_max_pg_per_osd"),
3654
94b18763
FG
3655 Option("osd_pg_log_trim_max", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3656 .set_default(10000)
3657 .set_description("maximum number of entries to remove at once from the PG log")
3658 .add_service("osd")
3659 .add_see_also("osd_min_pg_log_entries")
3660 .add_see_also("osd_max_pg_log_entries"),
3661
d2e6a577
FG
3662 Option("osd_op_complaint_time", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3663 .set_default(30)
3664 .set_description(""),
3665
3666 Option("osd_command_max_records", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3667 .set_default(256)
3668 .set_description(""),
3669
3670 Option("osd_max_pg_blocked_by", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3671 .set_default(16)
3672 .set_description(""),
3673
3674 Option("osd_op_log_threshold", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3675 .set_default(5)
3676 .set_description(""),
3677
3678 Option("osd_verify_sparse_read_holes", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3679 .set_default(false)
3680 .set_description(""),
3681
3682 Option("osd_backoff_on_unfound", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3683 .set_default(true)
3684 .set_description(""),
3685
3686 Option("osd_backoff_on_degraded", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3687 .set_default(false)
3688 .set_description(""),
3689
d2e6a577
FG
3690 Option("osd_backoff_on_peering", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3691 .set_default(false)
3692 .set_description(""),
3693
3efd9988
FG
3694 Option("osd_debug_shutdown", Option::TYPE_BOOL, Option::LEVEL_DEV)
3695 .set_default(false)
3696 .set_description("Turn up debug levels during shutdown"),
3697
d2e6a577
FG
3698 Option("osd_debug_crash_on_ignored_backoff", Option::TYPE_BOOL, Option::LEVEL_DEV)
3699 .set_default(false)
3700 .set_description(""),
3701
3702 Option("osd_debug_inject_dispatch_delay_probability", Option::TYPE_FLOAT, Option::LEVEL_DEV)
3703 .set_default(0)
3704 .set_description(""),
3705
3706 Option("osd_debug_inject_dispatch_delay_duration", Option::TYPE_FLOAT, Option::LEVEL_DEV)
3707 .set_default(.1)
3708 .set_description(""),
3709
3710 Option("osd_debug_drop_ping_probability", Option::TYPE_FLOAT, Option::LEVEL_DEV)
3711 .set_default(0)
3712 .set_description(""),
3713
3714 Option("osd_debug_drop_ping_duration", Option::TYPE_INT, Option::LEVEL_DEV)
3715 .set_default(0)
3716 .set_description(""),
3717
3718 Option("osd_debug_op_order", Option::TYPE_BOOL, Option::LEVEL_DEV)
3719 .set_default(false)
3720 .set_description(""),
3721
3722 Option("osd_debug_verify_missing_on_start", Option::TYPE_BOOL, Option::LEVEL_DEV)
3723 .set_default(false)
3724 .set_description(""),
3725
94b18763 3726 Option("osd_debug_verify_snaps", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577
FG
3727 .set_default(false)
3728 .set_description(""),
3729
3730 Option("osd_debug_verify_stray_on_activate", Option::TYPE_BOOL, Option::LEVEL_DEV)
3731 .set_default(false)
3732 .set_description(""),
3733
3734 Option("osd_debug_skip_full_check_in_backfill_reservation", Option::TYPE_BOOL, Option::LEVEL_DEV)
3735 .set_default(false)
3736 .set_description(""),
3737
3738 Option("osd_debug_reject_backfill_probability", Option::TYPE_FLOAT, Option::LEVEL_DEV)
3739 .set_default(0)
3740 .set_description(""),
c07f9fc5 3741
d2e6a577
FG
3742 Option("osd_debug_inject_copyfrom_error", Option::TYPE_BOOL, Option::LEVEL_DEV)
3743 .set_default(false)
3744 .set_description(""),
c07f9fc5 3745
d2e6a577
FG
3746 Option("osd_debug_misdirected_ops", Option::TYPE_BOOL, Option::LEVEL_DEV)
3747 .set_default(false)
3748 .set_description(""),
c07f9fc5 3749
d2e6a577
FG
3750 Option("osd_debug_skip_full_check_in_recovery", Option::TYPE_BOOL, Option::LEVEL_DEV)
3751 .set_default(false)
3752 .set_description(""),
c07f9fc5 3753
d2e6a577
FG
3754 Option("osd_debug_random_push_read_error", Option::TYPE_FLOAT, Option::LEVEL_DEV)
3755 .set_default(0)
3756 .set_description(""),
c07f9fc5 3757
d2e6a577
FG
3758 Option("osd_debug_verify_cached_snaps", Option::TYPE_BOOL, Option::LEVEL_DEV)
3759 .set_default(false)
3760 .set_description(""),
c07f9fc5 3761
28e407b8
AA
3762 Option("osd_debug_deep_scrub_sleep", Option::TYPE_FLOAT, Option::LEVEL_DEV)
3763 .set_default(0)
3764 .set_description("Inject an expensive sleep during deep scrub IO to make it easier to induce preemption"),
3765
11fdf7f2
TL
3766 Option("osd_debug_no_acting_change", Option::TYPE_BOOL, Option::LEVEL_DEV)
3767 .set_default(false),
3768 Option("osd_debug_no_purge_strays", Option::TYPE_BOOL, Option::LEVEL_DEV)
3769 .set_default(false),
3770
d2e6a577
FG
3771 Option("osd_enable_op_tracker", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3772 .set_default(true)
3773 .set_description(""),
c07f9fc5 3774
d2e6a577
FG
3775 Option("osd_num_op_tracker_shard", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3776 .set_default(32)
3777 .set_description(""),
c07f9fc5 3778
d2e6a577
FG
3779 Option("osd_op_history_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3780 .set_default(20)
3781 .set_description(""),
c07f9fc5 3782
d2e6a577
FG
3783 Option("osd_op_history_duration", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3784 .set_default(600)
3785 .set_description(""),
c07f9fc5 3786
d2e6a577
FG
3787 Option("osd_op_history_slow_op_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3788 .set_default(20)
3789 .set_description(""),
c07f9fc5 3790
d2e6a577
FG
3791 Option("osd_op_history_slow_op_threshold", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3792 .set_default(10.0)
3793 .set_description(""),
c07f9fc5 3794
d2e6a577
FG
3795 Option("osd_target_transaction_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3796 .set_default(30)
3797 .set_description(""),
c07f9fc5 3798
f64942e4
AA
3799 Option("osd_delete_sleep", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3800 .set_default(0)
11fdf7f2
TL
3801 .set_description("Time in seconds to sleep before next removal transaction (overrides values below)"),
3802
3803 Option("osd_delete_sleep_hdd", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3804 .set_default(5)
3805 .set_description("Time in seconds to sleep before next removal transaction for HDDs"),
3806
3807 Option("osd_delete_sleep_ssd", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3808 .set_default(0)
3809 .set_description("Time in seconds to sleep before next removal transaction for SSDs"),
3810
3811 Option("osd_delete_sleep_hybrid", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3812 .set_default(2)
3813 .set_description("Time in seconds to sleep before next removal transaction when data is on HDD and journal is on SSD"),
f64942e4 3814
d2e6a577
FG
3815 Option("osd_failsafe_full_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3816 .set_default(.97)
3817 .set_description(""),
c07f9fc5 3818
d2e6a577
FG
3819 Option("osd_fast_fail_on_connection_refused", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3820 .set_default(true)
3821 .set_description(""),
c07f9fc5 3822
d2e6a577
FG
3823 Option("osd_pg_object_context_cache_count", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3824 .set_default(64)
3825 .set_description(""),
c07f9fc5 3826
d2e6a577
FG
3827 Option("osd_tracing", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3828 .set_default(false)
3829 .set_description(""),
c07f9fc5 3830
d2e6a577
FG
3831 Option("osd_function_tracing", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3832 .set_default(false)
3833 .set_description(""),
c07f9fc5 3834
d2e6a577
FG
3835 Option("osd_fast_info", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3836 .set_default(true)
3837 .set_description(""),
c07f9fc5 3838
d2e6a577
FG
3839 Option("osd_debug_pg_log_writeout", Option::TYPE_BOOL, Option::LEVEL_DEV)
3840 .set_default(false)
3841 .set_description(""),
c07f9fc5 3842
d2e6a577
FG
3843 Option("osd_loop_before_reset_tphandle", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3844 .set_default(64)
3845 .set_description(""),
c07f9fc5 3846
d2e6a577
FG
3847 Option("threadpool_default_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3848 .set_default(60)
3849 .set_description(""),
c07f9fc5 3850
d2e6a577
FG
3851 Option("threadpool_empty_queue_max_wait", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3852 .set_default(2)
3853 .set_description(""),
c07f9fc5 3854
d2e6a577
FG
3855 Option("leveldb_log_to_ceph_log", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3856 .set_default(true)
3857 .set_description(""),
c07f9fc5 3858
11fdf7f2 3859 Option("leveldb_write_buffer_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 3860 .set_default(8_M)
d2e6a577 3861 .set_description(""),
c07f9fc5 3862
11fdf7f2 3863 Option("leveldb_cache_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 3864 .set_default(128_M)
d2e6a577 3865 .set_description(""),
c07f9fc5 3866
11fdf7f2 3867 Option("leveldb_block_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577
FG
3868 .set_default(0)
3869 .set_description(""),
c07f9fc5 3870
d2e6a577
FG
3871 Option("leveldb_bloom_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3872 .set_default(0)
3873 .set_description(""),
c07f9fc5 3874
d2e6a577
FG
3875 Option("leveldb_max_open_files", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3876 .set_default(0)
3877 .set_description(""),
c07f9fc5 3878
d2e6a577
FG
3879 Option("leveldb_compression", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3880 .set_default(true)
3881 .set_description(""),
c07f9fc5 3882
d2e6a577
FG
3883 Option("leveldb_paranoid", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3884 .set_default(false)
3885 .set_description(""),
3886
3887 Option("leveldb_log", Option::TYPE_STR, Option::LEVEL_ADVANCED)
3888 .set_default("/dev/null")
3889 .set_description(""),
3890
3891 Option("leveldb_compact_on_mount", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3892 .set_default(false)
3893 .set_description(""),
3894
3895 Option("kinetic_host", Option::TYPE_STR, Option::LEVEL_ADVANCED)
3896 .set_default("")
3897 .set_description(""),
3898
3899 Option("kinetic_port", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3900 .set_default(8123)
3901 .set_description(""),
3902
3903 Option("kinetic_user_id", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3904 .set_default(1)
3905 .set_description(""),
3906
3907 Option("kinetic_hmac_key", Option::TYPE_STR, Option::LEVEL_ADVANCED)
3908 .set_default("asdfasdf")
3909 .set_description(""),
3910
3911 Option("kinetic_use_ssl", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3912 .set_default(false)
3913 .set_description(""),
3914
d2e6a577
FG
3915 Option("rocksdb_log_to_ceph_log", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3916 .set_default(true)
3917 .set_description(""),
3918
11fdf7f2 3919 Option("rocksdb_cache_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
f64942e4 3920 .set_default(512_M)
d2e6a577
FG
3921 .set_description(""),
3922
3923 Option("rocksdb_cache_row_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3924 .set_default(0)
3925 .set_description(""),
3926
3927 Option("rocksdb_cache_shard_bits", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3928 .set_default(4)
3929 .set_description(""),
3930
3931 Option("rocksdb_cache_type", Option::TYPE_STR, Option::LEVEL_ADVANCED)
91327a77 3932 .set_default("binned_lru")
d2e6a577
FG
3933 .set_description(""),
3934
11fdf7f2 3935 Option("rocksdb_block_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 3936 .set_default(4_K)
d2e6a577
FG
3937 .set_description(""),
3938
3939 Option("rocksdb_perf", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3940 .set_default(false)
3941 .set_description(""),
3942
3943 Option("rocksdb_collect_compaction_stats", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3944 .set_default(false)
3945 .set_description(""),
3946
3947 Option("rocksdb_collect_extended_stats", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3948 .set_default(false)
3949 .set_description(""),
3950
3951 Option("rocksdb_collect_memory_stats", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3952 .set_default(false)
3953 .set_description(""),
3954
3955 Option("rocksdb_enable_rmrange", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
494da23a
TL
3956 .set_default(true)
3957 .set_description("Refer to github.com/facebook/rocksdb/wiki/DeleteRange-Implementation"),
3958
3959 Option("rocksdb_max_items_rmrange", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3960 .set_default(1024)
3961 .set_description("Delete Range will be called if number of keys exceeded, must enable rocksdb_enable_rmrange first")
3962 .add_see_also("rocksdb_enable_rmrange"),
d2e6a577
FG
3963
3964 Option("rocksdb_bloom_bits_per_key", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3965 .set_default(20)
3966 .set_description("Number of bits per key to use for RocksDB's bloom filters.")
3967 .set_long_description("RocksDB bloom filters can be used to quickly answer the question of whether or not a key may exist or definitely does not exist in a given RocksDB SST file without having to read all keys into memory. Using a higher bit value decreases the likelihood of false positives at the expense of additional disk space and memory consumption when the filter is loaded into RAM. The current default value of 20 was found to provide significant performance gains when getattr calls are made (such as during new object creation in bluestore) without significant memory overhead or cache pollution when combined with rocksdb partitioned index filters. See: https://github.com/facebook/rocksdb/wiki/Partitioned-Index-Filters for more information."),
3968
3969 Option("rocksdb_cache_index_and_filter_blocks", Option::TYPE_BOOL, Option::LEVEL_DEV)
3970 .set_default(true)
3971 .set_description("Whether to cache indices and filters in block cache")
3972 .set_long_description("By default RocksDB will load an SST file's index and bloom filters into memory when it is opened and remove them from memory when an SST file is closed. Thus, memory consumption by indices and bloom filters is directly tied to the number of concurrent SST files allowed to be kept open. This option instead stores cached indicies and filters in the block cache where they directly compete with other cached data. By default we set this option to true to better account for and bound rocksdb memory usage and keep filters in memory even when an SST file is closed."),
3973
3974 Option("rocksdb_cache_index_and_filter_blocks_with_high_priority", Option::TYPE_BOOL, Option::LEVEL_DEV)
3975 .set_default(true)
3976 .set_description("Whether to cache indices and filters in the block cache with high priority")
3977 .set_long_description("A downside of setting rocksdb_cache_index_and_filter_blocks to true is that regular data can push indices and filters out of memory. Setting this option to true means they are cached with higher priority than other data and should typically stay in the block cache."),
3978
3979 Option("rocksdb_pin_l0_filter_and_index_blocks_in_cache", Option::TYPE_BOOL, Option::LEVEL_DEV)
3980 .set_default(true)
3981 .set_description("Whether to pin Level 0 indices and bloom filters in the block cache")
3982 .set_long_description("A downside of setting rocksdb_cache_index_and_filter_blocks to true is that regular data can push indices and filters out of memory. Setting this option to true means that level 0 SST files will always have their indices and filters pinned in the block cache."),
3983
3984 Option("rocksdb_index_type", Option::TYPE_STR, Option::LEVEL_DEV)
3985 .set_default("binary_search")
3986 .set_description("Type of index for SST files: binary_search, hash_search, two_level")
3987 .set_long_description("This option controls the table index type. binary_search is a space efficient index block that is optimized for block-search-based index. hash_search may improve prefix lookup performance at the expense of higher disk and memory usage and potentially slower compactions. two_level is an experimental index type that uses two binary search indexes and works in conjunction with partition filters. See: http://rocksdb.org/blog/2017/05/12/partitioned-index-filter.html"),
3988
3989 Option("rocksdb_partition_filters", Option::TYPE_BOOL, Option::LEVEL_DEV)
3990 .set_default(false)
3991 .set_description("(experimental) partition SST index/filters into smaller blocks")
3992 .set_long_description("This is an experimental option for rocksdb that works in conjunction with two_level indices to avoid having to keep the entire filter/index in cache when cache_index_and_filter_blocks is true. The idea is to keep a much smaller top-level index in heap/cache and then opportunistically cache the lower level indices. See: https://github.com/facebook/rocksdb/wiki/Partitioned-Index-Filters"),
3993
11fdf7f2 3994 Option("rocksdb_metadata_block_size", Option::TYPE_SIZE, Option::LEVEL_DEV)
b32b8144 3995 .set_default(4_K)
d2e6a577
FG
3996 .set_description("The block size for index partitions. (0 = rocksdb default)"),
3997
3998 Option("mon_rocksdb_options", Option::TYPE_STR, Option::LEVEL_ADVANCED)
28e407b8
AA
3999 .set_default("write_buffer_size=33554432,"
4000 "compression=kNoCompression,"
4001 "level_compaction_dynamic_level_bytes=true")
d2e6a577
FG
4002 .set_description(""),
4003
4004 Option("osd_client_op_priority", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4005 .set_default(63)
4006 .set_description(""),
4007
4008 Option("osd_recovery_op_priority", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4009 .set_default(3)
11fdf7f2
TL
4010 .set_description("Priority to use for recovery operations if not specified for the pool"),
4011
4012 Option("osd_peering_op_priority", Option::TYPE_UINT, Option::LEVEL_DEV)
4013 .set_default(255)
d2e6a577
FG
4014 .set_description(""),
4015
4016 Option("osd_snap_trim_priority", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4017 .set_default(5)
4018 .set_description(""),
4019
11fdf7f2
TL
4020 Option("osd_snap_trim_cost", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
4021 .set_default(1<<20)
4022 .set_description(""),
4023
4024 Option("osd_pg_delete_priority", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4025 .set_default(5)
4026 .set_description(""),
4027
4028 Option("osd_pg_delete_cost", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577
FG
4029 .set_default(1<<20)
4030 .set_description(""),
4031
4032 Option("osd_scrub_priority", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4033 .set_default(5)
28e407b8 4034 .set_description("Priority for scrub operations in work queue"),
d2e6a577 4035
11fdf7f2 4036 Option("osd_scrub_cost", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577 4037 .set_default(50<<20)
28e407b8 4038 .set_description("Cost for scrub operations in work queue"),
d2e6a577
FG
4039
4040 Option("osd_requested_scrub_priority", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4041 .set_default(120)
4042 .set_description(""),
4043
4044 Option("osd_recovery_priority", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4045 .set_default(5)
11fdf7f2
TL
4046 .set_description("Priority of recovery in the work queue")
4047 .set_long_description("Not related to a pool's recovery_priority"),
d2e6a577 4048
11fdf7f2 4049 Option("osd_recovery_cost", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577
FG
4050 .set_default(20<<20)
4051 .set_description(""),
4052
4053 Option("osd_recovery_op_warn_multiple", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4054 .set_default(16)
4055 .set_description(""),
4056
4057 Option("osd_mon_shutdown_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
4058 .set_default(5)
4059 .set_description(""),
4060
4061 Option("osd_shutdown_pgref_assert", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4062 .set_default(false)
4063 .set_description(""),
4064
11fdf7f2 4065 Option("osd_max_object_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 4066 .set_default(128_M)
d2e6a577
FG
4067 .set_description(""),
4068
4069 Option("osd_max_object_name_len", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4070 .set_default(2048)
4071 .set_description(""),
4072
4073 Option("osd_max_object_namespace_len", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4074 .set_default(256)
4075 .set_description(""),
4076
4077 Option("osd_max_attr_name_len", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4078 .set_default(100)
4079 .set_description(""),
4080
4081 Option("osd_max_attr_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4082 .set_default(0)
4083 .set_description(""),
4084
4085 Option("osd_max_omap_entries_per_request", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4086 .set_default(131072)
4087 .set_description(""),
c07f9fc5 4088
11fdf7f2
TL
4089 Option("osd_max_omap_bytes_per_request", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
4090 .set_default(1_G)
d2e6a577 4091 .set_description(""),
c07f9fc5 4092
d2e6a577 4093 Option("osd_objectstore", Option::TYPE_STR, Option::LEVEL_ADVANCED)
11fdf7f2
TL
4094 .set_default("bluestore")
4095 .set_enum_allowed({"bluestore", "filestore", "memstore", "kstore"})
4096 .set_flag(Option::FLAG_CREATE)
4097 .set_description("backend type for an OSD (like filestore or bluestore)"),
c07f9fc5 4098
d2e6a577
FG
4099 Option("osd_objectstore_tracing", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4100 .set_default(false)
4101 .set_description(""),
c07f9fc5 4102
d2e6a577
FG
4103 Option("osd_objectstore_fuse", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4104 .set_default(false)
4105 .set_description(""),
c07f9fc5 4106
d2e6a577
FG
4107 Option("osd_bench_small_size_max_iops", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4108 .set_default(100)
4109 .set_description(""),
c07f9fc5 4110
11fdf7f2
TL
4111 Option("osd_bench_large_size_max_throughput", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
4112 .set_default(100_M)
d2e6a577 4113 .set_description(""),
c07f9fc5 4114
11fdf7f2
TL
4115 Option("osd_bench_max_block_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
4116 .set_default(64_M)
d2e6a577 4117 .set_description(""),
c07f9fc5 4118
d2e6a577
FG
4119 Option("osd_bench_duration", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4120 .set_default(30)
4121 .set_description(""),
c07f9fc5 4122
d2e6a577
FG
4123 Option("osd_blkin_trace_all", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4124 .set_default(false)
4125 .set_description(""),
c07f9fc5 4126
d2e6a577
FG
4127 Option("osdc_blkin_trace_all", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4128 .set_default(false)
4129 .set_description(""),
c07f9fc5 4130
d2e6a577
FG
4131 Option("osd_discard_disconnected_ops", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4132 .set_default(true)
4133 .set_description(""),
c07f9fc5 4134
11fdf7f2 4135 Option("osd_memory_target", Option::TYPE_SIZE, Option::LEVEL_BASIC)
91327a77
AA
4136 .set_default(4_G)
4137 .add_see_also("bluestore_cache_autotune")
4138 .set_description("When tcmalloc and cache autotuning is enabled, try to keep this many bytes mapped in memory."),
4139
11fdf7f2
TL
4140 Option("osd_memory_target_cgroup_limit_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
4141 .set_default(0.8)
4142 .set_min_max(0.0, 1.0)
4143 .add_see_also("osd_memory_target")
4144 .set_description("Set the default value for osd_memory_target to the cgroup memory limit (if set) times this value")
4145 .set_long_description("A value of 0 disables this feature."),
4146
4147 Option("osd_memory_base", Option::TYPE_SIZE, Option::LEVEL_DEV)
91327a77
AA
4148 .set_default(768_M)
4149 .add_see_also("bluestore_cache_autotune")
4150 .set_description("When tcmalloc and cache autotuning is enabled, estimate the minimum amount of memory in bytes the OSD will need."),
4151
4152 Option("osd_memory_expected_fragmentation", Option::TYPE_FLOAT, Option::LEVEL_DEV)
4153 .set_default(0.15)
f64942e4 4154 .set_min_max(0.0, 1.0)
91327a77
AA
4155 .add_see_also("bluestore_cache_autotune")
4156 .set_description("When tcmalloc and cache autotuning is enabled, estimate the percent of memory fragmentation."),
4157
11fdf7f2 4158 Option("osd_memory_cache_min", Option::TYPE_SIZE, Option::LEVEL_DEV)
91327a77
AA
4159 .set_default(128_M)
4160 .add_see_also("bluestore_cache_autotune")
4161 .set_description("When tcmalloc and cache autotuning is enabled, set the minimum amount of memory used for caches."),
4162
4163 Option("osd_memory_cache_resize_interval", Option::TYPE_FLOAT, Option::LEVEL_DEV)
4164 .set_default(1)
4165 .add_see_also("bluestore_cache_autotune")
4166 .set_description("When tcmalloc and cache autotuning is enabled, wait this many seconds between resizing caches."),
4167
11fdf7f2 4168 Option("memstore_device_bytes", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 4169 .set_default(1_G)
d2e6a577 4170 .set_description(""),
c07f9fc5 4171
d2e6a577 4172 Option("memstore_page_set", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
35e4c445 4173 .set_default(false)
d2e6a577 4174 .set_description(""),
c07f9fc5 4175
11fdf7f2 4176 Option("memstore_page_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 4177 .set_default(64_K)
d2e6a577 4178 .set_description(""),
c07f9fc5 4179
d2e6a577
FG
4180 Option("objectstore_blackhole", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4181 .set_default(false)
4182 .set_description(""),
c07f9fc5 4183
d2e6a577
FG
4184 // --------------------------
4185 // bluestore
c07f9fc5 4186
d2e6a577
FG
4187 Option("bdev_debug_inflight_ios", Option::TYPE_BOOL, Option::LEVEL_DEV)
4188 .set_default(false)
4189 .set_description(""),
c07f9fc5 4190
d2e6a577
FG
4191 Option("bdev_inject_crash", Option::TYPE_INT, Option::LEVEL_DEV)
4192 .set_default(0)
4193 .set_description(""),
c07f9fc5 4194
d2e6a577
FG
4195 Option("bdev_inject_crash_flush_delay", Option::TYPE_INT, Option::LEVEL_DEV)
4196 .set_default(2)
4197 .set_description(""),
c07f9fc5 4198
d2e6a577
FG
4199 Option("bdev_aio", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4200 .set_default(true)
4201 .set_description(""),
c07f9fc5 4202
d2e6a577
FG
4203 Option("bdev_aio_poll_ms", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4204 .set_default(250)
4205 .set_description(""),
c07f9fc5 4206
d2e6a577
FG
4207 Option("bdev_aio_max_queue_depth", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4208 .set_default(1024)
4209 .set_description(""),
c07f9fc5 4210
d2e6a577
FG
4211 Option("bdev_aio_reap_max", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4212 .set_default(16)
4213 .set_description(""),
c07f9fc5 4214
11fdf7f2 4215 Option("bdev_block_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 4216 .set_default(4_K)
d2e6a577 4217 .set_description(""),
c07f9fc5 4218
d2e6a577
FG
4219 Option("bdev_debug_aio", Option::TYPE_BOOL, Option::LEVEL_DEV)
4220 .set_default(false)
4221 .set_description(""),
c07f9fc5 4222
d2e6a577
FG
4223 Option("bdev_debug_aio_suicide_timeout", Option::TYPE_FLOAT, Option::LEVEL_DEV)
4224 .set_default(60.0)
4225 .set_description(""),
c07f9fc5 4226
11fdf7f2
TL
4227 Option("bdev_debug_aio_log_age", Option::TYPE_FLOAT, Option::LEVEL_DEV)
4228 .set_default(5.0)
4229 .set_description(""),
4230
d2e6a577
FG
4231 Option("bdev_nvme_unbind_from_kernel", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4232 .set_default(false)
4233 .set_description(""),
c07f9fc5 4234
d2e6a577
FG
4235 Option("bdev_nvme_retry_count", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4236 .set_default(-1)
4237 .set_description(""),
c07f9fc5 4238
11fdf7f2
TL
4239 Option("bdev_enable_discard", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4240 .set_default(false)
4241 .set_description(""),
4242
4243 Option("bdev_async_discard", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4244 .set_default(false)
4245 .set_description(""),
4246
4247 Option("bluefs_alloc_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 4248 .set_default(1_M)
d2e6a577
FG
4249 .set_description(""),
4250
11fdf7f2 4251 Option("bluefs_max_prefetch", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 4252 .set_default(1_M)
d2e6a577
FG
4253 .set_description(""),
4254
11fdf7f2 4255 Option("bluefs_min_log_runway", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 4256 .set_default(1_M)
d2e6a577
FG
4257 .set_description(""),
4258
11fdf7f2 4259 Option("bluefs_max_log_runway", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577
FG
4260 .set_default(4194304)
4261 .set_description(""),
4262
4263 Option("bluefs_log_compact_min_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
4264 .set_default(5.0)
4265 .set_description(""),
4266
11fdf7f2 4267 Option("bluefs_log_compact_min_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 4268 .set_default(16_M)
d2e6a577
FG
4269 .set_description(""),
4270
11fdf7f2 4271 Option("bluefs_min_flush_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 4272 .set_default(512_K)
d2e6a577
FG
4273 .set_description(""),
4274
4275 Option("bluefs_compact_log_sync", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4276 .set_default(false)
4277 .set_description(""),
4278
4279 Option("bluefs_buffered_io", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
11fdf7f2 4280 .set_default(true)
d2e6a577
FG
4281 .set_description(""),
4282
4283 Option("bluefs_sync_write", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4284 .set_default(false)
4285 .set_description(""),
4286
4287 Option("bluefs_allocator", Option::TYPE_STR, Option::LEVEL_DEV)
11fdf7f2 4288 .set_default("bitmap")
d2e6a577
FG
4289 .set_description(""),
4290
4291 Option("bluefs_preextend_wal_files", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4292 .set_default(false)
4293 .set_description(""),
4294
4295 Option("bluestore_bluefs", Option::TYPE_BOOL, Option::LEVEL_DEV)
4296 .set_default(true)
11fdf7f2 4297 .set_flag(Option::FLAG_CREATE)
d2e6a577
FG
4298 .set_description("Use BlueFS to back rocksdb")
4299 .set_long_description("BlueFS allows rocksdb to share the same physical device(s) as the rest of BlueStore. It should be used in all cases unless testing/developing an alternative metadata database for BlueStore."),
4300
4301 Option("bluestore_bluefs_env_mirror", Option::TYPE_BOOL, Option::LEVEL_DEV)
4302 .set_default(false)
11fdf7f2 4303 .set_flag(Option::FLAG_CREATE)
d2e6a577
FG
4304 .set_description("Mirror bluefs data to file system for testing/validation"),
4305
11fdf7f2 4306 Option("bluestore_bluefs_min", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 4307 .set_default(1_G)
d2e6a577
FG
4308 .set_description("minimum disk space allocated to BlueFS (e.g., at mkfs)"),
4309
11fdf7f2
TL
4310 Option("bluestore_bluefs_min_free", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
4311 .set_default(1_G)
3efd9988
FG
4312 .set_description("minimum free space allocated to BlueFS"),
4313
d2e6a577
FG
4314 Option("bluestore_bluefs_min_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
4315 .set_default(.02)
4316 .set_description("Minimum fraction of free space devoted to BlueFS"),
4317
4318 Option("bluestore_bluefs_max_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
4319 .set_default(.90)
4320 .set_description("Maximum fraction of free storage devoted to BlueFS"),
4321
4322 Option("bluestore_bluefs_gift_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
4323 .set_default(.02)
4324 .set_description("Maximum fraction of free space to give to BlueFS at once"),
4325
4326 Option("bluestore_bluefs_reclaim_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
4327 .set_default(.20)
4328 .set_description("Maximum fraction of free space to reclaim from BlueFS at once"),
4329
4330 Option("bluestore_bluefs_balance_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
4331 .set_default(1)
4332 .set_description("How frequently (in seconds) to balance free space between BlueFS and BlueStore"),
4333
11fdf7f2 4334 Option("bluestore_bluefs_alloc_failure_dump_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
f64942e4 4335 .set_default(0)
11fdf7f2
TL
4336 .set_description("How frequently (in seconds) to dump allocator on"
4337 "BlueFS space allocation failure"),
4338
4339 Option("bluestore_bluefs_db_compatibility", Option::TYPE_BOOL, Option::LEVEL_DEV)
4340 .set_default(true)
4341 .set_description("Sync db with legacy bluefs extents info")
4342 .set_long_description("Enforces db sync with legacy bluefs extents information on close."
4343 " Enables downgrades to pre-nautilus releases"),
f64942e4 4344
11fdf7f2 4345 Option("bluestore_spdk_mem", Option::TYPE_SIZE, Option::LEVEL_DEV)
d2e6a577 4346 .set_default(512)
11fdf7f2
TL
4347 .set_description("Amount of dpdk memory size in MB")
4348 .set_long_description("If running multiple SPDK instances per node, you must specify the amount of dpdk memory size in MB each instance will use, to make sure each instance uses its own dpdk memory"),
d2e6a577
FG
4349
4350 Option("bluestore_spdk_coremask", Option::TYPE_STR, Option::LEVEL_DEV)
11fdf7f2
TL
4351 .set_default("0x1")
4352 .set_description("A hexadecimal bit mask of the cores to run on. Note the core numbering can change between platforms and should be determined beforehand"),
d2e6a577
FG
4353
4354 Option("bluestore_spdk_max_io_completion", Option::TYPE_UINT, Option::LEVEL_DEV)
4355 .set_default(0)
11fdf7f2
TL
4356 .set_description("Maximal I/Os to be batched completed while checking queue pair completions, 0 means let spdk library determine it"),
4357
4358 Option("bluestore_spdk_io_sleep", Option::TYPE_UINT, Option::LEVEL_DEV)
4359 .set_default(5)
4360 .set_description("Time period to wait if there is no completed I/O from polling"),
d2e6a577
FG
4361
4362 Option("bluestore_block_path", Option::TYPE_STR, Option::LEVEL_DEV)
4363 .set_default("")
11fdf7f2 4364 .set_flag(Option::FLAG_CREATE)
d2e6a577
FG
4365 .set_description("Path to block device/file"),
4366
11fdf7f2 4367 Option("bluestore_block_size", Option::TYPE_SIZE, Option::LEVEL_DEV)
b32b8144 4368 .set_default(10_G)
11fdf7f2 4369 .set_flag(Option::FLAG_CREATE)
d2e6a577
FG
4370 .set_description("Size of file to create for backing bluestore"),
4371
4372 Option("bluestore_block_create", Option::TYPE_BOOL, Option::LEVEL_DEV)
4373 .set_default(true)
11fdf7f2 4374 .set_flag(Option::FLAG_CREATE)
d2e6a577
FG
4375 .set_description("Create bluestore_block_path if it doesn't exist")
4376 .add_see_also("bluestore_block_path").add_see_also("bluestore_block_size"),
4377
4378 Option("bluestore_block_db_path", Option::TYPE_STR, Option::LEVEL_DEV)
4379 .set_default("")
11fdf7f2 4380 .set_flag(Option::FLAG_CREATE)
d2e6a577
FG
4381 .set_description("Path for db block device"),
4382
4383 Option("bluestore_block_db_size", Option::TYPE_UINT, Option::LEVEL_DEV)
4384 .set_default(0)
11fdf7f2 4385 .set_flag(Option::FLAG_CREATE)
d2e6a577
FG
4386 .set_description("Size of file to create for bluestore_block_db_path"),
4387
4388 Option("bluestore_block_db_create", Option::TYPE_BOOL, Option::LEVEL_DEV)
4389 .set_default(false)
11fdf7f2 4390 .set_flag(Option::FLAG_CREATE)
d2e6a577
FG
4391 .set_description("Create bluestore_block_db_path if it doesn't exist")
4392 .add_see_also("bluestore_block_db_path")
4393 .add_see_also("bluestore_block_db_size"),
4394
4395 Option("bluestore_block_wal_path", Option::TYPE_STR, Option::LEVEL_DEV)
4396 .set_default("")
11fdf7f2 4397 .set_flag(Option::FLAG_CREATE)
d2e6a577
FG
4398 .set_description("Path to block device/file backing bluefs wal"),
4399
11fdf7f2 4400 Option("bluestore_block_wal_size", Option::TYPE_SIZE, Option::LEVEL_DEV)
b32b8144 4401 .set_default(96_M)
11fdf7f2 4402 .set_flag(Option::FLAG_CREATE)
d2e6a577
FG
4403 .set_description("Size of file to create for bluestore_block_wal_path"),
4404
4405 Option("bluestore_block_wal_create", Option::TYPE_BOOL, Option::LEVEL_DEV)
4406 .set_default(false)
11fdf7f2 4407 .set_flag(Option::FLAG_CREATE)
d2e6a577
FG
4408 .set_description("Create bluestore_block_wal_path if it doesn't exist")
4409 .add_see_also("bluestore_block_wal_path")
4410 .add_see_also("bluestore_block_wal_size"),
4411
4412 Option("bluestore_block_preallocate_file", Option::TYPE_BOOL, Option::LEVEL_DEV)
4413 .set_default(false)
11fdf7f2 4414 .set_flag(Option::FLAG_CREATE)
d2e6a577
FG
4415 .set_description("Preallocate file created via bluestore_block*_create"),
4416
11fdf7f2
TL
4417 Option("bluestore_ignore_data_csum", Option::TYPE_BOOL, Option::LEVEL_DEV)
4418 .set_default(false)
4419 .set_flag(Option::FLAG_RUNTIME)
4420 .set_description("Ignore checksum errors on read and do not generate an EIO error"),
4421
d2e6a577
FG
4422 Option("bluestore_csum_type", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4423 .set_default("crc32c")
4424 .set_enum_allowed({"none", "crc32c", "crc32c_16", "crc32c_8", "xxhash32", "xxhash64"})
11fdf7f2 4425 .set_flag(Option::FLAG_RUNTIME)
d2e6a577
FG
4426 .set_description("Default checksum algorithm to use")
4427 .set_long_description("crc32c, xxhash32, and xxhash64 are available. The _16 and _8 variants use only a subset of the bits for more compact (but less reliable) checksumming."),
4428
f64942e4
AA
4429 Option("bluestore_retry_disk_reads", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4430 .set_default(3)
4431 .set_min_max(0, 255)
11fdf7f2 4432 .set_flag(Option::FLAG_RUNTIME)
f64942e4
AA
4433 .set_description("Number of read retries on checksum validation error")
4434 .set_long_description("Retries to read data from the disk this many times when checksum validation fails to handle spurious read errors gracefully."),
4435
d2e6a577
FG
4436 Option("bluestore_min_alloc_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4437 .set_default(0)
11fdf7f2 4438 .set_flag(Option::FLAG_CREATE)
d2e6a577
FG
4439 .set_description("Minimum allocation size to allocate for an object")
4440 .set_long_description("A smaller allocation size generally means less data is read and then rewritten when a copy-on-write operation is triggered (e.g., when writing to something that was recently snapshotted). Similarly, less data is journaled before performing an overwrite (writes smaller than min_alloc_size must first pass through the BlueStore journal). Larger values of min_alloc_size reduce the amount of metadata required to describe the on-disk layout and reduce overall fragmentation."),
4441
11fdf7f2 4442 Option("bluestore_min_alloc_size_hdd", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 4443 .set_default(64_K)
11fdf7f2
TL
4444 .set_flag(Option::FLAG_CREATE)
4445 .set_description("Default min_alloc_size value for rotational media")
4446 .add_see_also("bluestore_min_alloc_size"),
d2e6a577 4447
11fdf7f2 4448 Option("bluestore_min_alloc_size_ssd", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 4449 .set_default(16_K)
11fdf7f2
TL
4450 .set_flag(Option::FLAG_CREATE)
4451 .set_description("Default min_alloc_size value for non-rotational (solid state) media")
4452 .add_see_also("bluestore_min_alloc_size"),
d2e6a577 4453
11fdf7f2 4454 Option("bluestore_max_alloc_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577 4455 .set_default(0)
11fdf7f2 4456 .set_flag(Option::FLAG_CREATE)
d2e6a577
FG
4457 .set_description("Maximum size of a single allocation (0 for no max)"),
4458
11fdf7f2 4459 Option("bluestore_prefer_deferred_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577 4460 .set_default(0)
11fdf7f2 4461 .set_flag(Option::FLAG_RUNTIME)
d2e6a577
FG
4462 .set_description("Writes smaller than this size will be written to the journal and then asynchronously written to the device. This can be beneficial when using rotational media where seeks are expensive, and is helpful both with and without solid state journal/wal devices."),
4463
11fdf7f2 4464 Option("bluestore_prefer_deferred_size_hdd", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577 4465 .set_default(32768)
11fdf7f2
TL
4466 .set_flag(Option::FLAG_RUNTIME)
4467 .set_description("Default bluestore_prefer_deferred_size for rotational media")
4468 .add_see_also("bluestore_prefer_deferred_size"),
d2e6a577 4469
11fdf7f2 4470 Option("bluestore_prefer_deferred_size_ssd", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577 4471 .set_default(0)
11fdf7f2
TL
4472 .set_flag(Option::FLAG_RUNTIME)
4473 .set_description("Default bluestore_prefer_deferred_size for non-rotational (solid state) media")
4474 .add_see_also("bluestore_prefer_deferred_size"),
d2e6a577
FG
4475
4476 Option("bluestore_compression_mode", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4477 .set_default("none")
4478 .set_enum_allowed({"none", "passive", "aggressive", "force"})
11fdf7f2 4479 .set_flag(Option::FLAG_RUNTIME)
d2e6a577
FG
4480 .set_description("Default policy for using compression when pool does not specify")
4481 .set_long_description("'none' means never use compression. 'passive' means use compression when clients hint that data is compressible. 'aggressive' means use compression unless clients hint that data is not compressible. This option is used when the per-pool property for the compression mode is not present."),
4482
4483 Option("bluestore_compression_algorithm", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4484 .set_default("snappy")
4485 .set_enum_allowed({"", "snappy", "zlib", "zstd", "lz4"})
11fdf7f2 4486 .set_flag(Option::FLAG_RUNTIME)
d2e6a577
FG
4487 .set_description("Default compression algorithm to use when writing object data")
4488 .set_long_description("This controls the default compressor to use (if any) if the per-pool property is not set. Note that zstd is *not* recommended for bluestore due to high CPU overhead when compressing small amounts of data."),
4489
11fdf7f2 4490 Option("bluestore_compression_min_blob_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577 4491 .set_default(0)
11fdf7f2
TL
4492 .set_flag(Option::FLAG_RUNTIME)
4493 .set_description("Maximum chunk size to apply compression to when random access is expected for an object.")
4494 .set_long_description("Chunks larger than this are broken into smaller chunks before being compressed"),
d2e6a577 4495
11fdf7f2 4496 Option("bluestore_compression_min_blob_size_hdd", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 4497 .set_default(128_K)
11fdf7f2
TL
4498 .set_flag(Option::FLAG_RUNTIME)
4499 .set_description("Default value of bluestore_compression_min_blob_size for rotational media")
4500 .add_see_also("bluestore_compression_min_blob_size"),
d2e6a577 4501
11fdf7f2 4502 Option("bluestore_compression_min_blob_size_ssd", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 4503 .set_default(8_K)
11fdf7f2
TL
4504 .set_flag(Option::FLAG_RUNTIME)
4505 .set_description("Default value of bluestore_compression_min_blob_size for non-rotational (solid state) media")
4506 .add_see_also("bluestore_compression_min_blob_size"),
d2e6a577 4507
11fdf7f2 4508 Option("bluestore_compression_max_blob_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577 4509 .set_default(0)
11fdf7f2
TL
4510 .set_flag(Option::FLAG_RUNTIME)
4511 .set_description("Maximum chunk size to apply compression to when non-random access is expected for an object.")
4512 .set_long_description("Chunks larger than this are broken into smaller chunks before being compressed"),
d2e6a577 4513
11fdf7f2 4514 Option("bluestore_compression_max_blob_size_hdd", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 4515 .set_default(512_K)
11fdf7f2
TL
4516 .set_flag(Option::FLAG_RUNTIME)
4517 .set_description("Default value of bluestore_compression_max_blob_size for rotational media")
4518 .add_see_also("bluestore_compression_max_blob_size"),
d2e6a577 4519
11fdf7f2 4520 Option("bluestore_compression_max_blob_size_ssd", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 4521 .set_default(64_K)
11fdf7f2
TL
4522 .set_flag(Option::FLAG_RUNTIME)
4523 .set_description("Default value of bluestore_compression_max_blob_size for non-rotational (solid state) media")
4524 .add_see_also("bluestore_compression_max_blob_size"),
d2e6a577
FG
4525
4526 Option("bluestore_gc_enable_blob_threshold", Option::TYPE_INT, Option::LEVEL_DEV)
4527 .set_default(0)
11fdf7f2 4528 .set_flag(Option::FLAG_RUNTIME)
d2e6a577
FG
4529 .set_description(""),
4530
4531 Option("bluestore_gc_enable_total_threshold", Option::TYPE_INT, Option::LEVEL_DEV)
4532 .set_default(0)
11fdf7f2 4533 .set_flag(Option::FLAG_RUNTIME)
d2e6a577
FG
4534 .set_description(""),
4535
11fdf7f2 4536 Option("bluestore_max_blob_size", Option::TYPE_SIZE, Option::LEVEL_DEV)
d2e6a577 4537 .set_default(0)
11fdf7f2
TL
4538 .set_flag(Option::FLAG_RUNTIME)
4539 .set_description("")
4540 .set_long_description("Bluestore blobs are collections of extents (ie on-disk data) originating from one or more objects. Blobs can be compressed, typically have checksum data, may be overwritten, may be shared (with an extent ref map), or split. This setting controls the maximum size a blob is allowed to be."),
d2e6a577 4541
11fdf7f2 4542 Option("bluestore_max_blob_size_hdd", Option::TYPE_SIZE, Option::LEVEL_DEV)
b32b8144 4543 .set_default(512_K)
11fdf7f2
TL
4544 .set_flag(Option::FLAG_RUNTIME)
4545 .set_description("")
4546 .add_see_also("bluestore_max_blob_size"),
d2e6a577 4547
11fdf7f2 4548 Option("bluestore_max_blob_size_ssd", Option::TYPE_SIZE, Option::LEVEL_DEV)
b32b8144 4549 .set_default(64_K)
11fdf7f2
TL
4550 .set_flag(Option::FLAG_RUNTIME)
4551 .set_description("")
4552 .add_see_also("bluestore_max_blob_size"),
d2e6a577
FG
4553
4554 Option("bluestore_compression_required_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
4555 .set_default(.875)
11fdf7f2 4556 .set_flag(Option::FLAG_RUNTIME)
d2e6a577
FG
4557 .set_description("Compression ratio required to store compressed data")
4558 .set_long_description("If we compress data and get less than this we discard the result and store the original uncompressed data."),
4559
11fdf7f2 4560 Option("bluestore_extent_map_shard_max_size", Option::TYPE_SIZE, Option::LEVEL_DEV)
d2e6a577
FG
4561 .set_default(1200)
4562 .set_description("Max size (bytes) for a single extent map shard before splitting"),
4563
11fdf7f2 4564 Option("bluestore_extent_map_shard_target_size", Option::TYPE_SIZE, Option::LEVEL_DEV)
d2e6a577
FG
4565 .set_default(500)
4566 .set_description("Target size (bytes) for a single extent map shard"),
4567
11fdf7f2 4568 Option("bluestore_extent_map_shard_min_size", Option::TYPE_SIZE, Option::LEVEL_DEV)
d2e6a577
FG
4569 .set_default(150)
4570 .set_description("Min size (bytes) for a single extent map shard before merging"),
4571
4572 Option("bluestore_extent_map_shard_target_size_slop", Option::TYPE_FLOAT, Option::LEVEL_DEV)
4573 .set_default(.2)
4574 .set_description("Ratio above/below target for a shard when trying to align to an existing extent or blob boundary"),
4575
11fdf7f2 4576 Option("bluestore_extent_map_inline_shard_prealloc_size", Option::TYPE_SIZE, Option::LEVEL_DEV)
d2e6a577
FG
4577 .set_default(256)
4578 .set_description("Preallocated buffer for inline shards"),
4579
4580 Option("bluestore_cache_trim_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
94b18763 4581 .set_default(.05)
d2e6a577
FG
4582 .set_description("How frequently we trim the bluestore cache"),
4583
4584 Option("bluestore_cache_trim_max_skip_pinned", Option::TYPE_UINT, Option::LEVEL_DEV)
4585 .set_default(64)
4586 .set_description("Max pinned cache entries we consider before giving up"),
4587
4588 Option("bluestore_cache_type", Option::TYPE_STR, Option::LEVEL_DEV)
4589 .set_default("2q")
4590 .set_enum_allowed({"2q", "lru"})
4591 .set_description("Cache replacement algorithm"),
4592
4593 Option("bluestore_2q_cache_kin_ratio", Option::TYPE_FLOAT, Option::LEVEL_DEV)
4594 .set_default(.5)
4595 .set_description("2Q paper suggests .5"),
4596
4597 Option("bluestore_2q_cache_kout_ratio", Option::TYPE_FLOAT, Option::LEVEL_DEV)
4598 .set_default(.5)
4599 .set_description("2Q paper suggests .5"),
4600
11fdf7f2 4601 Option("bluestore_cache_size", Option::TYPE_SIZE, Option::LEVEL_DEV)
d2e6a577
FG
4602 .set_default(0)
4603 .set_description("Cache size (in bytes) for BlueStore")
4604 .set_long_description("This includes data and metadata cached by BlueStore as well as memory devoted to rocksdb's cache(s)."),
4605
11fdf7f2 4606 Option("bluestore_cache_size_hdd", Option::TYPE_SIZE, Option::LEVEL_DEV)
b32b8144 4607 .set_default(1_G)
11fdf7f2
TL
4608 .set_description("Default bluestore_cache_size for rotational media")
4609 .add_see_also("bluestore_cache_size"),
d2e6a577 4610
11fdf7f2 4611 Option("bluestore_cache_size_ssd", Option::TYPE_SIZE, Option::LEVEL_DEV)
b32b8144 4612 .set_default(3_G)
11fdf7f2
TL
4613 .set_description("Default bluestore_cache_size for non-rotational (solid state) media")
4614 .add_see_also("bluestore_cache_size"),
d2e6a577 4615
91327a77
AA
4616 Option("bluestore_cache_meta_ratio", Option::TYPE_FLOAT, Option::LEVEL_DEV)
4617 .set_default(.4)
4618 .add_see_also("bluestore_cache_size")
d2e6a577
FG
4619 .set_description("Ratio of bluestore cache to devote to metadata"),
4620
91327a77
AA
4621 Option("bluestore_cache_kv_ratio", Option::TYPE_FLOAT, Option::LEVEL_DEV)
4622 .set_default(.4)
4623 .add_see_also("bluestore_cache_size")
d2e6a577
FG
4624 .set_description("Ratio of bluestore cache to devote to kv database (rocksdb)"),
4625
91327a77
AA
4626 Option("bluestore_cache_autotune", Option::TYPE_BOOL, Option::LEVEL_DEV)
4627 .set_default(true)
4628 .add_see_also("bluestore_cache_size")
4629 .add_see_also("bluestore_cache_meta_ratio")
4630 .set_description("Automatically tune the ratio of caches while respecting min values."),
4631
91327a77
AA
4632 Option("bluestore_cache_autotune_interval", Option::TYPE_FLOAT, Option::LEVEL_DEV)
4633 .set_default(5)
4634 .add_see_also("bluestore_cache_autotune")
4635 .set_description("The number of seconds to wait between rebalances when cache autotune is enabled."),
d2e6a577
FG
4636
4637 Option("bluestore_kvbackend", Option::TYPE_STR, Option::LEVEL_DEV)
4638 .set_default("rocksdb")
11fdf7f2 4639 .set_flag(Option::FLAG_CREATE)
d2e6a577
FG
4640 .set_description("Key value database to use for bluestore"),
4641
11fdf7f2
TL
4642 Option("bluestore_allocator", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4643 .set_default("bitmap")
181888fb 4644 .set_enum_allowed({"bitmap", "stupid"})
11fdf7f2
TL
4645 .set_description("Allocator policy")
4646 .set_long_description("Allocator to use for bluestore. Stupid should only be used for testing."),
d2e6a577 4647
11fdf7f2 4648 Option("bluestore_freelist_blocks_per_key", Option::TYPE_SIZE, Option::LEVEL_DEV)
d2e6a577
FG
4649 .set_default(128)
4650 .set_description("Block (and bits) per database key"),
4651
11fdf7f2 4652 Option("bluestore_bitmapallocator_blocks_per_zone", Option::TYPE_SIZE, Option::LEVEL_DEV)
d2e6a577
FG
4653 .set_default(1024)
4654 .set_description(""),
4655
11fdf7f2 4656 Option("bluestore_bitmapallocator_span_size", Option::TYPE_SIZE, Option::LEVEL_DEV)
d2e6a577
FG
4657 .set_default(1024)
4658 .set_description(""),
4659
4660 Option("bluestore_max_deferred_txc", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4661 .set_default(32)
4662 .set_description("Max transactions with deferred writes that can accumulate before we force flush deferred writes"),
4663
4664 Option("bluestore_rocksdb_options", Option::TYPE_STR, Option::LEVEL_ADVANCED)
494da23a 4665 .set_default("compression=kNoCompression,max_write_buffer_number=4,min_write_buffer_number_to_merge=1,recycle_log_file_num=4,write_buffer_size=268435456,writable_file_max_buffer_size=0,compaction_readahead_size=2097152,max_background_compactions=2")
d2e6a577
FG
4666 .set_description("Rocksdb options"),
4667
11fdf7f2
TL
4668 Option("bluestore_rocksdb_cf", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4669 .set_default(false)
4670 .set_description("Enable use of rocksdb column families for bluestore metadata"),
4671
4672 Option("bluestore_rocksdb_cfs", Option::TYPE_STR, Option::LEVEL_DEV)
4673 .set_default("M= P= L=")
4674 .set_description("List of whitespace-separate key/value pairs where key is CF name and value is CF options"),
4675
d2e6a577
FG
4676 Option("bluestore_fsck_on_mount", Option::TYPE_BOOL, Option::LEVEL_DEV)
4677 .set_default(false)
4678 .set_description("Run fsck at mount"),
4679
4680 Option("bluestore_fsck_on_mount_deep", Option::TYPE_BOOL, Option::LEVEL_DEV)
494da23a
TL
4681 .set_default(false)
4682 .set_description("Run deep fsck at mount when bluestore_fsck_on_mount is set to true"),
d2e6a577
FG
4683
4684 Option("bluestore_fsck_on_umount", Option::TYPE_BOOL, Option::LEVEL_DEV)
4685 .set_default(false)
4686 .set_description("Run fsck at umount"),
4687
4688 Option("bluestore_fsck_on_umount_deep", Option::TYPE_BOOL, Option::LEVEL_DEV)
494da23a
TL
4689 .set_default(false)
4690 .set_description("Run deep fsck at umount when bluestore_fsck_on_umount is set to true"),
d2e6a577
FG
4691
4692 Option("bluestore_fsck_on_mkfs", Option::TYPE_BOOL, Option::LEVEL_DEV)
4693 .set_default(true)
4694 .set_description("Run fsck after mkfs"),
4695
4696 Option("bluestore_fsck_on_mkfs_deep", Option::TYPE_BOOL, Option::LEVEL_DEV)
4697 .set_default(false)
4698 .set_description("Run deep fsck after mkfs"),
4699
4700 Option("bluestore_sync_submit_transaction", Option::TYPE_BOOL, Option::LEVEL_DEV)
4701 .set_default(false)
4702 .set_description("Try to submit metadata transaction to rocksdb in queuing thread context"),
4703
11fdf7f2 4704 Option("bluestore_fsck_read_bytes_cap", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
a8e16298 4705 .set_default(64_M)
11fdf7f2 4706 .set_flag(Option::FLAG_RUNTIME)
a8e16298
TL
4707 .set_description("Maximum bytes read at once by deep fsck"),
4708
11fdf7f2 4709 Option("bluestore_throttle_bytes", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 4710 .set_default(64_M)
11fdf7f2 4711 .set_flag(Option::FLAG_RUNTIME)
d2e6a577
FG
4712 .set_description("Maximum bytes in flight before we throttle IO submission"),
4713
11fdf7f2 4714 Option("bluestore_throttle_deferred_bytes", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 4715 .set_default(128_M)
11fdf7f2 4716 .set_flag(Option::FLAG_RUNTIME)
d2e6a577
FG
4717 .set_description("Maximum bytes for deferred writes before we throttle IO submission"),
4718
11fdf7f2 4719 Option("bluestore_throttle_cost_per_io", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577 4720 .set_default(0)
11fdf7f2 4721 .set_flag(Option::FLAG_RUNTIME)
d2e6a577
FG
4722 .set_description("Overhead added to transaction cost (in bytes) for each IO"),
4723
4724 Option("bluestore_throttle_cost_per_io_hdd", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4725 .set_default(670000)
11fdf7f2
TL
4726 .set_flag(Option::FLAG_RUNTIME)
4727 .set_description("Default bluestore_throttle_cost_per_io for rotational media")
4728 .add_see_also("bluestore_throttle_cost_per_io"),
d2e6a577
FG
4729
4730 Option("bluestore_throttle_cost_per_io_ssd", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4731 .set_default(4000)
11fdf7f2
TL
4732 .set_flag(Option::FLAG_RUNTIME)
4733 .set_description("Default bluestore_throttle_cost_per_io for non-rotation (solid state) media")
4734 .add_see_also("bluestore_throttle_cost_per_io"),
d2e6a577
FG
4735
4736 Option("bluestore_deferred_batch_ops", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4737 .set_default(0)
11fdf7f2 4738 .set_flag(Option::FLAG_RUNTIME)
d2e6a577
FG
4739 .set_description("Max number of deferred writes before we flush the deferred write queue"),
4740
4741 Option("bluestore_deferred_batch_ops_hdd", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4742 .set_default(64)
11fdf7f2
TL
4743 .set_flag(Option::FLAG_RUNTIME)
4744 .set_description("Default bluestore_deferred_batch_ops for rotational media")
4745 .add_see_also("bluestore_deferred_batch_ops"),
d2e6a577
FG
4746
4747 Option("bluestore_deferred_batch_ops_ssd", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4748 .set_default(16)
11fdf7f2
TL
4749 .set_flag(Option::FLAG_RUNTIME)
4750 .set_description("Default bluestore_deferred_batch_ops for non-rotational (solid state) media")
4751 .add_see_also("bluestore_deferred_batch_ops"),
d2e6a577
FG
4752
4753 Option("bluestore_nid_prealloc", Option::TYPE_INT, Option::LEVEL_DEV)
4754 .set_default(1024)
4755 .set_description("Number of unique object ids to preallocate at a time"),
4756
4757 Option("bluestore_blobid_prealloc", Option::TYPE_UINT, Option::LEVEL_DEV)
4758 .set_default(10240)
4759 .set_description("Number of unique blob ids to preallocate at a time"),
4760
4761 Option("bluestore_clone_cow", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4762 .set_default(true)
11fdf7f2 4763 .set_flag(Option::FLAG_RUNTIME)
d2e6a577
FG
4764 .set_description("Use copy-on-write when cloning objects (versus reading and rewriting them at clone time)"),
4765
4766 Option("bluestore_default_buffered_read", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4767 .set_default(true)
11fdf7f2 4768 .set_flag(Option::FLAG_RUNTIME)
d2e6a577
FG
4769 .set_description("Cache read results by default (unless hinted NOCACHE or WONTNEED)"),
4770
4771 Option("bluestore_default_buffered_write", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4772 .set_default(false)
11fdf7f2 4773 .set_flag(Option::FLAG_RUNTIME)
d2e6a577
FG
4774 .set_description("Cache writes by default (unless hinted NOCACHE or WONTNEED)"),
4775
4776 Option("bluestore_debug_misc", Option::TYPE_BOOL, Option::LEVEL_DEV)
4777 .set_default(false)
4778 .set_description(""),
4779
4780 Option("bluestore_debug_no_reuse_blocks", Option::TYPE_BOOL, Option::LEVEL_DEV)
4781 .set_default(false)
4782 .set_description(""),
4783
4784 Option("bluestore_debug_small_allocations", Option::TYPE_INT, Option::LEVEL_DEV)
4785 .set_default(0)
4786 .set_description(""),
4787
4788 Option("bluestore_debug_freelist", Option::TYPE_BOOL, Option::LEVEL_DEV)
4789 .set_default(false)
4790 .set_description(""),
4791
4792 Option("bluestore_debug_prefill", Option::TYPE_FLOAT, Option::LEVEL_DEV)
4793 .set_default(0)
4794 .set_description("simulate fragmentation"),
4795
11fdf7f2 4796 Option("bluestore_debug_prefragment_max", Option::TYPE_SIZE, Option::LEVEL_DEV)
b32b8144 4797 .set_default(1_M)
d2e6a577
FG
4798 .set_description(""),
4799
4800 Option("bluestore_debug_inject_read_err", Option::TYPE_BOOL, Option::LEVEL_DEV)
4801 .set_default(false)
4802 .set_description(""),
4803
4804 Option("bluestore_debug_randomize_serial_transaction", Option::TYPE_INT, Option::LEVEL_DEV)
4805 .set_default(0)
4806 .set_description(""),
4807
4808 Option("bluestore_debug_omit_block_device_write", Option::TYPE_BOOL, Option::LEVEL_DEV)
4809 .set_default(false)
4810 .set_description(""),
4811
4812 Option("bluestore_debug_fsck_abort", Option::TYPE_BOOL, Option::LEVEL_DEV)
4813 .set_default(false)
4814 .set_description(""),
4815
4816 Option("bluestore_debug_omit_kv_commit", Option::TYPE_BOOL, Option::LEVEL_DEV)
4817 .set_default(false)
4818 .set_description(""),
4819
4820 Option("bluestore_debug_permit_any_bdev_label", Option::TYPE_BOOL, Option::LEVEL_DEV)
4821 .set_default(false)
4822 .set_description(""),
4823
d2e6a577
FG
4824 Option("bluestore_debug_random_read_err", Option::TYPE_FLOAT, Option::LEVEL_DEV)
4825 .set_default(0)
4826 .set_description(""),
c07f9fc5 4827
11fdf7f2
TL
4828 Option("bluestore_debug_inject_bug21040", Option::TYPE_BOOL, Option::LEVEL_DEV)
4829 .set_default(false)
4830 .set_description(""),
4831
f64942e4
AA
4832 Option("bluestore_debug_inject_csum_err_probability", Option::TYPE_FLOAT, Option::LEVEL_DEV)
4833 .set_default(0.0)
4834 .set_description("inject crc verification errors into bluestore device reads"),
4835
11fdf7f2
TL
4836 Option("bluestore_no_per_pool_stats_tolerance", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4837 .set_default("until_repair")
4838 .set_flag(Option::FLAG_RUNTIME)
4839 .set_enum_allowed({"enforce", "until_repair", "until_fsck"})
4840 .set_description("Specified how to treat lack of per-pool stats, e.g. caused by an upgrade")
4841 .set_long_description(
4842 "'until_fsck' will tolerate the case for regular ops and fail on fsck or repair, the latter will fix the issue, "
4843 "'until_repair' will tolerate for regular ops and fsck. Repair indicates and fixes the issue, "
4844 "'enforce' will unconditionally use global stats mode."),
4845
4846 Option("bluestore_warn_on_bluefs_spillover", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4847 .set_default(true)
4848 .set_description("Enable health indication on bluefs slow device usage"),
4849
81eedcae
TL
4850 Option("bluestore_warn_on_legacy_statfs", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4851 .set_default(true)
4852 .set_description("Enable health indication on lack of per-pool statfs reporting from bluestore"),
4853
11fdf7f2
TL
4854 Option("bluestore_log_op_age", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
4855 .set_default(5)
4856 .set_description("log operation if it's slower than this age (seconds)"),
4857
4858 Option("bluestore_log_omap_iterator_age", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
494da23a 4859 .set_default(5)
11fdf7f2
TL
4860 .set_description("log omap iteration operation if it's slower than this age (seconds)"),
4861
494da23a
TL
4862 Option("bluestore_log_collection_list_age", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
4863 .set_default(60)
4864 .set_description("log collection list operation if it's slower than this age (seconds)"),
4865
d2e6a577
FG
4866 // -----------------------------------------
4867 // kstore
c07f9fc5 4868
d2e6a577
FG
4869 Option("kstore_max_ops", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4870 .set_default(512)
4871 .set_description(""),
4872
11fdf7f2 4873 Option("kstore_max_bytes", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 4874 .set_default(64_M)
d2e6a577 4875 .set_description(""),
c07f9fc5 4876
d2e6a577
FG
4877 Option("kstore_backend", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4878 .set_default("rocksdb")
4879 .set_description(""),
c07f9fc5 4880
d2e6a577
FG
4881 Option("kstore_rocksdb_options", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4882 .set_default("compression=kNoCompression")
11fdf7f2 4883 .set_description("Options to pass through when RocksDB is used as the KeyValueDB for kstore."),
c07f9fc5 4884
d2e6a577
FG
4885 Option("kstore_fsck_on_mount", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4886 .set_default(false)
11fdf7f2 4887 .set_description("Whether or not to run fsck on mount for kstore."),
c07f9fc5 4888
d2e6a577
FG
4889 Option("kstore_fsck_on_mount_deep", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4890 .set_default(true)
11fdf7f2 4891 .set_description("Whether or not to run deep fsck on mount for kstore"),
c07f9fc5 4892
d2e6a577
FG
4893 Option("kstore_nid_prealloc", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4894 .set_default(1024)
4895 .set_description(""),
c07f9fc5 4896
d2e6a577
FG
4897 Option("kstore_sync_transaction", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4898 .set_default(false)
4899 .set_description(""),
c07f9fc5 4900
d2e6a577
FG
4901 Option("kstore_sync_submit_transaction", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4902 .set_default(false)
4903 .set_description(""),
c07f9fc5 4904
d2e6a577
FG
4905 Option("kstore_onode_map_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4906 .set_default(1024)
4907 .set_description(""),
c07f9fc5 4908
11fdf7f2 4909 Option("kstore_default_stripe_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577
FG
4910 .set_default(65536)
4911 .set_description(""),
c07f9fc5 4912
d2e6a577
FG
4913 // ---------------------
4914 // filestore
c07f9fc5 4915
11fdf7f2
TL
4916 Option("filestore_rocksdb_options", Option::TYPE_STR, Option::LEVEL_DEV)
4917 .set_default("max_background_jobs=10,compaction_readahead_size=2097152,compression=kNoCompression")
4918 .set_description("Options to pass through when RocksDB is used as the KeyValueDB for filestore."),
c07f9fc5 4919
11fdf7f2 4920 Option("filestore_omap_backend", Option::TYPE_STR, Option::LEVEL_DEV)
d2e6a577 4921 .set_default("rocksdb")
11fdf7f2
TL
4922 .set_enum_allowed({"leveldb", "rocksdb"})
4923 .set_description("The KeyValueDB to use for filestore metadata (ie omap)."),
c07f9fc5 4924
11fdf7f2 4925 Option("filestore_omap_backend_path", Option::TYPE_STR, Option::LEVEL_DEV)
d2e6a577 4926 .set_default("")
11fdf7f2 4927 .set_description("The path where the filestore KeyValueDB should store it's database(s)."),
c07f9fc5 4928
d2e6a577
FG
4929 Option("filestore_wbthrottle_enable", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4930 .set_default(true)
11fdf7f2 4931 .set_description("Enabling throttling of operations to backing file system"),
c07f9fc5 4932
11fdf7f2 4933 Option("filestore_wbthrottle_btrfs_bytes_start_flusher", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577 4934 .set_default(41943040)
11fdf7f2 4935 .set_description("Start flushing (fsyncing) when this many bytes are written(btrfs)"),
c07f9fc5 4936
11fdf7f2 4937 Option("filestore_wbthrottle_btrfs_bytes_hard_limit", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577 4938 .set_default(419430400)
11fdf7f2 4939 .set_description("Block writes when this many bytes haven't been flushed (fsynced) (btrfs)"),
c07f9fc5 4940
d2e6a577
FG
4941 Option("filestore_wbthrottle_btrfs_ios_start_flusher", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4942 .set_default(500)
11fdf7f2 4943 .set_description("Start flushing (fsyncing) when this many IOs are written (brtrfs)"),
c07f9fc5 4944
d2e6a577
FG
4945 Option("filestore_wbthrottle_btrfs_ios_hard_limit", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4946 .set_default(5000)
11fdf7f2 4947 .set_description("Block writes when this many IOs haven't been flushed (fsynced) (btrfs)"),
c07f9fc5 4948
d2e6a577
FG
4949 Option("filestore_wbthrottle_btrfs_inodes_start_flusher", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4950 .set_default(500)
11fdf7f2 4951 .set_description("Start flushing (fsyncing) when this many distinct inodes have been modified (btrfs)"),
c07f9fc5 4952
11fdf7f2 4953 Option("filestore_wbthrottle_xfs_bytes_start_flusher", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577 4954 .set_default(41943040)
11fdf7f2 4955 .set_description("Start flushing (fsyncing) when this many bytes are written(xfs)"),
c07f9fc5 4956
11fdf7f2 4957 Option("filestore_wbthrottle_xfs_bytes_hard_limit", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577 4958 .set_default(419430400)
11fdf7f2 4959 .set_description("Block writes when this many bytes haven't been flushed (fsynced) (xfs)"),
c07f9fc5 4960
d2e6a577
FG
4961 Option("filestore_wbthrottle_xfs_ios_start_flusher", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4962 .set_default(500)
11fdf7f2 4963 .set_description("Start flushing (fsyncing) when this many IOs are written (xfs)"),
c07f9fc5 4964
d2e6a577
FG
4965 Option("filestore_wbthrottle_xfs_ios_hard_limit", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4966 .set_default(5000)
11fdf7f2 4967 .set_description("Block writes when this many IOs haven't been flushed (fsynced) (xfs)"),
c07f9fc5 4968
d2e6a577
FG
4969 Option("filestore_wbthrottle_xfs_inodes_start_flusher", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4970 .set_default(500)
11fdf7f2 4971 .set_description("Start flushing (fsyncing) when this many distinct inodes have been modified (xfs)"),
c07f9fc5 4972
d2e6a577
FG
4973 Option("filestore_wbthrottle_btrfs_inodes_hard_limit", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4974 .set_default(5000)
11fdf7f2 4975 .set_description("Block writing when this many inodes have outstanding writes (btrfs)"),
c07f9fc5 4976
d2e6a577
FG
4977 Option("filestore_wbthrottle_xfs_inodes_hard_limit", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4978 .set_default(5000)
11fdf7f2 4979 .set_description("Block writing when this many inodes have outstanding writes (xfs)"),
c07f9fc5 4980
11fdf7f2 4981 Option("filestore_odsync_write", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577 4982 .set_default(false)
11fdf7f2 4983 .set_description("Write with O_DSYNC"),
c07f9fc5 4984
11fdf7f2 4985 Option("filestore_index_retry_probability", Option::TYPE_FLOAT, Option::LEVEL_DEV)
d2e6a577
FG
4986 .set_default(0)
4987 .set_description(""),
c07f9fc5 4988
d2e6a577
FG
4989 Option("filestore_debug_inject_read_err", Option::TYPE_BOOL, Option::LEVEL_DEV)
4990 .set_default(false)
4991 .set_description(""),
c07f9fc5 4992
d2e6a577
FG
4993 Option("filestore_debug_random_read_err", Option::TYPE_FLOAT, Option::LEVEL_DEV)
4994 .set_default(0)
4995 .set_description(""),
c07f9fc5 4996
d2e6a577
FG
4997 Option("filestore_debug_omap_check", Option::TYPE_BOOL, Option::LEVEL_DEV)
4998 .set_default(false)
4999 .set_description(""),
c07f9fc5 5000
11fdf7f2 5001 Option("filestore_omap_header_cache_size", Option::TYPE_SIZE, Option::LEVEL_DEV)
d2e6a577
FG
5002 .set_default(1024)
5003 .set_description(""),
c07f9fc5 5004
11fdf7f2 5005 Option("filestore_max_inline_xattr_size", Option::TYPE_SIZE, Option::LEVEL_DEV)
d2e6a577
FG
5006 .set_default(0)
5007 .set_description(""),
c07f9fc5 5008
11fdf7f2 5009 Option("filestore_max_inline_xattr_size_xfs", Option::TYPE_SIZE, Option::LEVEL_DEV)
d2e6a577
FG
5010 .set_default(65536)
5011 .set_description(""),
c07f9fc5 5012
11fdf7f2 5013 Option("filestore_max_inline_xattr_size_btrfs", Option::TYPE_SIZE, Option::LEVEL_DEV)
d2e6a577
FG
5014 .set_default(2048)
5015 .set_description(""),
c07f9fc5 5016
11fdf7f2 5017 Option("filestore_max_inline_xattr_size_other", Option::TYPE_SIZE, Option::LEVEL_DEV)
d2e6a577
FG
5018 .set_default(512)
5019 .set_description(""),
c07f9fc5 5020
11fdf7f2 5021 Option("filestore_max_inline_xattrs", Option::TYPE_UINT, Option::LEVEL_DEV)
d2e6a577
FG
5022 .set_default(0)
5023 .set_description(""),
c07f9fc5 5024
11fdf7f2 5025 Option("filestore_max_inline_xattrs_xfs", Option::TYPE_UINT, Option::LEVEL_DEV)
d2e6a577
FG
5026 .set_default(10)
5027 .set_description(""),
c07f9fc5 5028
11fdf7f2 5029 Option("filestore_max_inline_xattrs_btrfs", Option::TYPE_UINT, Option::LEVEL_DEV)
d2e6a577
FG
5030 .set_default(10)
5031 .set_description(""),
c07f9fc5 5032
11fdf7f2 5033 Option("filestore_max_inline_xattrs_other", Option::TYPE_UINT, Option::LEVEL_DEV)
d2e6a577
FG
5034 .set_default(2)
5035 .set_description(""),
c07f9fc5 5036
11fdf7f2 5037 Option("filestore_max_xattr_value_size", Option::TYPE_SIZE, Option::LEVEL_DEV)
d2e6a577
FG
5038 .set_default(0)
5039 .set_description(""),
c07f9fc5 5040
11fdf7f2
TL
5041 Option("filestore_max_xattr_value_size_xfs", Option::TYPE_SIZE, Option::LEVEL_DEV)
5042 .set_default(64_K)
d2e6a577 5043 .set_description(""),
c07f9fc5 5044
11fdf7f2
TL
5045 Option("filestore_max_xattr_value_size_btrfs", Option::TYPE_SIZE, Option::LEVEL_DEV)
5046 .set_default(64_K)
d2e6a577 5047 .set_description(""),
c07f9fc5 5048
11fdf7f2
TL
5049 Option("filestore_max_xattr_value_size_other", Option::TYPE_SIZE, Option::LEVEL_DEV)
5050 .set_default(1_K)
d2e6a577 5051 .set_description(""),
c07f9fc5 5052
11fdf7f2 5053 Option("filestore_sloppy_crc", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577
FG
5054 .set_default(false)
5055 .set_description(""),
c07f9fc5 5056
11fdf7f2 5057 Option("filestore_sloppy_crc_block_size", Option::TYPE_SIZE, Option::LEVEL_DEV)
d2e6a577
FG
5058 .set_default(65536)
5059 .set_description(""),
c07f9fc5 5060
11fdf7f2 5061 Option("filestore_max_alloc_hint_size", Option::TYPE_SIZE, Option::LEVEL_DEV)
d2e6a577
FG
5062 .set_default(1ULL << 20)
5063 .set_description(""),
c07f9fc5 5064
d2e6a577
FG
5065 Option("filestore_max_sync_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5066 .set_default(5)
11fdf7f2 5067 .set_description("Period between calls to syncfs(2) and journal trims (seconds)"),
c07f9fc5 5068
11fdf7f2 5069 Option("filestore_min_sync_interval", Option::TYPE_FLOAT, Option::LEVEL_DEV)
d2e6a577 5070 .set_default(.01)
11fdf7f2 5071 .set_description("Minimum period between calls to syncfs(2)"),
c07f9fc5 5072
11fdf7f2 5073 Option("filestore_btrfs_snap", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577
FG
5074 .set_default(true)
5075 .set_description(""),
c07f9fc5 5076
d2e6a577
FG
5077 Option("filestore_btrfs_clone_range", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5078 .set_default(true)
11fdf7f2 5079 .set_description("Use btrfs clone_range ioctl to efficiently duplicate objects"),
c07f9fc5 5080
11fdf7f2 5081 Option("filestore_zfs_snap", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577
FG
5082 .set_default(false)
5083 .set_description(""),
c07f9fc5 5084
11fdf7f2 5085 Option("filestore_fsync_flushes_journal_data", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577
FG
5086 .set_default(false)
5087 .set_description(""),
c07f9fc5 5088
d2e6a577
FG
5089 Option("filestore_fiemap", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5090 .set_default(false)
11fdf7f2 5091 .set_description("Use fiemap ioctl(2) to determine which parts of objects are sparse"),
c07f9fc5 5092
d2e6a577
FG
5093 Option("filestore_punch_hole", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5094 .set_default(false)
11fdf7f2 5095 .set_description("Use fallocate(2) FALLOC_FL_PUNCH_HOLE to efficiently zero ranges of objects"),
c07f9fc5 5096
d2e6a577
FG
5097 Option("filestore_seek_data_hole", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5098 .set_default(false)
11fdf7f2 5099 .set_description("Use lseek(2) SEEK_HOLE and SEEK_DATA to determine which parts of objects are sparse"),
c07f9fc5 5100
d2e6a577
FG
5101 Option("filestore_splice", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5102 .set_default(false)
11fdf7f2 5103 .set_description("Use splice(2) to more efficiently copy data between files"),
c07f9fc5 5104
d2e6a577
FG
5105 Option("filestore_fadvise", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5106 .set_default(true)
11fdf7f2 5107 .set_description("Use posix_fadvise(2) to pass hints to file system"),
c07f9fc5 5108
d2e6a577
FG
5109 Option("filestore_collect_device_partition_information", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5110 .set_default(true)
11fdf7f2 5111 .set_description("Collect metadata about the backing file system on OSD startup"),
c07f9fc5 5112
d2e6a577
FG
5113 Option("filestore_xfs_extsize", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5114 .set_default(false)
11fdf7f2 5115 .set_description("Use XFS extsize ioctl(2) to hint allocator about expected write sizes"),
c07f9fc5 5116
11fdf7f2 5117 Option("filestore_journal_parallel", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577
FG
5118 .set_default(false)
5119 .set_description(""),
c07f9fc5 5120
11fdf7f2 5121 Option("filestore_journal_writeahead", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577
FG
5122 .set_default(false)
5123 .set_description(""),
c07f9fc5 5124
11fdf7f2 5125 Option("filestore_journal_trailing", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577
FG
5126 .set_default(false)
5127 .set_description(""),
c07f9fc5 5128
d2e6a577
FG
5129 Option("filestore_queue_max_ops", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
5130 .set_default(50)
11fdf7f2 5131 .set_description("Max IO operations in flight"),
c07f9fc5 5132
11fdf7f2
TL
5133 Option("filestore_queue_max_bytes", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
5134 .set_default(100_M)
5135 .set_description("Max (written) bytes in flight"),
c07f9fc5 5136
11fdf7f2 5137 Option("filestore_caller_concurrency", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577
FG
5138 .set_default(10)
5139 .set_description(""),
c07f9fc5 5140
d2e6a577 5141 Option("filestore_expected_throughput_bytes", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
11fdf7f2
TL
5142 .set_default(200_M)
5143 .set_description("Expected throughput of backend device (aids throttling calculations)"),
c07f9fc5 5144
d2e6a577
FG
5145 Option("filestore_expected_throughput_ops", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5146 .set_default(200)
11fdf7f2
TL
5147 .set_description("Expected through of backend device in IOPS (aids throttling calculations)"),
5148
5149 Option("filestore_queue_max_delay_multiple", Option::TYPE_FLOAT, Option::LEVEL_DEV)
5150 .set_default(0)
5151 .set_description(""),
5152
5153 Option("filestore_queue_high_delay_multiple", Option::TYPE_FLOAT, Option::LEVEL_DEV)
5154 .set_default(0)
5155 .set_description(""),
5156
5157 Option("filestore_queue_max_delay_multiple_bytes", Option::TYPE_FLOAT, Option::LEVEL_DEV)
5158 .set_default(0)
5159 .set_description(""),
5160
5161 Option("filestore_queue_high_delay_multiple_bytes", Option::TYPE_FLOAT, Option::LEVEL_DEV)
5162 .set_default(0)
d2e6a577 5163 .set_description(""),
c07f9fc5 5164
11fdf7f2 5165 Option("filestore_queue_max_delay_multiple_ops", Option::TYPE_FLOAT, Option::LEVEL_DEV)
d2e6a577
FG
5166 .set_default(0)
5167 .set_description(""),
c07f9fc5 5168
11fdf7f2 5169 Option("filestore_queue_high_delay_multiple_ops", Option::TYPE_FLOAT, Option::LEVEL_DEV)
d2e6a577
FG
5170 .set_default(0)
5171 .set_description(""),
c07f9fc5 5172
11fdf7f2 5173 Option("filestore_queue_low_threshhold", Option::TYPE_FLOAT, Option::LEVEL_DEV)
d2e6a577
FG
5174 .set_default(0.3)
5175 .set_description(""),
c07f9fc5 5176
11fdf7f2 5177 Option("filestore_queue_high_threshhold", Option::TYPE_FLOAT, Option::LEVEL_DEV)
d2e6a577
FG
5178 .set_default(0.9)
5179 .set_description(""),
c07f9fc5 5180
d2e6a577
FG
5181 Option("filestore_op_threads", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5182 .set_default(2)
11fdf7f2 5183 .set_description("Threads used to apply changes to backing file system"),
c07f9fc5 5184
d2e6a577
FG
5185 Option("filestore_op_thread_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5186 .set_default(60)
11fdf7f2 5187 .set_description("Seconds before a worker thread is considered stalled"),
c07f9fc5 5188
d2e6a577
FG
5189 Option("filestore_op_thread_suicide_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5190 .set_default(180)
11fdf7f2 5191 .set_description("Seconds before a worker thread is considered dead"),
c07f9fc5 5192
d2e6a577
FG
5193 Option("filestore_commit_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5194 .set_default(600)
11fdf7f2 5195 .set_description("Seconds before backing file system is considered hung"),
c07f9fc5 5196
11fdf7f2 5197 Option("filestore_fiemap_threshold", Option::TYPE_SIZE, Option::LEVEL_DEV)
b32b8144 5198 .set_default(4_K)
d2e6a577 5199 .set_description(""),
c07f9fc5 5200
11fdf7f2 5201 Option("filestore_merge_threshold", Option::TYPE_INT, Option::LEVEL_DEV)
1adf2230 5202 .set_default(-10)
d2e6a577 5203 .set_description(""),
c07f9fc5 5204
11fdf7f2 5205 Option("filestore_split_multiple", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577
FG
5206 .set_default(2)
5207 .set_description(""),
c07f9fc5 5208
11fdf7f2 5209 Option("filestore_split_rand_factor", Option::TYPE_UINT, Option::LEVEL_DEV)
d2e6a577
FG
5210 .set_default(20)
5211 .set_description(""),
c07f9fc5 5212
11fdf7f2 5213 Option("filestore_update_to", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577
FG
5214 .set_default(1000)
5215 .set_description(""),
c07f9fc5 5216
11fdf7f2 5217 Option("filestore_blackhole", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577
FG
5218 .set_default(false)
5219 .set_description(""),
c07f9fc5 5220
11fdf7f2 5221 Option("filestore_fd_cache_size", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577
FG
5222 .set_default(128)
5223 .set_description(""),
c07f9fc5 5224
11fdf7f2 5225 Option("filestore_fd_cache_shards", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577
FG
5226 .set_default(16)
5227 .set_description(""),
c07f9fc5 5228
11fdf7f2 5229 Option("filestore_ondisk_finisher_threads", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577
FG
5230 .set_default(1)
5231 .set_description(""),
c07f9fc5 5232
11fdf7f2 5233 Option("filestore_apply_finisher_threads", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577
FG
5234 .set_default(1)
5235 .set_description(""),
c07f9fc5 5236
11fdf7f2 5237 Option("filestore_dump_file", Option::TYPE_STR, Option::LEVEL_DEV)
d2e6a577
FG
5238 .set_default("")
5239 .set_description(""),
c07f9fc5 5240
d2e6a577
FG
5241 Option("filestore_kill_at", Option::TYPE_INT, Option::LEVEL_DEV)
5242 .set_default(0)
5243 .set_description(""),
c07f9fc5 5244
d2e6a577
FG
5245 Option("filestore_inject_stall", Option::TYPE_INT, Option::LEVEL_DEV)
5246 .set_default(0)
5247 .set_description(""),
c07f9fc5 5248
11fdf7f2 5249 Option("filestore_fail_eio", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577
FG
5250 .set_default(true)
5251 .set_description(""),
c07f9fc5 5252
d2e6a577
FG
5253 Option("filestore_debug_verify_split", Option::TYPE_BOOL, Option::LEVEL_DEV)
5254 .set_default(false)
5255 .set_description(""),
c07f9fc5 5256
11fdf7f2 5257 Option("journal_dio", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577
FG
5258 .set_default(true)
5259 .set_description(""),
c07f9fc5 5260
11fdf7f2 5261 Option("journal_aio", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577
FG
5262 .set_default(true)
5263 .set_description(""),
c07f9fc5 5264
11fdf7f2 5265 Option("journal_force_aio", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577
FG
5266 .set_default(false)
5267 .set_description(""),
c07f9fc5 5268
11fdf7f2 5269 Option("journal_block_size", Option::TYPE_SIZE, Option::LEVEL_DEV)
b32b8144 5270 .set_default(4_K)
d2e6a577 5271 .set_description(""),
c07f9fc5 5272
11fdf7f2 5273 Option("journal_block_align", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577
FG
5274 .set_default(true)
5275 .set_description(""),
c07f9fc5 5276
11fdf7f2 5277 Option("journal_write_header_frequency", Option::TYPE_UINT, Option::LEVEL_DEV)
d2e6a577
FG
5278 .set_default(0)
5279 .set_description(""),
c07f9fc5 5280
11fdf7f2
TL
5281 Option("journal_max_write_bytes", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
5282 .set_default(10_M)
5283 .set_description("Max bytes in flight to journal"),
c07f9fc5 5284
d2e6a577
FG
5285 Option("journal_max_write_entries", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5286 .set_default(100)
11fdf7f2 5287 .set_description("Max IOs in flight to journal"),
c07f9fc5 5288
11fdf7f2 5289 Option("journal_throttle_low_threshhold", Option::TYPE_FLOAT, Option::LEVEL_DEV)
d2e6a577
FG
5290 .set_default(0.6)
5291 .set_description(""),
c07f9fc5 5292
11fdf7f2 5293 Option("journal_throttle_high_threshhold", Option::TYPE_FLOAT, Option::LEVEL_DEV)
d2e6a577
FG
5294 .set_default(0.9)
5295 .set_description(""),
c07f9fc5 5296
11fdf7f2 5297 Option("journal_throttle_high_multiple", Option::TYPE_FLOAT, Option::LEVEL_DEV)
d2e6a577
FG
5298 .set_default(0)
5299 .set_description(""),
c07f9fc5 5300
11fdf7f2 5301 Option("journal_throttle_max_multiple", Option::TYPE_FLOAT, Option::LEVEL_DEV)
d2e6a577
FG
5302 .set_default(0)
5303 .set_description(""),
c07f9fc5 5304
11fdf7f2
TL
5305 Option("journal_align_min_size", Option::TYPE_SIZE, Option::LEVEL_DEV)
5306 .set_default(64_K)
d2e6a577 5307 .set_description(""),
c07f9fc5 5308
11fdf7f2 5309 Option("journal_replay_from", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577
FG
5310 .set_default(0)
5311 .set_description(""),
c07f9fc5 5312
3efd9988
FG
5313 Option("mgr_stats_threshold", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5314 .set_default((int64_t)PerfCountersBuilder::PRIO_USEFUL)
5315 .set_description("Lowest perfcounter priority collected by mgr")
5316 .set_long_description("Daemons only set perf counter data to the manager "
5317 "daemon if the counter has a priority higher than this.")
5318 .set_min_max((int64_t)PerfCountersBuilder::PRIO_DEBUGONLY,
91327a77 5319 (int64_t)PerfCountersBuilder::PRIO_CRITICAL + 1),
3efd9988 5320
11fdf7f2 5321 Option("journal_zero_on_create", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577
FG
5322 .set_default(false)
5323 .set_description(""),
c07f9fc5 5324
11fdf7f2 5325 Option("journal_ignore_corruption", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577
FG
5326 .set_default(false)
5327 .set_description(""),
c07f9fc5 5328
11fdf7f2 5329 Option("journal_discard", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577
FG
5330 .set_default(false)
5331 .set_description(""),
c07f9fc5 5332
d2e6a577
FG
5333 Option("fio_dir", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5334 .set_default("/tmp/fio")
5335 .set_description(""),
c07f9fc5 5336
d2e6a577
FG
5337 Option("rados_mon_op_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5338 .set_default(0)
5339 .set_description(""),
c07f9fc5 5340
d2e6a577
FG
5341 Option("rados_osd_op_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5342 .set_default(0)
5343 .set_description(""),
c07f9fc5 5344
d2e6a577
FG
5345 Option("rados_tracing", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5346 .set_default(false)
5347 .set_description(""),
c07f9fc5 5348
d2e6a577
FG
5349 Option("nss_db_path", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5350 .set_default("")
5351 .set_description(""),
c07f9fc5 5352
d2e6a577 5353 Option("mgr_module_path", Option::TYPE_STR, Option::LEVEL_ADVANCED)
11fdf7f2 5354 .set_default(CEPH_DATADIR "/mgr")
3efd9988
FG
5355 .add_service("mgr")
5356 .set_description("Filesystem path to manager modules."),
c07f9fc5 5357
3efd9988 5358 Option("mgr_initial_modules", Option::TYPE_STR, Option::LEVEL_BASIC)
11fdf7f2
TL
5359 .set_default("restful iostat")
5360 .set_flag(Option::FLAG_NO_MON_UPDATE)
5361 .set_flag(Option::FLAG_CLUSTER_CREATE)
3efd9988
FG
5362 .add_service("mon")
5363 .set_description("List of manager modules to enable when the cluster is "
5364 "first started")
5365 .set_long_description("This list of module names is read by the monitor "
5366 "when the cluster is first started after installation, to populate "
5367 "the list of enabled manager modules. Subsequent updates are done using "
5368 "the 'mgr module [enable|disable]' commands. List may be comma "
5369 "or space separated."),
c07f9fc5 5370
d2e6a577
FG
5371 Option("mgr_data", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5372 .set_default("/var/lib/ceph/mgr/$cluster-$id")
11fdf7f2 5373 .set_flag(Option::FLAG_NO_MON_UPDATE)
3efd9988
FG
5374 .add_service("mgr")
5375 .set_description("Filesystem path to the ceph-mgr data directory, used to "
5376 "contain keyring."),
c07f9fc5 5377
11fdf7f2 5378 Option("mgr_tick_period", Option::TYPE_SECS, Option::LEVEL_ADVANCED)
d2e6a577 5379 .set_default(2)
3efd9988
FG
5380 .add_service("mgr")
5381 .set_description("Period in seconds of beacon messages to monitor"),
c07f9fc5 5382
3efd9988 5383 Option("mgr_stats_period", Option::TYPE_INT, Option::LEVEL_BASIC)
d2e6a577 5384 .set_default(5)
3efd9988
FG
5385 .add_service("mgr")
5386 .set_description("Period in seconds of OSD/MDS stats reports to manager")
5387 .set_long_description("Use this setting to control the granularity of "
5388 "time series data collection from daemons. Adjust "
5389 "upwards if the manager CPU load is too high, or "
5390 "if you simply do not require the most up to date "
5391 "performance counter data."),
5392
11fdf7f2 5393 Option("mgr_client_bytes", Option::TYPE_SIZE, Option::LEVEL_DEV)
b32b8144 5394 .set_default(128_M)
3efd9988 5395 .add_service("mgr"),
c07f9fc5 5396
3efd9988 5397 Option("mgr_client_messages", Option::TYPE_UINT, Option::LEVEL_DEV)
d2e6a577 5398 .set_default(512)
3efd9988 5399 .add_service("mgr"),
c07f9fc5 5400
11fdf7f2 5401 Option("mgr_osd_bytes", Option::TYPE_SIZE, Option::LEVEL_DEV)
b32b8144 5402 .set_default(512_M)
3efd9988 5403 .add_service("mgr"),
c07f9fc5 5404
3efd9988 5405 Option("mgr_osd_messages", Option::TYPE_UINT, Option::LEVEL_DEV)
d2e6a577 5406 .set_default(8192)
3efd9988 5407 .add_service("mgr"),
c07f9fc5 5408
11fdf7f2 5409 Option("mgr_mds_bytes", Option::TYPE_SIZE, Option::LEVEL_DEV)
b32b8144 5410 .set_default(128_M)
3efd9988 5411 .add_service("mgr"),
c07f9fc5 5412
3efd9988 5413 Option("mgr_mds_messages", Option::TYPE_UINT, Option::LEVEL_DEV)
d2e6a577 5414 .set_default(128)
3efd9988 5415 .add_service("mgr"),
c07f9fc5 5416
11fdf7f2 5417 Option("mgr_mon_bytes", Option::TYPE_SIZE, Option::LEVEL_DEV)
b32b8144 5418 .set_default(128_M)
3efd9988 5419 .add_service("mgr"),
c07f9fc5 5420
3efd9988 5421 Option("mgr_mon_messages", Option::TYPE_UINT, Option::LEVEL_DEV)
d2e6a577 5422 .set_default(128)
3efd9988 5423 .add_service("mgr"),
c07f9fc5 5424
3efd9988 5425 Option("mgr_connect_retry_interval", Option::TYPE_FLOAT, Option::LEVEL_DEV)
d2e6a577 5426 .set_default(1.0)
3efd9988 5427 .add_service("common"),
c07f9fc5 5428
d2e6a577
FG
5429 Option("mgr_service_beacon_grace", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5430 .set_default(60.0)
3efd9988
FG
5431 .add_service("mgr")
5432 .set_description("Period in seconds from last beacon to manager dropping "
5433 "state about a monitored service (RGW, rbd-mirror etc)"),
c07f9fc5 5434
11fdf7f2
TL
5435 Option("mgr_client_service_daemon_unregister_timeout", Option::TYPE_FLOAT, Option::LEVEL_DEV)
5436 .set_default(1.0)
5437 .set_description("Time to wait during shutdown to deregister service with mgr"),
5438
5439 Option("mgr_debug_aggressive_pg_num_changes", Option::TYPE_BOOL, Option::LEVEL_DEV)
5440 .set_default(false)
5441 .set_description("Bypass most throttling and safety checks in pg[p]_num controller")
5442 .add_service("mgr"),
5443
3efd9988 5444 Option("mon_mgr_digest_period", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577 5445 .set_default(5)
3efd9988
FG
5446 .add_service("mon")
5447 .set_description("Period in seconds between monitor-to-manager "
5448 "health/status updates"),
c07f9fc5 5449
11fdf7f2 5450 Option("mon_mgr_beacon_grace", Option::TYPE_SECS, Option::LEVEL_ADVANCED)
d2e6a577 5451 .set_default(30)
3efd9988
FG
5452 .add_service("mon")
5453 .set_description("Period in seconds from last beacon to monitor marking "
5454 "a manager daemon as failed"),
c07f9fc5 5455
d2e6a577
FG
5456 Option("mon_mgr_inactive_grace", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5457 .set_default(60)
3efd9988
FG
5458 .add_service("mon")
5459 .set_description("Period in seconds after cluster creation during which "
5460 "cluster may have no active manager")
5461 .set_long_description("This grace period enables the cluster to come "
5462 "up cleanly without raising spurious health check "
5463 "failures about managers that aren't online yet"),
c07f9fc5 5464
d2e6a577 5465 Option("mon_mgr_mkfs_grace", Option::TYPE_INT, Option::LEVEL_ADVANCED)
11fdf7f2 5466 .set_default(120)
3efd9988
FG
5467 .add_service("mon")
5468 .set_description("Period in seconds that the cluster may have no active "
5469 "manager before this is reported as an ERR rather than "
5470 "a WARN"),
c07f9fc5 5471
d2e6a577
FG
5472 Option("throttler_perf_counter", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5473 .set_default(true)
5474 .set_description(""),
c07f9fc5 5475
d2e6a577
FG
5476 Option("event_tracing", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5477 .set_default(false)
5478 .set_description(""),
c07f9fc5 5479
d2e6a577
FG
5480 Option("debug_deliberately_leak_memory", Option::TYPE_BOOL, Option::LEVEL_DEV)
5481 .set_default(false)
5482 .set_description(""),
11fdf7f2 5483
b32b8144
FG
5484 Option("debug_asserts_on_shutdown", Option::TYPE_BOOL,Option::LEVEL_DEV)
5485 .set_default(false)
5486 .set_description("Enable certain asserts to check for refcounting bugs on shutdown; see http://tracker.ceph.com/issues/21738"),
11fdf7f2
TL
5487
5488 Option("debug_asok_assert_abort", Option::TYPE_BOOL, Option::LEVEL_DEV)
5489 .set_default(false)
5490 .set_description("allow commands 'assert' and 'abort' via asok for testing crash dumps etc"),
5491
5492 Option("target_max_misplaced_ratio", Option::TYPE_FLOAT, Option::LEVEL_BASIC)
5493 .set_default(.05)
5494 .set_description("Max ratio of misplaced objects to target when throttling data rebalancing activity"),
5495
5496 Option("device_failure_prediction_mode", Option::TYPE_STR, Option::LEVEL_BASIC)
5497 .set_default("none")
5498 .set_flag(Option::FLAG_RUNTIME)
5499 .set_enum_allowed({"none", "local", "cloud"})
5500 .set_description("Method used to predict device failures")
5501 .set_long_description("To disable prediction, use 'none', 'local' uses a prediction model that runs inside the mgr daemon. 'cloud' will share metrics with a cloud service and query the service for devicelife expectancy."),
5502
5503 /* KRB Authentication. */
5504 Option("gss_ktab_client_file", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5505 .set_default("/var/lib/ceph/$name/gss_client_$name.ktab")
5506 .set_description("GSS/KRB5 Keytab file for client authentication")
5507 .add_service({"mon", "osd"})
5508 .set_long_description("This sets the full path for the GSS/Kerberos client keytab file location."),
5509
5510 Option("gss_target_name", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5511 .set_default("ceph")
5512 .set_description("")
5513 .add_service({"mon", "osd"})
5514 .set_long_description("This sets the gss target service name."),
d2e6a577
FG
5515 });
5516}
c07f9fc5 5517
d2e6a577
FG
5518std::vector<Option> get_rgw_options() {
5519 return std::vector<Option>({
5520 Option("rgw_acl_grants_max_num", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5521 .set_default(100)
b32b8144 5522 .set_description("Max number of ACL grants in a single request"),
c07f9fc5 5523
11fdf7f2
TL
5524 Option("rgw_cors_rules_max_num", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5525 .set_default(100)
5526 .set_description("Max number of cors rules in a single request"),
5527
5528 Option("rgw_delete_multi_obj_max_num", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5529 .set_default(1000)
5530 .set_description("Max number of objects in a single multi-object delete request"),
5531
5532 Option("rgw_website_routing_rules_max_num", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5533 .set_default(50)
5534 .set_description("Max number of website routing rules in a single request"),
5535
5536 Option("rgw_rados_tracing", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5537 .set_default(false)
5538 .set_description("true if LTTng-UST tracepoints should be enabled"),
5539
5540 Option("rgw_op_tracing", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5541 .set_default(false)
5542 .set_description("true if LTTng-UST tracepoints should be enabled"),
5543
5544 Option("rgw_max_chunk_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144
FG
5545 .set_default(4_M)
5546 .set_description("Set RGW max chunk size")
5547 .set_long_description(
5548 "The chunk size is the size of RADOS I/O requests that RGW sends when accessing "
5549 "data objects. RGW read and write operation will never request more than this amount "
5550 "in a single request. This also defines the rgw object head size, as head operations "
5551 "need to be atomic, and anything larger than this would require more than a single "
5552 "operation."),
c07f9fc5 5553
11fdf7f2 5554 Option("rgw_put_obj_min_window_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144
FG
5555 .set_default(16_M)
5556 .set_description("The minimum RADOS write window size (in bytes).")
5557 .set_long_description(
5558 "The window size determines the total concurrent RADOS writes of a single rgw object. "
5559 "When writing an object RGW will send multiple chunks to RADOS. The total size of the "
5560 "writes does not exceed the window size. The window size can be automatically "
5561 "in order to better utilize the pipe.")
5562 .add_see_also({"rgw_put_obj_max_window_size", "rgw_max_chunk_size"}),
c07f9fc5 5563
11fdf7f2 5564 Option("rgw_put_obj_max_window_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144
FG
5565 .set_default(64_M)
5566 .set_description("The maximum RADOS write window size (in bytes).")
5567 .set_long_description("The window size may be dynamically adjusted, but will not surpass this value.")
5568 .add_see_also({"rgw_put_obj_min_window_size", "rgw_max_chunk_size"}),
c07f9fc5 5569
11fdf7f2 5570 Option("rgw_max_put_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144
FG
5571 .set_default(5_G)
5572 .set_description("Max size (in bytes) of regular (non multi-part) object upload.")
5573 .set_long_description(
5574 "Plain object upload is capped at this amount of data. In order to upload larger "
5575 "objects, a special upload mechanism is required. The S3 API provides the "
5576 "multi-part upload, and Swift provides DLO and SLO."),
c07f9fc5 5577
11fdf7f2 5578 Option("rgw_max_put_param_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144
FG
5579 .set_default(1_M)
5580 .set_description("The maximum size (in bytes) of data input of certain RESTful requests."),
c07f9fc5 5581
11fdf7f2 5582 Option("rgw_max_attr_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
3efd9988
FG
5583 .set_default(0)
5584 .set_description("The maximum length of metadata value. 0 skips the check"),
5585
11fdf7f2 5586 Option("rgw_max_attr_name_len", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
3efd9988
FG
5587 .set_default(0)
5588 .set_description("The maximum length of metadata name. 0 skips the check"),
5589
5590 Option("rgw_max_attrs_num_in_req", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
5591 .set_default(0)
5592 .set_description("The maximum number of metadata items that can be put via single request"),
5593
b32b8144 5594 Option("rgw_override_bucket_index_max_shards", Option::TYPE_UINT, Option::LEVEL_DEV)
d2e6a577
FG
5595 .set_default(0)
5596 .set_description(""),
c07f9fc5 5597
d2e6a577
FG
5598 Option("rgw_bucket_index_max_aio", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
5599 .set_default(8)
b32b8144 5600 .set_description("Max number of concurrent RADOS requests when handling bucket shards."),
c07f9fc5 5601
d2e6a577
FG
5602 Option("rgw_enable_quota_threads", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5603 .set_default(true)
b32b8144
FG
5604 .set_description("Enables the quota maintenance thread.")
5605 .set_long_description(
5606 "The quota maintenance thread is responsible for quota related maintenance work. "
5607 "The thread itself can be disabled, but in order for quota to work correctly, at "
5608 "least one RGW in each zone needs to have this thread running. Having the thread "
5609 "enabled on multiple RGW processes within the same zone can spread "
5610 "some of the maintenance work between them.")
5611 .add_see_also({"rgw_enable_gc_threads", "rgw_enable_lc_threads"}),
c07f9fc5 5612
d2e6a577
FG
5613 Option("rgw_enable_gc_threads", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5614 .set_default(true)
b32b8144
FG
5615 .set_description("Enables the garbage collection maintenance thread.")
5616 .set_long_description(
5617 "The garbage collection maintenance thread is responsible for garbage collector "
5618 "maintenance work. The thread itself can be disabled, but in order for garbage "
5619 "collection to work correctly, at least one RGW in each zone needs to have this "
5620 "thread running. Having the thread enabled on multiple RGW processes within the "
5621 "same zone can spread some of the maintenance work between them.")
5622 .add_see_also({"rgw_enable_quota_threads", "rgw_enable_lc_threads"}),
c07f9fc5 5623
d2e6a577
FG
5624 Option("rgw_enable_lc_threads", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5625 .set_default(true)
11fdf7f2 5626 .set_description("Enables the lifecycle maintenance thread. This is required on at least one rgw for each zone.")
b32b8144
FG
5627 .set_long_description(
5628 "The lifecycle maintenance thread is responsible for lifecycle related maintenance "
5629 "work. The thread itself can be disabled, but in order for lifecycle to work "
5630 "correctly, at least one RGW in each zone needs to have this thread running. Having"
5631 "the thread enabled on multiple RGW processes within the same zone can spread "
5632 "some of the maintenance work between them.")
5633 .add_see_also({"rgw_enable_gc_threads", "rgw_enable_quota_threads"}),
c07f9fc5 5634
d2e6a577
FG
5635 Option("rgw_data", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5636 .set_default("/var/lib/ceph/radosgw/$cluster-$id")
11fdf7f2 5637 .set_flag(Option::FLAG_NO_MON_UPDATE)
b32b8144
FG
5638 .set_description("Alternative location for RGW configuration.")
5639 .set_long_description(
5640 "If this is set, the different Ceph system configurables (such as the keyring file "
5641 "will be located in the path that is specified here. "),
c07f9fc5 5642
d2e6a577 5643 Option("rgw_enable_apis", Option::TYPE_STR, Option::LEVEL_ADVANCED)
11fdf7f2 5644 .set_default("s3, s3website, swift, swift_auth, admin, sts")
b32b8144 5645 .set_description("A list of set of RESTful APIs that rgw handles."),
c07f9fc5 5646
d2e6a577
FG
5647 Option("rgw_cache_enabled", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5648 .set_default(true)
b32b8144
FG
5649 .set_description("Enable RGW metadata cache.")
5650 .set_long_description(
5651 "The metadata cache holds metadata entries that RGW requires for processing "
5652 "requests. Metadata entries can be user info, bucket info, and bucket instance "
5653 "info. If not found in the cache, entries will be fetched from the backing "
5654 "RADOS store.")
5655 .add_see_also("rgw_cache_lru_size"),
c07f9fc5 5656
d2e6a577
FG
5657 Option("rgw_cache_lru_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5658 .set_default(10000)
b32b8144
FG
5659 .set_description("Max number of items in RGW metadata cache.")
5660 .set_long_description(
5661 "When full, the RGW metadata cache evicts least recently used entries.")
5662 .add_see_also("rgw_cache_enabled"),
c07f9fc5 5663
d2e6a577
FG
5664 Option("rgw_socket_path", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5665 .set_default("")
b32b8144
FG
5666 .set_description("RGW FastCGI socket path (for FastCGI over Unix domain sockets).")
5667 .add_see_also("rgw_fcgi_socket_backlog"),
c07f9fc5 5668
d2e6a577
FG
5669 Option("rgw_host", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5670 .set_default("")
b32b8144
FG
5671 .set_description("RGW FastCGI host name (for FastCGI over TCP)")
5672 .add_see_also({"rgw_port", "rgw_fcgi_socket_backlog"}),
c07f9fc5 5673
b32b8144 5674 Option("rgw_port", Option::TYPE_STR, Option::LEVEL_BASIC)
d2e6a577 5675 .set_default("")
b32b8144
FG
5676 .set_description("RGW FastCGI port number (for FastCGI over TCP)")
5677 .add_see_also({"rgw_host", "rgw_fcgi_socket_backlog"}),
c07f9fc5 5678
d2e6a577
FG
5679 Option("rgw_dns_name", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5680 .set_default("")
b32b8144
FG
5681 .set_description("The host name that RGW uses.")
5682 .set_long_description(
5683 "This is Needed for virtual hosting of buckets to work properly, unless configured "
5684 "via zonegroup configuration."),
c07f9fc5 5685
d2e6a577
FG
5686 Option("rgw_dns_s3website_name", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5687 .set_default("")
b32b8144
FG
5688 .set_description("The host name that RGW uses for static websites (S3)")
5689 .set_long_description(
5690 "This is needed for virtual hosting of buckets, unless configured via zonegroup "
5691 "configuration."),
c07f9fc5 5692
11fdf7f2
TL
5693 Option("rgw_service_provider_name", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5694 .set_default("")
5695 .set_description("Service provider name which is contained in http response headers")
5696 .set_long_description(
5697 "As S3 or other cloud storage providers do, http response headers should contain the name of the provider. "
5698 "This name will be placed in http header 'Server'."),
5699
d2e6a577
FG
5700 Option("rgw_content_length_compat", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5701 .set_default(false)
b32b8144
FG
5702 .set_description("Multiple content length headers compatibility")
5703 .set_long_description(
5704 "Try to handle requests with abiguous multiple content length headers "
5705 "(Content-Length, Http-Content-Length)."),
c07f9fc5 5706
11fdf7f2
TL
5707 Option("rgw_relaxed_region_enforcement", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5708 .set_default(false)
5709 .set_description("Disable region constraint enforcement")
5710 .set_long_description(
5711 "Enable requests such as bucket creation to succeed irrespective of region restrictions (Jewel compat)."),
5712
d2e6a577
FG
5713 Option("rgw_lifecycle_work_time", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5714 .set_default("00:00-06:00")
b32b8144
FG
5715 .set_description("Lifecycle allowed work time")
5716 .set_long_description("Local time window in which the lifecycle maintenance thread can work."),
c07f9fc5 5717
b32b8144 5718 Option("rgw_lc_lock_max_time", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577
FG
5719 .set_default(60)
5720 .set_description(""),
c07f9fc5 5721
11fdf7f2
TL
5722 Option("rgw_lc_thread_delay", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5723 .set_default(0)
5724 .set_description("Delay after processing of bucket listing chunks (i.e., per 1000 entries) in milliseconds"),
5725
d2e6a577
FG
5726 Option("rgw_lc_max_objs", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5727 .set_default(32)
b32b8144
FG
5728 .set_description("Number of lifecycle data shards")
5729 .set_long_description(
5730 "Number of RADOS objects to use for storing lifecycle index. This can affect "
5731 "concurrency of lifecycle maintenance, but requires multiple RGW processes "
5732 "running on the zone to be utilized."),
c07f9fc5 5733
91327a77
AA
5734 Option("rgw_lc_max_rules", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
5735 .set_default(1000)
5736 .set_description("Max number of lifecycle rules set on one bucket")
5737 .set_long_description("Number of lifecycle rules set on one bucket should be limited."),
5738
d2e6a577
FG
5739 Option("rgw_lc_debug_interval", Option::TYPE_INT, Option::LEVEL_DEV)
5740 .set_default(-1)
5741 .set_description(""),
c07f9fc5 5742
d2e6a577
FG
5743 Option("rgw_mp_lock_max_time", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5744 .set_default(600)
b32b8144
FG
5745 .set_description("Multipart upload max completion time")
5746 .set_long_description(
5747 "Time length to allow completion of a multipart upload operation. This is done "
5748 "to prevent concurrent completions on the same object with the same upload id."),
c07f9fc5 5749
b32b8144 5750 Option("rgw_script_uri", Option::TYPE_STR, Option::LEVEL_DEV)
d2e6a577
FG
5751 .set_default("")
5752 .set_description(""),
c07f9fc5 5753
b32b8144 5754 Option("rgw_request_uri", Option::TYPE_STR, Option::LEVEL_DEV)
d2e6a577
FG
5755 .set_default("")
5756 .set_description(""),
c07f9fc5 5757
28e407b8
AA
5758 Option("rgw_ignore_get_invalid_range", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5759 .set_default(false)
5760 .set_description("Treat invalid (e.g., negative) range request as full")
5761 .set_long_description("Treat invalid (e.g., negative) range request "
5762 "as request for the full object (AWS compatibility)"),
5763
d2e6a577
FG
5764 Option("rgw_swift_url", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5765 .set_default("")
b32b8144
FG
5766 .set_description("Swift-auth storage URL")
5767 .set_long_description(
5768 "Used in conjunction with rgw internal swift authentication. This affects the "
5769 "X-Storage-Url response header value.")
5770 .add_see_also("rgw_swift_auth_entry"),
c07f9fc5 5771
d2e6a577
FG
5772 Option("rgw_swift_url_prefix", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5773 .set_default("swift")
b32b8144
FG
5774 .set_description("Swift URL prefix")
5775 .set_long_description("The URL path prefix for swift requests."),
c07f9fc5 5776
d2e6a577
FG
5777 Option("rgw_swift_auth_url", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5778 .set_default("")
b32b8144
FG
5779 .set_description("Swift auth URL")
5780 .set_long_description(
5781 "Default url to which RGW connects and verifies tokens for v1 auth (if not using "
5782 "internal swift auth)."),
c07f9fc5 5783
d2e6a577
FG
5784 Option("rgw_swift_auth_entry", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5785 .set_default("auth")
b32b8144
FG
5786 .set_description("Swift auth URL prefix")
5787 .set_long_description("URL path prefix for internal swift auth requests.")
5788 .add_see_also("rgw_swift_url"),
c07f9fc5 5789
d2e6a577
FG
5790 Option("rgw_swift_tenant_name", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5791 .set_default("")
b32b8144
FG
5792 .set_description("Swift tenant name")
5793 .set_long_description("Tenant name that is used when constructing the swift path.")
5794 .add_see_also("rgw_swift_account_in_url"),
c07f9fc5 5795
d2e6a577
FG
5796 Option("rgw_swift_account_in_url", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5797 .set_default(false)
b32b8144
FG
5798 .set_description("Swift account encoded in URL")
5799 .set_long_description("Whether the swift account is encoded in the uri path (AUTH_<account>).")
5800 .add_see_also("rgw_swift_tenant_name"),
c07f9fc5 5801
d2e6a577
FG
5802 Option("rgw_swift_enforce_content_length", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5803 .set_default(false)
b32b8144
FG
5804 .set_description("Send content length when listing containers (Swift)")
5805 .set_long_description(
5806 "Whether content length header is needed when listing containers. When this is "
5807 "set to false, RGW will send extra info for each entry in the response."),
c07f9fc5 5808
b32b8144 5809 Option("rgw_keystone_url", Option::TYPE_STR, Option::LEVEL_BASIC)
d2e6a577 5810 .set_default("")
b32b8144 5811 .set_description("The URL to the Keystone server."),
c07f9fc5 5812
d2e6a577
FG
5813 Option("rgw_keystone_admin_token", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5814 .set_default("")
11fdf7f2
TL
5815 .set_description("DEPRECATED: The admin token (shared secret) that is used for the Keystone requests."),
5816
5817 Option("rgw_keystone_admin_token_path", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5818 .set_default("")
5819 .set_description("Path to a file containing the admin token (shared secret) that is used for the Keystone requests."),
c07f9fc5 5820
d2e6a577
FG
5821 Option("rgw_keystone_admin_user", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5822 .set_default("")
b32b8144 5823 .set_description("Keystone admin user."),
c07f9fc5 5824
d2e6a577
FG
5825 Option("rgw_keystone_admin_password", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5826 .set_default("")
11fdf7f2
TL
5827 .set_description("DEPRECATED: Keystone admin password."),
5828
5829 Option("rgw_keystone_admin_password_path", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5830 .set_default("")
5831 .set_description("Path to a file containing the Keystone admin password."),
c07f9fc5 5832
d2e6a577
FG
5833 Option("rgw_keystone_admin_tenant", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5834 .set_default("")
b32b8144 5835 .set_description("Keystone admin user tenant."),
c07f9fc5 5836
d2e6a577
FG
5837 Option("rgw_keystone_admin_project", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5838 .set_default("")
b32b8144 5839 .set_description("Keystone admin user project (for Keystone v3)."),
c07f9fc5 5840
d2e6a577
FG
5841 Option("rgw_keystone_admin_domain", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5842 .set_default("")
b32b8144 5843 .set_description("Keystone admin user domain (for Keystone v3)."),
c07f9fc5 5844
d2e6a577
FG
5845 Option("rgw_keystone_barbican_user", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5846 .set_default("")
b32b8144 5847 .set_description("Keystone user to access barbican secrets."),
c07f9fc5 5848
d2e6a577
FG
5849 Option("rgw_keystone_barbican_password", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5850 .set_default("")
b32b8144 5851 .set_description("Keystone password for barbican user."),
c07f9fc5 5852
d2e6a577
FG
5853 Option("rgw_keystone_barbican_tenant", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5854 .set_default("")
b32b8144 5855 .set_description("Keystone barbican user tenant (Keystone v2.0)."),
c07f9fc5 5856
d2e6a577
FG
5857 Option("rgw_keystone_barbican_project", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5858 .set_default("")
b32b8144 5859 .set_description("Keystone barbican user project (Keystone v3)."),
c07f9fc5 5860
d2e6a577
FG
5861 Option("rgw_keystone_barbican_domain", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5862 .set_default("")
b32b8144 5863 .set_description("Keystone barbican user domain."),
c07f9fc5 5864
d2e6a577
FG
5865 Option("rgw_keystone_api_version", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5866 .set_default(2)
b32b8144 5867 .set_description("Version of Keystone API to use (2 or 3)."),
c07f9fc5 5868
d2e6a577
FG
5869 Option("rgw_keystone_accepted_roles", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5870 .set_default("Member, admin")
b32b8144 5871 .set_description("Only users with one of these roles will be served when doing Keystone authentication."),
c07f9fc5 5872
d2e6a577
FG
5873 Option("rgw_keystone_accepted_admin_roles", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5874 .set_default("")
b32b8144 5875 .set_description("List of roles allowing user to gain admin privileges (Keystone)."),
c07f9fc5 5876
d2e6a577
FG
5877 Option("rgw_keystone_token_cache_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5878 .set_default(10000)
b32b8144
FG
5879 .set_description("Keystone token cache size")
5880 .set_long_description(
5881 "Max number of Keystone tokens that will be cached. Token that is not cached "
5882 "requires RGW to access the Keystone server when authenticating."),
c07f9fc5 5883
d2e6a577 5884 Option("rgw_keystone_revocation_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144
FG
5885 .set_default(15_min)
5886 .set_description("Keystone cache revocation interval")
5887 .set_long_description(
5888 "Time (in seconds) that RGW waits between requests to Keystone for getting a list "
5889 "of revoked tokens. A revoked token might still be considered valid by RGW for "
5890 "this amount of time."),
c07f9fc5 5891
d2e6a577
FG
5892 Option("rgw_keystone_verify_ssl", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5893 .set_default(true)
b32b8144 5894 .set_description("Should RGW verify the Keystone server SSL certificate."),
c07f9fc5 5895
11fdf7f2
TL
5896 Option("rgw_keystone_implicit_tenants", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5897 .set_default(false)
b32b8144
FG
5898 .set_description("RGW Keystone implicit tenants creation")
5899 .set_long_description(
5900 "Implicitly create new users in their own tenant with the same name when "
11fdf7f2 5901 "authenticating via Keystone."),
c07f9fc5 5902
d2e6a577
FG
5903 Option("rgw_cross_domain_policy", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5904 .set_default("<allow-access-from domain=\"*\" secure=\"false\" />")
b32b8144
FG
5905 .set_description("RGW handle cross domain policy")
5906 .set_long_description("Returned cross domain policy when accessing the crossdomain.xml "
5907 "resource (Swift compatiility)."),
c07f9fc5 5908
b32b8144 5909 Option("rgw_healthcheck_disabling_path", Option::TYPE_STR, Option::LEVEL_DEV)
d2e6a577 5910 .set_default("")
b32b8144 5911 .set_description("Swift health check api can be disabled if a file can be accessed in this path."),
c07f9fc5 5912
d2e6a577
FG
5913 Option("rgw_s3_auth_use_rados", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5914 .set_default(true)
b32b8144 5915 .set_description("Should S3 authentication use credentials stored in RADOS backend."),
c07f9fc5 5916
d2e6a577
FG
5917 Option("rgw_s3_auth_use_keystone", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5918 .set_default(false)
b32b8144 5919 .set_description("Should S3 authentication use Keystone."),
c07f9fc5 5920
1adf2230 5921 Option("rgw_s3_auth_order", Option::TYPE_STR, Option::LEVEL_ADVANCED)
11fdf7f2 5922 .set_default("sts, external, local")
1adf2230
AA
5923 .set_description("Authentication strategy order to use for s3 authentication")
5924 .set_long_description(
5925 "Order of authentication strategies to try for s3 authentication, the allowed "
5926 "options are a comma separated list of engines external, local. The "
5927 "default order is to try all the externally configured engines before "
5928 "attempting local rados based authentication"),
5929
d2e6a577
FG
5930 Option("rgw_barbican_url", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5931 .set_default("")
b32b8144 5932 .set_description("URL to barbican server."),
c07f9fc5 5933
d2e6a577
FG
5934 Option("rgw_ldap_uri", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5935 .set_default("ldaps://<ldap.your.domain>")
b32b8144 5936 .set_description("Space-separated list of LDAP servers in URI format."),
c07f9fc5 5937
d2e6a577
FG
5938 Option("rgw_ldap_binddn", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5939 .set_default("uid=admin,cn=users,dc=example,dc=com")
b32b8144 5940 .set_description("LDAP entry RGW will bind with (user match)."),
c07f9fc5 5941
d2e6a577
FG
5942 Option("rgw_ldap_searchdn", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5943 .set_default("cn=users,cn=accounts,dc=example,dc=com")
b32b8144 5944 .set_description("LDAP search base (basedn)."),
c07f9fc5 5945
d2e6a577
FG
5946 Option("rgw_ldap_dnattr", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5947 .set_default("uid")
b32b8144 5948 .set_description("LDAP attribute containing RGW user names (to form binddns)."),
c07f9fc5 5949
d2e6a577
FG
5950 Option("rgw_ldap_secret", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5951 .set_default("/etc/openldap/secret")
b32b8144 5952 .set_description("Path to file containing credentials for rgw_ldap_binddn."),
c07f9fc5 5953
d2e6a577
FG
5954 Option("rgw_s3_auth_use_ldap", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5955 .set_default(false)
b32b8144 5956 .set_description("Should S3 authentication use LDAP."),
c07f9fc5 5957
d2e6a577
FG
5958 Option("rgw_ldap_searchfilter", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5959 .set_default("")
b32b8144 5960 .set_description("LDAP search filter."),
c07f9fc5 5961
11fdf7f2
TL
5962 Option("rgw_opa_url", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5963 .set_default("")
5964 .set_description("URL to OPA server."),
5965
5966 Option("rgw_opa_token", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5967 .set_default("")
5968 .set_description("The Bearer token OPA uses to authenticate client requests."),
5969
5970 Option("rgw_opa_verify_ssl", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5971 .set_default(true)
5972 .set_description("Should RGW verify the OPA server SSL certificate."),
5973
5974 Option("rgw_use_opa_authz", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5975 .set_default(false)
5976 .set_description("Should OPA be used to authorize client requests."),
5977
d2e6a577
FG
5978 Option("rgw_admin_entry", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5979 .set_default("admin")
b32b8144 5980 .set_description("Path prefix to be used for accessing RGW RESTful admin API."),
c07f9fc5 5981
d2e6a577
FG
5982 Option("rgw_enforce_swift_acls", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5983 .set_default(true)
b32b8144
FG
5984 .set_description("RGW enforce swift acls")
5985 .set_long_description(
5986 "Should RGW enforce special Swift-only ACLs. Swift has a special ACL that gives "
5987 "permission to access all objects in a container."),
c07f9fc5 5988
d2e6a577 5989 Option("rgw_swift_token_expiration", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144
FG
5990 .set_default(1_day)
5991 .set_description("Expiration time (in seconds) for token generated through RGW Swift auth."),
c07f9fc5 5992
d2e6a577
FG
5993 Option("rgw_print_continue", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5994 .set_default(true)
b32b8144
FG
5995 .set_description("RGW support of 100-continue")
5996 .set_long_description(
5997 "Should RGW explicitly send 100 (continue) responses. This is mainly relevant when "
5998 "using FastCGI, as some FastCGI modules do not fully support this feature."),
c07f9fc5 5999
d2e6a577
FG
6000 Option("rgw_print_prohibited_content_length", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6001 .set_default(false)
b32b8144
FG
6002 .set_description("RGW RFC-7230 compatibility")
6003 .set_long_description(
6004 "Specifies whether RGW violates RFC 7230 and sends Content-Length with 204 or 304 "
6005 "statuses."),
c07f9fc5 6006
d2e6a577
FG
6007 Option("rgw_remote_addr_param", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6008 .set_default("REMOTE_ADDR")
b32b8144
FG
6009 .set_description("HTTP header that holds the remote address in incoming requests.")
6010 .set_long_description(
6011 "RGW will use this header to extract requests origin. When RGW runs behind "
6012 "a reverse proxy, the remote address header will point at the proxy's address "
6013 "and not at the originator's address. Therefore it is sometimes possible to "
6014 "have the proxy add the originator's address in a separate HTTP header, which "
6015 "will allow RGW to log it correctly."
6016 )
6017 .add_see_also("rgw_enable_ops_log"),
c07f9fc5 6018
b32b8144 6019 Option("rgw_op_thread_timeout", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577 6020 .set_default(10*60)
b32b8144 6021 .set_description("Timeout for async rados coroutine operations."),
c07f9fc5 6022
b32b8144 6023 Option("rgw_op_thread_suicide_timeout", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577
FG
6024 .set_default(0)
6025 .set_description(""),
c07f9fc5 6026
b32b8144 6027 Option("rgw_thread_pool_size", Option::TYPE_INT, Option::LEVEL_BASIC)
91327a77 6028 .set_default(512)
b32b8144
FG
6029 .set_description("RGW requests handling thread pool size.")
6030 .set_long_description(
6031 "This parameter determines the number of concurrent requests RGW can process "
6032 "when using either the civetweb, or the fastcgi frontends. The higher this "
6033 "number is, RGW will be able to deal with more concurrent requests at the "
6034 "cost of more resource utilization."),
c07f9fc5 6035
d2e6a577
FG
6036 Option("rgw_num_control_oids", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6037 .set_default(8)
b32b8144
FG
6038 .set_description("Number of control objects used for cross-RGW communication.")
6039 .set_long_description(
6040 "RGW uses certain control objects to send messages between different RGW "
6041 "processes running on the same zone. These messages include metadata cache "
6042 "invalidation info that is being sent when metadata is modified (such as "
6043 "user or bucket information). A higher number of control objects allows "
6044 "better concurrency of these messages, at the cost of more resource "
6045 "utilization."),
c07f9fc5 6046
d2e6a577
FG
6047 Option("rgw_num_rados_handles", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
6048 .set_default(1)
b32b8144
FG
6049 .set_description("Number of librados handles that RGW uses.")
6050 .set_long_description(
6051 "This param affects the number of separate librados handles it uses to "
6052 "connect to the RADOS backend, which directly affects the number of connections "
6053 "RGW will have to each OSD. A higher number affects resource utilization."),
c07f9fc5 6054
d2e6a577
FG
6055 Option("rgw_verify_ssl", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6056 .set_default(true)
b32b8144
FG
6057 .set_description("Should RGW verify SSL when connecing to a remote HTTP server")
6058 .set_long_description(
6059 "RGW can send requests to other RGW servers (e.g., in multi-site sync work). "
6060 "This configurable selects whether RGW should verify the certificate for "
6061 "the remote peer and host.")
6062 .add_see_also("rgw_keystone_verify_ssl"),
c07f9fc5 6063
d2e6a577
FG
6064 Option("rgw_nfs_lru_lanes", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6065 .set_default(5)
6066 .set_description(""),
c07f9fc5 6067
d2e6a577
FG
6068 Option("rgw_nfs_lru_lane_hiwat", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6069 .set_default(911)
6070 .set_description(""),
c07f9fc5 6071
d2e6a577
FG
6072 Option("rgw_nfs_fhcache_partitions", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6073 .set_default(3)
6074 .set_description(""),
c07f9fc5 6075
d2e6a577
FG
6076 Option("rgw_nfs_fhcache_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6077 .set_default(2017)
6078 .set_description(""),
c07f9fc5 6079
d2e6a577
FG
6080 Option("rgw_nfs_namespace_expire_secs", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6081 .set_default(300)
6082 .set_min(1)
6083 .set_description(""),
6084
6085 Option("rgw_nfs_max_gc", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6086 .set_default(300)
6087 .set_min(1)
6088 .set_description(""),
6089
6090 Option("rgw_nfs_write_completion_interval_s", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6091 .set_default(10)
6092 .set_description(""),
6093
494da23a
TL
6094 Option("rgw_rados_pool_autoscale_bias", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6095 .set_default(4.0)
6096 .set_min_max(0.01, 100000.0)
6097 .set_description("pg_autoscale_bias value for RGW metadata (omap-heavy) pools"),
6098
6099 Option("rgw_rados_pool_pg_num_min", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
6100 .set_default(8)
6101 .set_min_max(1, 1024)
6102 .set_description("pg_num_min value for RGW metadata (omap-heavy) pools"),
6103
d2e6a577
FG
6104 Option("rgw_zone", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6105 .set_default("")
b32b8144
FG
6106 .set_description("Zone name")
6107 .add_see_also({"rgw_zonegroup", "rgw_realm"}),
d2e6a577
FG
6108
6109 Option("rgw_zone_root_pool", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6110 .set_default(".rgw.root")
b32b8144
FG
6111 .set_description("Zone root pool name")
6112 .set_long_description(
6113 "The zone root pool, is the pool where the RGW zone configuration located."
6114 )
6115 .add_see_also({"rgw_zonegroup_root_pool", "rgw_realm_root_pool", "rgw_period_root_pool"}),
d2e6a577
FG
6116
6117 Option("rgw_default_zone_info_oid", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6118 .set_default("default.zone")
b32b8144
FG
6119 .set_description("Default zone info object id")
6120 .set_long_description(
6121 "Name of the RADOS object that holds the default zone information."
6122 ),
d2e6a577
FG
6123
6124 Option("rgw_region", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6125 .set_default("")
b32b8144
FG
6126 .set_description("Region name")
6127 .set_long_description(
6128 "Obsolete config option. The rgw_zonegroup option should be used instead.")
6129 .add_see_also("rgw_zonegroup"),
d2e6a577
FG
6130
6131 Option("rgw_region_root_pool", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6132 .set_default(".rgw.root")
b32b8144
FG
6133 .set_description("Region root pool")
6134 .set_long_description(
6135 "Obsolete config option. The rgw_zonegroup_root_pool should be used instead.")
6136 .add_see_also("rgw_zonegroup_root_pool"),
d2e6a577
FG
6137
6138 Option("rgw_default_region_info_oid", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6139 .set_default("default.region")
b32b8144
FG
6140 .set_description("Default region info object id")
6141 .set_long_description(
6142 "Obsolete config option. The rgw_default_zonegroup_info_oid should be used instead.")
6143 .add_see_also("rgw_default_zonegroup_info_oid"),
d2e6a577
FG
6144
6145 Option("rgw_zonegroup", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6146 .set_default("")
b32b8144
FG
6147 .set_description("Zonegroup name")
6148 .add_see_also({"rgw_zone", "rgw_realm"}),
d2e6a577
FG
6149
6150 Option("rgw_zonegroup_root_pool", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6151 .set_default(".rgw.root")
b32b8144
FG
6152 .set_description("Zonegroup root pool")
6153 .set_long_description(
6154 "The zonegroup root pool, is the pool where the RGW zonegroup configuration located."
6155 )
6156 .add_see_also({"rgw_zone_root_pool", "rgw_realm_root_pool", "rgw_period_root_pool"}),
d2e6a577
FG
6157
6158 Option("rgw_default_zonegroup_info_oid", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6159 .set_default("default.zonegroup")
6160 .set_description(""),
6161
6162 Option("rgw_realm", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6163 .set_default("")
6164 .set_description(""),
6165
6166 Option("rgw_realm_root_pool", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6167 .set_default(".rgw.root")
b32b8144
FG
6168 .set_description("Realm root pool")
6169 .set_long_description(
6170 "The realm root pool, is the pool where the RGW realm configuration located."
6171 )
6172 .add_see_also({"rgw_zonegroup_root_pool", "rgw_zone_root_pool", "rgw_period_root_pool"}),
d2e6a577
FG
6173
6174 Option("rgw_default_realm_info_oid", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6175 .set_default("default.realm")
6176 .set_description(""),
6177
6178 Option("rgw_period_root_pool", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6179 .set_default(".rgw.root")
b32b8144
FG
6180 .set_description("Period root pool")
6181 .set_long_description(
11fdf7f2 6182 "The period root pool, is the pool where the RGW period configuration located."
b32b8144
FG
6183 )
6184 .add_see_also({"rgw_zonegroup_root_pool", "rgw_zone_root_pool", "rgw_realm_root_pool"}),
d2e6a577 6185
b32b8144 6186 Option("rgw_period_latest_epoch_info_oid", Option::TYPE_STR, Option::LEVEL_DEV)
d2e6a577
FG
6187 .set_default(".latest_epoch")
6188 .set_description(""),
6189
6190 Option("rgw_log_nonexistent_bucket", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6191 .set_default(false)
b32b8144
FG
6192 .set_description("Should RGW log operations on bucket that does not exist")
6193 .set_long_description(
6194 "This config option applies to the ops log. When this option is set, the ops log "
6195 "will log operations that are sent to non existing buckets. These operations "
6196 "inherently fail, and do not correspond to a specific user.")
6197 .add_see_also("rgw_enable_ops_log"),
d2e6a577
FG
6198
6199 Option("rgw_log_object_name", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6200 .set_default("%Y-%m-%d-%H-%i-%n")
b32b8144
FG
6201 .set_description("Ops log object name format")
6202 .set_long_description(
6203 "Defines the format of the RADOS objects names that ops log uses to store ops "
6204 "log data")
6205 .add_see_also("rgw_enable_ops_log"),
d2e6a577
FG
6206
6207 Option("rgw_log_object_name_utc", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6208 .set_default(false)
b32b8144
FG
6209 .set_description("Should ops log object name based on UTC")
6210 .set_long_description(
6211 "If set, the names of the RADOS objects that hold the ops log data will be based "
6212 "on UTC time zone. If not set, it will use the local time zone.")
6213 .add_see_also({"rgw_enable_ops_log", "rgw_log_object_name"}),
d2e6a577
FG
6214
6215 Option("rgw_usage_max_shards", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6216 .set_default(32)
b32b8144
FG
6217 .set_description("Number of shards for usage log.")
6218 .set_long_description(
6219 "The number of RADOS objects that RGW will use in order to store the usage log "
6220 "data.")
6221 .add_see_also("rgw_enable_usage_log"),
d2e6a577
FG
6222
6223 Option("rgw_usage_max_user_shards", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6224 .set_default(1)
6225 .set_min(1)
b32b8144
FG
6226 .set_description("Number of shards for single user in usage log")
6227 .set_long_description(
6228 "The number of shards that a single user will span over in the usage log.")
6229 .add_see_also("rgw_enable_usage_log"),
c07f9fc5 6230
d2e6a577
FG
6231 Option("rgw_enable_ops_log", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6232 .set_default(false)
b32b8144
FG
6233 .set_description("Enable ops log")
6234 .add_see_also({"rgw_log_nonexistent_bucket", "rgw_log_object_name", "rgw_ops_log_rados",
6235 "rgw_ops_log_socket_path"}),
c07f9fc5 6236
d2e6a577
FG
6237 Option("rgw_enable_usage_log", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6238 .set_default(false)
b32b8144
FG
6239 .set_description("Enable usage log")
6240 .add_see_also("rgw_usage_max_shards"),
c07f9fc5 6241
d2e6a577
FG
6242 Option("rgw_ops_log_rados", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6243 .set_default(true)
b32b8144
FG
6244 .set_description("Use RADOS for ops log")
6245 .set_long_description(
6246 "If set, RGW will store ops log information in RADOS.")
6247 .add_see_also({"rgw_enable_ops_log"}),
c07f9fc5 6248
d2e6a577
FG
6249 Option("rgw_ops_log_socket_path", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6250 .set_default("")
b32b8144
FG
6251 .set_description("Unix domain socket path for ops log.")
6252 .set_long_description(
6253 "Path to unix domain socket that RGW will listen for connection on. When connected, "
6254 "RGW will send ops log data through it.")
6255 .add_see_also({"rgw_enable_ops_log", "rgw_ops_log_data_backlog"}),
c07f9fc5 6256
11fdf7f2 6257 Option("rgw_ops_log_data_backlog", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577 6258 .set_default(5 << 20)
b32b8144
FG
6259 .set_description("Ops log socket backlog")
6260 .set_long_description(
6261 "Maximum amount of data backlog that RGW can keep when ops log is configured to "
6262 "send info through unix domain socket. When data backlog is higher than this, "
6263 "ops log entries will be lost. In order to avoid ops log information loss, the "
6264 "listener needs to clear data (by reading it) quickly enough.")
6265 .add_see_also({"rgw_enable_ops_log", "rgw_ops_log_socket_path"}),
c07f9fc5 6266
d2e6a577
FG
6267 Option("rgw_fcgi_socket_backlog", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6268 .set_default(1024)
b32b8144
FG
6269 .set_description("FastCGI socket connection backlog")
6270 .set_long_description(
6271 "Size of FastCGI connection backlog. This reflects the maximum number of new "
6272 "connection requests that RGW can handle concurrently without dropping any. ")
6273 .add_see_also({"rgw_host", "rgw_socket_path"}),
c07f9fc5 6274
d2e6a577
FG
6275 Option("rgw_usage_log_flush_threshold", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6276 .set_default(1024)
b32b8144
FG
6277 .set_description("Number of entries in usage log before flushing")
6278 .set_long_description(
6279 "This is the max number of entries that will be held in the usage log, before it "
6280 "will be flushed to the backend. Note that the usage log is periodically flushed, "
6281 "even if number of entries does not reach this threshold. A usage log entry "
6282 "corresponds to one or more operations on a single bucket.i")
6283 .add_see_also({"rgw_enable_usage_log", "rgw_usage_log_tick_interval"}),
c07f9fc5 6284
d2e6a577
FG
6285 Option("rgw_usage_log_tick_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6286 .set_default(30)
b32b8144
FG
6287 .set_description("Number of seconds between usage log flush cycles")
6288 .set_long_description(
6289 "The number of seconds between consecutive usage log flushes. The usage log will "
6290 "also flush itself to the backend if the number of pending entries reaches a "
6291 "certain threshold.")
6292 .add_see_also({"rgw_enable_usage_log", "rgw_usage_log_flush_threshold"}),
c07f9fc5 6293
b32b8144 6294 Option("rgw_init_timeout", Option::TYPE_INT, Option::LEVEL_BASIC)
d2e6a577 6295 .set_default(300)
b32b8144
FG
6296 .set_description("Initialization timeout")
6297 .set_long_description(
6298 "The time length (in seconds) that RGW will allow for its initialization. RGW "
6299 "process will give up and quit if initialization is not complete after this amount "
6300 "of time."),
c07f9fc5 6301
b32b8144 6302 Option("rgw_mime_types_file", Option::TYPE_STR, Option::LEVEL_BASIC)
d2e6a577 6303 .set_default("/etc/mime.types")
b32b8144
FG
6304 .set_description("Path to local mime types file")
6305 .set_long_description(
6306 "The mime types file is needed in Swift when uploading an object. If object's "
6307 "content type is not specified, RGW will use data from this file to assign "
6308 "a content type to the object."),
c07f9fc5 6309
d2e6a577
FG
6310 Option("rgw_gc_max_objs", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6311 .set_default(32)
b32b8144
FG
6312 .set_description("Number of shards for garbage collector data")
6313 .set_long_description(
6314 "The number of garbage collector data shards, is the number of RADOS objects that "
6315 "RGW will use to store the garbage collection information on.")
11fdf7f2 6316 .add_see_also({"rgw_gc_obj_min_wait", "rgw_gc_processor_max_time", "rgw_gc_processor_period", "rgw_gc_max_concurrent_io"}),
c07f9fc5 6317
d2e6a577 6318 Option("rgw_gc_obj_min_wait", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144 6319 .set_default(2_hr)
11fdf7f2 6320 .set_description("Garbage collection object expiration time")
b32b8144
FG
6321 .set_long_description(
6322 "The length of time (in seconds) that the RGW collector will wait before purging "
6323 "a deleted object's data. RGW will not remove object immediately, as object could "
6324 "still have readers. A mechanism exists to increase the object's expiration time "
6325 "when it's being read.")
11fdf7f2 6326 .add_see_also({"rgw_gc_max_objs", "rgw_gc_processor_max_time", "rgw_gc_processor_period", "rgw_gc_max_concurrent_io"}),
c07f9fc5 6327
d2e6a577 6328 Option("rgw_gc_processor_max_time", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144
FG
6329 .set_default(1_hr)
6330 .set_description("Length of time GC processor can lease shard")
6331 .set_long_description(
6332 "Garbage collection thread in RGW process holds a lease on its data shards. These "
6333 "objects contain the information about the objects that need to be removed. RGW "
6334 "takes a lease in order to prevent multiple RGW processes from handling the same "
11fdf7f2 6335 "objects concurrently. This time signifies that maximum amount of time (in seconds) that RGW "
b32b8144
FG
6336 "is allowed to hold that lease. In the case where RGW goes down uncleanly, this "
6337 "is the amount of time where processing of that data shard will be blocked.")
11fdf7f2 6338 .add_see_also({"rgw_gc_max_objs", "rgw_gc_obj_min_wait", "rgw_gc_processor_period", "rgw_gc_max_concurrent_io"}),
c07f9fc5 6339
d2e6a577 6340 Option("rgw_gc_processor_period", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144
FG
6341 .set_default(1_hr)
6342 .set_description("Garbage collector cycle run time")
6343 .set_long_description(
6344 "The amount of time between the start of consecutive runs of the garbage collector "
6345 "threads. If garbage collector runs takes more than this period, it will not wait "
6346 "before running again.")
11fdf7f2
TL
6347 .add_see_also({"rgw_gc_max_objs", "rgw_gc_obj_min_wait", "rgw_gc_processor_max_time", "rgw_gc_max_concurrent_io", "rgw_gc_max_trim_chunk"}),
6348
6349 Option("rgw_gc_max_concurrent_io", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6350 .set_default(10)
6351 .set_description("Max concurrent RADOS IO operations for garbage collection")
6352 .set_long_description(
6353 "The maximum number of concurrent IO operations that the RGW garbage collection "
6354 "thread will use when purging old data.")
6355 .add_see_also({"rgw_gc_max_objs", "rgw_gc_obj_min_wait", "rgw_gc_processor_max_time", "rgw_gc_max_trim_chunk"}),
6356
6357 Option("rgw_gc_max_trim_chunk", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6358 .set_default(16)
6359 .set_description("Max number of keys to remove from garbage collector log in a single operation")
6360 .add_see_also({"rgw_gc_max_objs", "rgw_gc_obj_min_wait", "rgw_gc_processor_max_time", "rgw_gc_max_concurrent_io"}),
c07f9fc5 6361
d2e6a577
FG
6362 Option("rgw_s3_success_create_obj_status", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6363 .set_default(0)
b32b8144
FG
6364 .set_description("HTTP return code override for object creation")
6365 .set_long_description(
11fdf7f2 6366 "If not zero, this is the HTTP return code that will be returned on a successful S3 "
b32b8144 6367 "object creation."),
c07f9fc5 6368
d2e6a577
FG
6369 Option("rgw_resolve_cname", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6370 .set_default(false)
b32b8144
FG
6371 .set_description("Support vanity domain names via CNAME")
6372 .set_long_description(
6373 "If true, RGW will query DNS when detecting that it's serving a request that was "
6374 "sent to a host in another domain. If a CNAME record is configured for that domain "
6375 "it will use it instead. This gives user to have the ability of creating a unique "
6376 "domain of their own to point at data in their bucket."),
c07f9fc5 6377
11fdf7f2 6378 Option("rgw_obj_stripe_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144
FG
6379 .set_default(4_M)
6380 .set_description("RGW object stripe size")
6381 .set_long_description(
6382 "The size of an object stripe for RGW objects. This is the maximum size a backing "
6383 "RADOS object will have. RGW objects that are larger than this will span over "
6384 "multiple objects."),
c07f9fc5 6385
d2e6a577
FG
6386 Option("rgw_extended_http_attrs", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6387 .set_default("")
b32b8144
FG
6388 .set_description("RGW support extended HTTP attrs")
6389 .set_long_description(
6390 "Add new set of attributes that could be set on an object. These extra attributes "
6391 "can be set through HTTP header fields when putting the objects. If set, these "
6392 "attributes will return as HTTP fields when doing GET/HEAD on the object."),
c07f9fc5 6393
d2e6a577
FG
6394 Option("rgw_exit_timeout_secs", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6395 .set_default(120)
b32b8144
FG
6396 .set_description("RGW shutdown timeout")
6397 .set_long_description("Number of seconds to wait for a process before exiting unconditionally."),
c07f9fc5 6398
11fdf7f2 6399 Option("rgw_get_obj_window_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144
FG
6400 .set_default(16_M)
6401 .set_description("RGW object read window size")
6402 .set_long_description("The window size in bytes for a single object read request"),
c07f9fc5 6403
11fdf7f2 6404 Option("rgw_get_obj_max_req_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144
FG
6405 .set_default(4_M)
6406 .set_description("RGW object read chunk size")
6407 .set_long_description(
6408 "The maximum request size of a single object read operation sent to RADOS"),
c07f9fc5 6409
d2e6a577
FG
6410 Option("rgw_relaxed_s3_bucket_names", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6411 .set_default(false)
b32b8144
FG
6412 .set_description("RGW enable relaxed S3 bucket names")
6413 .set_long_description("RGW enable relaxed S3 bucket name rules for US region buckets."),
c07f9fc5 6414
d2e6a577
FG
6415 Option("rgw_defer_to_bucket_acls", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6416 .set_default("")
b32b8144
FG
6417 .set_description("Bucket ACLs override object ACLs")
6418 .set_long_description(
6419 "If not empty, a string that selects that mode of operation. 'recurse' will use "
6420 "bucket's ACL for the authorizaton. 'full-control' will allow users that users "
6421 "that have full control permission on the bucket have access to the object."),
c07f9fc5 6422
d2e6a577
FG
6423 Option("rgw_list_buckets_max_chunk", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6424 .set_default(1000)
b32b8144
FG
6425 .set_description("Max number of buckets to retrieve in a single listing operation")
6426 .set_long_description(
6427 "When RGW fetches lists of user's buckets from the backend, this is the max number "
6428 "of entries it will try to retrieve in a single operation. Note that the backend "
6429 "may choose to return a smaller number of entries."),
c07f9fc5 6430
d2e6a577
FG
6431 Option("rgw_md_log_max_shards", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6432 .set_default(64)
b32b8144
FG
6433 .set_description("RGW number of metadata log shards")
6434 .set_long_description(
6435 "The number of shards the RGW metadata log entries will reside in. This affects "
6436 "the metadata sync parallelism as a shard can only be processed by a single "
6437 "RGW at a time"),
c07f9fc5 6438
b32b8144 6439 Option("rgw_curl_wait_timeout_ms", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577
FG
6440 .set_default(1000)
6441 .set_description(""),
c07f9fc5 6442
1adf2230
AA
6443 Option("rgw_curl_low_speed_limit", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6444 .set_default(1024)
6445 .set_long_description(
6446 "It contains the average transfer speed in bytes per second that the "
6447 "transfer should be below during rgw_curl_low_speed_time seconds for libcurl "
6448 "to consider it to be too slow and abort. Set it zero to disable this."),
6449
6450 Option("rgw_curl_low_speed_time", Option::TYPE_INT, Option::LEVEL_ADVANCED)
91327a77 6451 .set_default(300)
1adf2230
AA
6452 .set_long_description(
6453 "It contains the time in number seconds that the transfer speed should be below "
6454 "the rgw_curl_low_speed_limit for the library to consider it too slow and abort. "
6455 "Set it zero to disable this."),
6456
d2e6a577
FG
6457 Option("rgw_copy_obj_progress", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6458 .set_default(true)
b32b8144
FG
6459 .set_description("Send progress report through copy operation")
6460 .set_long_description(
6461 "If true, RGW will send progress information when copy operation is executed. "),
c07f9fc5 6462
11fdf7f2 6463 Option("rgw_copy_obj_progress_every_bytes", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144
FG
6464 .set_default(1_M)
6465 .set_description("Send copy-object progress info after these many bytes"),
c07f9fc5 6466
d2e6a577
FG
6467 Option("rgw_obj_tombstone_cache_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6468 .set_default(1000)
b32b8144
FG
6469 .set_description("Max number of entries to keep in tombstone cache")
6470 .set_long_description(
6471 "The tombstone cache is used when doing a multi-zone data sync. RGW keeps "
6472 "there information about removed objects which is needed in order to prevent "
6473 "re-syncing of objects that were already removed."),
c07f9fc5 6474
d2e6a577
FG
6475 Option("rgw_data_log_window", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6476 .set_default(30)
b32b8144
FG
6477 .set_description("Data log time window")
6478 .set_long_description(
6479 "The data log keeps information about buckets that have objectst that were "
6480 "modified within a specific timeframe. The sync process then knows which buckets "
6481 "are needed to be scanned for data sync."),
c07f9fc5 6482
b32b8144 6483 Option("rgw_data_log_changes_size", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577 6484 .set_default(1000)
b32b8144
FG
6485 .set_description("Max size of pending changes in data log")
6486 .set_long_description(
6487 "RGW will trigger update to the data log if the number of pending entries reached "
6488 "this number."),
c07f9fc5 6489
d2e6a577
FG
6490 Option("rgw_data_log_num_shards", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6491 .set_default(128)
b32b8144
FG
6492 .set_description("Number of data log shards")
6493 .set_long_description(
6494 "The number of shards the RGW data log entries will reside in. This affects the "
6495 "data sync parallelism as a shard can only be processed by a single RGW at a time."),
c07f9fc5 6496
b32b8144 6497 Option("rgw_data_log_obj_prefix", Option::TYPE_STR, Option::LEVEL_DEV)
d2e6a577
FG
6498 .set_default("data_log")
6499 .set_description(""),
c07f9fc5 6500
d2e6a577
FG
6501 Option("rgw_bucket_quota_ttl", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6502 .set_default(600)
b32b8144
FG
6503 .set_description("Bucket quota stats cache TTL")
6504 .set_long_description(
6505 "Length of time for bucket stats to be cached within RGW instance."),
c07f9fc5 6506
b32b8144 6507 Option("rgw_bucket_quota_soft_threshold", Option::TYPE_FLOAT, Option::LEVEL_BASIC)
d2e6a577 6508 .set_default(0.95)
b32b8144
FG
6509 .set_description("RGW quota soft threshold")
6510 .set_long_description(
6511 "Threshold from which RGW doesn't rely on cached info for quota "
6512 "decisions. This is done for higher accuracy of the quota mechanism at "
6513 "cost of performance, when getting close to the quota limit. The value "
6514 "configured here is the ratio between the data usage to the max usage "
6515 "as specified by the quota."),
c07f9fc5 6516
d2e6a577
FG
6517 Option("rgw_bucket_quota_cache_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6518 .set_default(10000)
b32b8144
FG
6519 .set_description("RGW quota stats cache size")
6520 .set_long_description(
6521 "Maximum number of entries in the quota stats cache."),
c07f9fc5 6522
b32b8144 6523 Option("rgw_bucket_default_quota_max_objects", Option::TYPE_INT, Option::LEVEL_BASIC)
d2e6a577 6524 .set_default(-1)
b32b8144
FG
6525 .set_description("Default quota for max objects in a bucket")
6526 .set_long_description(
6527 "The default quota configuration for max number of objects in a bucket. A "
6528 "negative number means 'unlimited'."),
c07f9fc5 6529
d2e6a577
FG
6530 Option("rgw_bucket_default_quota_max_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6531 .set_default(-1)
b32b8144
FG
6532 .set_description("Default quota for total size in a bucket")
6533 .set_long_description(
6534 "The default quota configuration for total size of objects in a bucket. A "
6535 "negative number means 'unlimited'."),
c07f9fc5 6536
d2e6a577
FG
6537 Option("rgw_expose_bucket", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6538 .set_default(false)
b32b8144
FG
6539 .set_description("Send Bucket HTTP header with the response")
6540 .set_long_description(
6541 "If true, RGW will send a Bucket HTTP header with the responses. The header will "
6542 "contain the name of the bucket the operation happened on."),
c07f9fc5 6543
b32b8144 6544 Option("rgw_frontends", Option::TYPE_STR, Option::LEVEL_BASIC)
11fdf7f2 6545 .set_default("beast port=7480")
b32b8144
FG
6546 .set_description("RGW frontends configuration")
6547 .set_long_description(
6548 "A comma delimited list of frontends configuration. Each configuration contains "
6549 "the type of the frontend followed by an optional space delimited set of "
6550 "key=value config parameters."),
c07f9fc5 6551
d2e6a577
FG
6552 Option("rgw_user_quota_bucket_sync_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6553 .set_default(180)
b32b8144
FG
6554 .set_description("User quota bucket sync interval")
6555 .set_long_description(
6556 "Time period for accumulating modified buckets before syncing these stats."),
c07f9fc5 6557
d2e6a577 6558 Option("rgw_user_quota_sync_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144
FG
6559 .set_default(1_day)
6560 .set_description("User quota sync interval")
6561 .set_long_description(
6562 "Time period for accumulating modified buckets before syncing entire user stats."),
c07f9fc5 6563
d2e6a577
FG
6564 Option("rgw_user_quota_sync_idle_users", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6565 .set_default(false)
b32b8144
FG
6566 .set_description("Should sync idle users quota")
6567 .set_long_description(
6568 "Whether stats for idle users be fully synced."),
c07f9fc5 6569
d2e6a577 6570 Option("rgw_user_quota_sync_wait_time", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144
FG
6571 .set_default(1_day)
6572 .set_description("User quota full-sync wait time")
6573 .set_long_description(
6574 "Minimum time between two full stats sync for non-idle users."),
c07f9fc5 6575
b32b8144 6576 Option("rgw_user_default_quota_max_objects", Option::TYPE_INT, Option::LEVEL_BASIC)
d2e6a577 6577 .set_default(-1)
b32b8144
FG
6578 .set_description("User quota max objects")
6579 .set_long_description(
6580 "The default quota configuration for total number of objects for a single user. A "
6581 "negative number means 'unlimited'."),
c07f9fc5 6582
b32b8144 6583 Option("rgw_user_default_quota_max_size", Option::TYPE_INT, Option::LEVEL_BASIC)
d2e6a577 6584 .set_default(-1)
b32b8144
FG
6585 .set_description("User quota max size")
6586 .set_long_description(
6587 "The default quota configuration for total size of objects for a single user. A "
6588 "negative number means 'unlimited'."),
c07f9fc5 6589
11fdf7f2 6590 Option("rgw_multipart_min_part_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144
FG
6591 .set_default(5_M)
6592 .set_description("Minimum S3 multipart-upload part size")
6593 .set_long_description(
6594 "When doing a multipart upload, each part (other than the last part) should be "
6595 "at least this size."),
c07f9fc5 6596
d2e6a577
FG
6597 Option("rgw_multipart_part_upload_limit", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6598 .set_default(10000)
b32b8144 6599 .set_description("Max number of parts in multipart upload"),
c07f9fc5 6600
d2e6a577
FG
6601 Option("rgw_max_slo_entries", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6602 .set_default(1000)
b32b8144 6603 .set_description("Max number of entries in Swift Static Large Object manifest"),
c07f9fc5 6604
b32b8144
FG
6605 Option("rgw_olh_pending_timeout_sec", Option::TYPE_INT, Option::LEVEL_DEV)
6606 .set_default(1_hr)
6607 .set_description("Max time for pending OLH change to complete")
6608 .set_long_description(
6609 "OLH is a versioned object's logical head. Operations on it are journaled and "
6610 "as pending before completion. If an operation doesn't complete with this amount "
6611 "of seconds, we remove the operation from the journal."),
c07f9fc5 6612
b32b8144 6613 Option("rgw_user_max_buckets", Option::TYPE_INT, Option::LEVEL_BASIC)
d2e6a577 6614 .set_default(1000)
b32b8144
FG
6615 .set_description("Max number of buckets per user")
6616 .set_long_description(
6617 "A user can create this many buckets. Zero means unlimmited, negative number means "
6618 "user cannot create any buckets (although user will retain buckets already created."),
c07f9fc5 6619
d2e6a577 6620 Option("rgw_objexp_gc_interval", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144
FG
6621 .set_default(10_min)
6622 .set_description("Swift objects expirer garbage collector interval"),
c07f9fc5 6623
d2e6a577
FG
6624 Option("rgw_objexp_hints_num_shards", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
6625 .set_default(127)
b32b8144
FG
6626 .set_description("Number of object expirer data shards")
6627 .set_long_description(
6628 "The number of shards the (Swift) object expirer will store its data on."),
c07f9fc5 6629
b32b8144 6630 Option("rgw_objexp_chunk_size", Option::TYPE_UINT, Option::LEVEL_DEV)
d2e6a577
FG
6631 .set_default(100)
6632 .set_description(""),
c07f9fc5 6633
b32b8144 6634 Option("rgw_enable_static_website", Option::TYPE_BOOL, Option::LEVEL_BASIC)
d2e6a577 6635 .set_default(false)
b32b8144
FG
6636 .set_description("Enable static website APIs")
6637 .set_long_description(
6638 "This configurable controls whether RGW handles the website control APIs. RGW can "
6639 "server static websites if s3website hostnames are configured, and unrelated to "
6640 "this configurable."),
c07f9fc5 6641
494da23a
TL
6642 Option("rgw_user_unique_email", Option::TYPE_BOOL, Option::LEVEL_BASIC)
6643 .set_default(true)
6644 .set_description("Require local RGW users to have unique email addresses")
6645 .set_long_description(
6646 "Enforce builtin user accounts to have unique email addresses. This "
6647 "setting is historical. In future, non-enforcement of email address "
6648 "uniqueness is likely to become the default."),
6649
b32b8144 6650 Option("rgw_log_http_headers", Option::TYPE_STR, Option::LEVEL_BASIC)
d2e6a577 6651 .set_default("")
b32b8144
FG
6652 .set_description("List of HTTP headers to log")
6653 .set_long_description(
6654 "A comma delimited list of HTTP headers to log when seen, ignores case (e.g., "
6655 "http_x_forwarded_for)."),
c07f9fc5 6656
d2e6a577
FG
6657 Option("rgw_num_async_rados_threads", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6658 .set_default(32)
b32b8144
FG
6659 .set_description("Number of concurrent RADOS operations in multisite sync")
6660 .set_long_description(
6661 "The number of concurrent RADOS IO operations that will be triggered for handling "
6662 "multisite sync operations. This includes control related work, and not the actual "
6663 "sync operations."),
c07f9fc5 6664
d2e6a577
FG
6665 Option("rgw_md_notify_interval_msec", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6666 .set_default(200)
b32b8144
FG
6667 .set_description("Length of time to aggregate metadata changes")
6668 .set_long_description(
6669 "Length of time (in milliseconds) in which the master zone aggregates all the "
11fdf7f2 6670 "metadata changes that occurred, before sending notifications to all the other "
b32b8144 6671 "zones."),
c07f9fc5 6672
d2e6a577
FG
6673 Option("rgw_run_sync_thread", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6674 .set_default(true)
b32b8144 6675 .set_description("Should run sync thread"),
c07f9fc5 6676
b32b8144 6677 Option("rgw_sync_lease_period", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577
FG
6678 .set_default(120)
6679 .set_description(""),
c07f9fc5 6680
d2e6a577
FG
6681 Option("rgw_sync_log_trim_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6682 .set_default(1200)
b32b8144
FG
6683 .set_description("Sync log trim interval")
6684 .set_long_description(
6685 "Time in seconds between attempts to trim sync logs."),
6686
6687 Option("rgw_sync_log_trim_max_buckets", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6688 .set_default(16)
6689 .set_description("Maximum number of buckets to trim per interval")
6690 .set_long_description("The maximum number of buckets to consider for bucket index log trimming each trim interval, regardless of the number of bucket index shards. Priority is given to buckets with the most sync activity over the last trim interval.")
6691 .add_see_also("rgw_sync_log_trim_interval")
6692 .add_see_also("rgw_sync_log_trim_min_cold_buckets")
6693 .add_see_also("rgw_sync_log_trim_concurrent_buckets"),
6694
6695 Option("rgw_sync_log_trim_min_cold_buckets", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6696 .set_default(4)
6697 .set_description("Minimum number of cold buckets to trim per interval")
6698 .set_long_description("Of the `rgw_sync_log_trim_max_buckets` selected for bucket index log trimming each trim interval, at least this many of them must be 'cold' buckets. These buckets are selected in order from the list of all bucket instances, to guarantee that all buckets will be visited eventually.")
6699 .add_see_also("rgw_sync_log_trim_interval")
6700 .add_see_also("rgw_sync_log_trim_max_buckets")
6701 .add_see_also("rgw_sync_log_trim_concurrent_buckets"),
6702
6703 Option("rgw_sync_log_trim_concurrent_buckets", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6704 .set_default(4)
6705 .set_description("Maximum number of buckets to trim in parallel")
6706 .add_see_also("rgw_sync_log_trim_interval")
6707 .add_see_also("rgw_sync_log_trim_max_buckets")
6708 .add_see_also("rgw_sync_log_trim_min_cold_buckets"),
c07f9fc5 6709
d2e6a577
FG
6710 Option("rgw_sync_data_inject_err_probability", Option::TYPE_FLOAT, Option::LEVEL_DEV)
6711 .set_default(0)
6712 .set_description(""),
c07f9fc5 6713
d2e6a577
FG
6714 Option("rgw_sync_meta_inject_err_probability", Option::TYPE_FLOAT, Option::LEVEL_DEV)
6715 .set_default(0)
6716 .set_description(""),
c07f9fc5 6717
11fdf7f2
TL
6718 Option("rgw_sync_trace_history_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
6719 .set_default(4096)
6720 .set_description("Sync trace history size")
6721 .set_long_description(
6722 "Maximum number of complete sync trace entries to keep."),
6723
6724 Option("rgw_sync_trace_per_node_log_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6725 .set_default(32)
6726 .set_description("Sync trace per-node log size")
6727 .set_long_description(
6728 "The number of log entries to keep per sync-trace node."),
6729
6730 Option("rgw_sync_trace_servicemap_update_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6731 .set_default(10)
6732 .set_description("Sync-trace service-map update interval")
6733 .set_long_description(
6734 "Number of seconds between service-map updates of sync-trace events."),
6735
d2e6a577
FG
6736 Option("rgw_period_push_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6737 .set_default(2)
b32b8144
FG
6738 .set_description("Period push interval")
6739 .set_long_description(
6740 "Number of seconds to wait before retrying 'period push' operation."),
c07f9fc5 6741
d2e6a577
FG
6742 Option("rgw_period_push_interval_max", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6743 .set_default(30)
b32b8144
FG
6744 .set_description("Period push maximum interval")
6745 .set_long_description(
6746 "The max number of seconds to wait before retrying 'period push' after exponential "
6747 "backoff."),
c07f9fc5 6748
d2e6a577
FG
6749 Option("rgw_safe_max_objects_per_shard", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6750 .set_default(100*1024)
b32b8144
FG
6751 .set_description("Safe number of objects per shard")
6752 .set_long_description(
6753 "This is the max number of objects per bucket index shard that RGW considers "
6754 "safe. RGW will warn if it identifies a bucket where its per-shard count is "
6755 "higher than a percentage of this number.")
6756 .add_see_also("rgw_shard_warning_threshold"),
c07f9fc5 6757
d2e6a577
FG
6758 Option("rgw_shard_warning_threshold", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6759 .set_default(90)
b32b8144
FG
6760 .set_description("Warn about max objects per shard")
6761 .set_long_description(
6762 "Warn if number of objects per shard in a specific bucket passed this percentage "
6763 "of the safe number.")
6764 .add_see_also("rgw_safe_max_objects_per_shard"),
c07f9fc5 6765
d2e6a577
FG
6766 Option("rgw_swift_versioning_enabled", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6767 .set_default(false)
b32b8144 6768 .set_description("Enable Swift versioning"),
c07f9fc5 6769
d2e6a577
FG
6770 Option("rgw_swift_custom_header", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6771 .set_default("")
b32b8144
FG
6772 .set_description("Enable swift custom header")
6773 .set_long_description(
6774 "If not empty, specifies a name of HTTP header that can include custom data. When "
6775 "uploading an object, if this header is passed RGW will store this header info "
6776 "and it will be available when listing the bucket."),
c07f9fc5 6777
d2e6a577
FG
6778 Option("rgw_swift_need_stats", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6779 .set_default(true)
b32b8144 6780 .set_description("Enable stats on bucket listing in Swift"),
c07f9fc5 6781
11fdf7f2 6782 Option("rgw_reshard_num_logs", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577 6783 .set_default(16)
11fdf7f2
TL
6784 .set_min(1)
6785 .set_description("")
6786 .add_service("rgw"),
c07f9fc5 6787
11fdf7f2
TL
6788 Option("rgw_reshard_bucket_lock_duration", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
6789 .set_default(360)
6790 .set_min(30)
6791 .set_description("Number of seconds the timeout on the reshard locks (bucket reshard lock and reshard log lock) are set to. As a reshard proceeds these locks can be renewed/extended. If too short, reshards cannot complete and will fail, causing a future reshard attempt. If too long a hung or crashed reshard attempt will keep the bucket locked for an extended period, not allowing RGW to detect the failed reshard attempt and recover.")
6792 .add_tag("performance")
6793 .add_service("rgw"),
6794
6795 Option("rgw_reshard_batch_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
6796 .set_default(64)
6797 .set_min(8)
6798 .set_description("Number of reshard entries to batch together before sending the operations to the CLS back-end")
6799 .add_tag("performance")
6800 .add_service("rgw"),
6801
6802 Option("rgw_reshard_max_aio", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
6803 .set_default(128)
6804 .set_min(16)
6805 .set_description("Maximum number of outstanding asynchronous I/O operations to allow at a time during resharding")
6806 .add_tag("performance")
6807 .add_service("rgw"),
c07f9fc5 6808
f64942e4
AA
6809 Option("rgw_trust_forwarded_https", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6810 .set_default(false)
6811 .set_description("Trust Forwarded and X-Forwarded-Proto headers")
6812 .set_long_description(
6813 "When a proxy in front of radosgw is used for ssl termination, radosgw "
6814 "does not know whether incoming http connections are secure. Enable "
6815 "this option to trust the Forwarded and X-Forwarded-Proto headers sent "
6816 "by the proxy when determining whether the connection is secure. This "
6817 "is required for some features, such as server side encryption.")
6818 .add_see_also("rgw_crypt_require_ssl"),
6819
d2e6a577
FG
6820 Option("rgw_crypt_require_ssl", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6821 .set_default(true)
b32b8144 6822 .set_description("Requests including encryption key headers must be sent over ssl"),
c07f9fc5 6823
b32b8144 6824 Option("rgw_crypt_default_encryption_key", Option::TYPE_STR, Option::LEVEL_DEV)
d2e6a577
FG
6825 .set_default("")
6826 .set_description(""),
6827
b32b8144 6828 Option("rgw_crypt_s3_kms_encryption_keys", Option::TYPE_STR, Option::LEVEL_DEV)
d2e6a577
FG
6829 .set_default("")
6830 .set_description(""),
6831
6832 Option("rgw_crypt_suppress_logs", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6833 .set_default(true)
b32b8144 6834 .set_description("Suppress logs that might print client key"),
d2e6a577
FG
6835
6836 Option("rgw_list_bucket_min_readahead", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6837 .set_default(1000)
b32b8144 6838 .set_description("Minimum number of entries to request from rados for bucket listing"),
c07f9fc5 6839
d2e6a577
FG
6840 Option("rgw_rest_getusage_op_compat", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6841 .set_default(false)
b32b8144 6842 .set_description("REST GetUsage request backward compatibility"),
c07f9fc5 6843
d2e6a577
FG
6844 Option("rgw_torrent_flag", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6845 .set_default(false)
28e407b8
AA
6846 .set_description("When true, uploaded objects will calculate and store "
6847 "a SHA256 hash of object data so the object can be "
6848 "retrieved as a torrent file"),
c07f9fc5 6849
d2e6a577
FG
6850 Option("rgw_torrent_tracker", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6851 .set_default("")
11fdf7f2 6852 .set_description("Torrent field announce and announce list"),
c07f9fc5 6853
d2e6a577
FG
6854 Option("rgw_torrent_createby", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6855 .set_default("")
b32b8144 6856 .set_description("torrent field created by"),
c07f9fc5 6857
d2e6a577
FG
6858 Option("rgw_torrent_comment", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6859 .set_default("")
b32b8144 6860 .set_description("Torrent field comment"),
c07f9fc5 6861
d2e6a577
FG
6862 Option("rgw_torrent_encoding", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6863 .set_default("")
b32b8144 6864 .set_description("torrent field encoding"),
c07f9fc5 6865
d2e6a577
FG
6866 Option("rgw_data_notify_interval_msec", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6867 .set_default(200)
6868 .set_description("data changes notification interval to followers"),
c07f9fc5 6869
d2e6a577
FG
6870 Option("rgw_torrent_origin", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6871 .set_default("")
b32b8144 6872 .set_description("Torrent origin"),
c07f9fc5 6873
11fdf7f2 6874 Option("rgw_torrent_sha_unit", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577
FG
6875 .set_default(512*1024)
6876 .set_description(""),
c07f9fc5 6877
b32b8144 6878 Option("rgw_dynamic_resharding", Option::TYPE_BOOL, Option::LEVEL_BASIC)
181888fb 6879 .set_default(true)
b32b8144
FG
6880 .set_description("Enable dynamic resharding")
6881 .set_long_description(
6882 "If true, RGW will dynamicall increase the number of shards in buckets that have "
6883 "a high number of objects per shard.")
6884 .add_see_also("rgw_max_objs_per_shard"),
c07f9fc5 6885
11fdf7f2 6886 Option("rgw_max_objs_per_shard", Option::TYPE_UINT, Option::LEVEL_BASIC)
d2e6a577 6887 .set_default(100000)
b32b8144
FG
6888 .set_description("Max objects per shard for dynamic resharding")
6889 .set_long_description(
6890 "This is the max number of objects per bucket index shard that RGW will "
6891 "allow with dynamic resharding. RGW will trigger an automatic reshard operation "
6892 "on the bucket if it exceeds this number.")
6893 .add_see_also("rgw_dynamic_resharding"),
c07f9fc5 6894
d2e6a577 6895 Option("rgw_reshard_thread_interval", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 6896 .set_default(10_min)
11fdf7f2
TL
6897 .set_min(10_min)
6898 .set_description("Number of seconds between processing of reshard log entries"),
b32b8144
FG
6899
6900 Option("rgw_cache_expiry_interval", Option::TYPE_UINT,
6901 Option::LEVEL_ADVANCED)
11fdf7f2
TL
6902 .set_default(15_min)
6903 .set_description("Number of seconds before entries in the cache are "
6904 "assumed stale and re-fetched. Zero is never.")
b32b8144
FG
6905 .add_tag("performance")
6906 .add_service("rgw")
11fdf7f2 6907 .set_long_description("The Rados Gateway stores metadata and objects in "
b32b8144
FG
6908 "an internal cache. This should be kept consistent "
6909 "by the OSD's relaying notify events between "
6910 "multiple watching RGW processes. In the event "
6911 "that this notification protocol fails, bounding "
6912 "the length of time that any data in the cache will "
6913 "be assumed valid will ensure that any RGW instance "
6914 "that falls out of sync will eventually recover. "
6915 "This seems to be an issue mostly for large numbers "
6916 "of RGW instances under heavy use. If you would like "
6917 "to turn off cache expiry, set this value to zero."),
6918
11fdf7f2
TL
6919 Option("rgw_inject_notify_timeout_probability", Option::TYPE_FLOAT,
6920 Option::LEVEL_DEV)
6921 .set_default(0)
6922 .add_tag("fault injection")
6923 .add_tag("testing")
6924 .add_service("rgw")
6925 .set_min_max(0.0, 1.0)
6926 .set_description("Likelihood of ignoring a notify")
6927 .set_long_description("This is the probability that the RGW cache will "
6928 "ignore a cache notify message. It exists to help "
6929 "with the development and testing of cache "
6930 "consistency and recovery improvements. Please "
6931 "do not set it in a production cluster, as it "
6932 "actively causes failures. Set this to a floating "
6933 "point value between 0 and 1."),
6934 Option("rgw_max_notify_retries", Option::TYPE_UINT,
6935 Option::LEVEL_ADVANCED)
6936 .set_default(3)
6937 .add_tag("error recovery")
6938 .add_service("rgw")
6939 .set_description("Number of attempts to notify peers before giving up.")
6940 .set_long_description("The number of times we will attempt to update "
6941 "a peer's cache in the event of error before giving "
6942 "up. This is unlikely to be an issue unless your "
6943 "cluster is very heavily loaded. Beware that "
6944 "increasing this value may cause some operations to "
6945 "take longer in exceptional cases and thus may, "
6946 "rarely, cause clients to time out."),
6947 Option("rgw_sts_entry", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6948 .set_default("sts")
6949 .set_description("STS URL prefix")
6950 .set_long_description("URL path prefix for internal STS requests."),
6951
6952 Option("rgw_sts_key", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6953 .set_default("sts")
6954 .set_description("STS Key")
6955 .set_long_description("Key used for encrypting/ decrypting session token."),
6956
6957 Option("rgw_s3_auth_use_sts", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6958 .set_default(false)
6959 .set_description("Should S3 authentication use STS."),
6960
6961 Option("rgw_sts_max_session_duration", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
6962 .set_default(43200)
6963 .set_description("Session token max duration")
6964 .set_long_description("Max duration in seconds for which the session token is valid."),
6965
f64942e4
AA
6966 Option("rgw_max_listing_results", Option::TYPE_UINT,
6967 Option::LEVEL_ADVANCED)
6968 .set_default(1000)
6969 .set_min_max(1, 100000)
6970 .add_service("rgw")
6971 .set_description("Upper bound on results in listing operations, ListBucket max-keys")
6972 .set_long_description("This caps the maximum permitted value for listing-like operations in RGW S3. "
6973 "Affects ListBucket(max-keys), "
6974 "ListBucketVersions(max-keys), "
6975 "ListBucketMultiPartUploads(max-uploads), "
6976 "ListMultipartUploadParts(max-parts)"),
11fdf7f2
TL
6977
6978 Option("rgw_sts_token_introspection_url", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6979 .set_default("")
6980 .set_description("STS Web Token introspection URL")
6981 .set_long_description("URL for introspecting an STS Web Token."),
6982
6983 Option("rgw_sts_client_id", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6984 .set_default("")
6985 .set_description("Client Id")
6986 .set_long_description("Client Id needed for introspecting a Web Token."),
6987
6988 Option("rgw_sts_client_secret", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6989 .set_default("")
6990 .set_description("Client Secret")
6991 .set_long_description("Client Secret needed for introspecting a Web Token."),
6992
6993 Option("rgw_max_concurrent_requests", Option::TYPE_INT, Option::LEVEL_BASIC)
6994 .set_default(1024)
6995 .set_description("Maximum number of concurrent HTTP requests.")
6996 .set_long_description(
6997 "Maximum number of concurrent HTTP requests that the beast frontend "
6998 "will process. Tuning this can help to limit memory usage under heavy "
6999 "load.")
7000 .add_tag("performance")
7001 .add_see_also("rgw_frontends"),
7002
7003 Option("rgw_scheduler_type", Option::TYPE_STR, Option::LEVEL_ADVANCED)
7004 .set_default("throttler")
7005 .set_description("Set the type of dmclock scheduler, defaults to throttler "
7006 "Other valid values are dmclock which is experimental"),
7007
7008 Option("rgw_dmclock_admin_res", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7009 .set_default(100.0)
7010 .set_description("mclock reservation for admin requests")
7011 .add_see_also("rgw_dmclock_admin_wgt")
7012 .add_see_also("rgw_dmclock_admin_lim"),
7013
7014 Option("rgw_dmclock_admin_wgt", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7015 .set_default(100.0)
7016 .set_description("mclock weight for admin requests")
7017 .add_see_also("rgw_dmclock_admin_res")
7018 .add_see_also("rgw_dmclock_admin_lim"),
7019
7020 Option("rgw_dmclock_admin_lim", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7021 .set_default(0.0)
7022 .set_description("mclock limit for admin requests")
7023 .add_see_also("rgw_dmclock_admin_res")
7024 .add_see_also("rgw_dmclock_admin_wgt"),
7025
7026 Option("rgw_dmclock_auth_res", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7027 .set_default(200.0)
7028 .set_description("mclock reservation for object data requests")
7029 .add_see_also("rgw_dmclock_auth_wgt")
7030 .add_see_also("rgw_dmclock_auth_lim"),
7031
7032 Option("rgw_dmclock_auth_wgt", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7033 .set_default(100.0)
7034 .set_description("mclock weight for object data requests")
7035 .add_see_also("rgw_dmclock_auth_res")
7036 .add_see_also("rgw_dmclock_auth_lim"),
7037
7038 Option("rgw_dmclock_auth_lim", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7039 .set_default(0.0)
7040 .set_description("mclock limit for object data requests")
7041 .add_see_also("rgw_dmclock_auth_res")
7042 .add_see_also("rgw_dmclock_auth_wgt"),
7043
7044 Option("rgw_dmclock_data_res", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7045 .set_default(500.0)
7046 .set_description("mclock reservation for object data requests")
7047 .add_see_also("rgw_dmclock_data_wgt")
7048 .add_see_also("rgw_dmclock_data_lim"),
7049
7050 Option("rgw_dmclock_data_wgt", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7051 .set_default(500.0)
7052 .set_description("mclock weight for object data requests")
7053 .add_see_also("rgw_dmclock_data_res")
7054 .add_see_also("rgw_dmclock_data_lim"),
7055
7056 Option("rgw_dmclock_data_lim", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7057 .set_default(0.0)
7058 .set_description("mclock limit for object data requests")
7059 .add_see_also("rgw_dmclock_data_res")
7060 .add_see_also("rgw_dmclock_data_wgt"),
7061
7062 Option("rgw_dmclock_metadata_res", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7063 .set_default(500.0)
7064 .set_description("mclock reservation for metadata requests")
7065 .add_see_also("rgw_dmclock_metadata_wgt")
7066 .add_see_also("rgw_dmclock_metadata_lim"),
7067
7068 Option("rgw_dmclock_metadata_wgt", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7069 .set_default(500.0)
7070 .set_description("mclock weight for metadata requests")
7071 .add_see_also("rgw_dmclock_metadata_res")
7072 .add_see_also("rgw_dmclock_metadata_lim"),
7073
7074 Option("rgw_dmclock_metadata_lim", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7075 .set_default(0.0)
7076 .set_description("mclock limit for metadata requests")
7077 .add_see_also("rgw_dmclock_metadata_res")
7078 .add_see_also("rgw_dmclock_metadata_wgt"),
7079
d2e6a577
FG
7080 });
7081}
c07f9fc5 7082
d2e6a577
FG
7083static std::vector<Option> get_rbd_options() {
7084 return std::vector<Option>({
7085 Option("rbd_default_pool", Option::TYPE_STR, Option::LEVEL_ADVANCED)
7086 .set_default("rbd")
181888fb 7087 .set_description("default pool for storing new images")
d2e6a577 7088 .set_validator([](std::string *value, std::string *error_message){
11fdf7f2
TL
7089 std::regex pattern("^[^@/]+$");
7090 if (!std::regex_match (*value, pattern)) {
d2e6a577
FG
7091 *value = "rbd";
7092 *error_message = "invalid RBD default pool, resetting to 'rbd'";
7093 }
7094 return 0;
7095 }),
7096
7097 Option("rbd_default_data_pool", Option::TYPE_STR, Option::LEVEL_ADVANCED)
7098 .set_default("")
181888fb 7099 .set_description("default pool for storing data blocks for new images")
d2e6a577 7100 .set_validator([](std::string *value, std::string *error_message){
11fdf7f2
TL
7101 std::regex pattern("^[^@/]*$");
7102 if (!std::regex_match (*value, pattern)) {
d2e6a577
FG
7103 *value = "";
7104 *error_message = "ignoring invalid RBD data pool";
7105 }
7106 return 0;
7107 }),
7108
7109 Option("rbd_default_features", Option::TYPE_STR, Option::LEVEL_ADVANCED)
7110 .set_default("layering,exclusive-lock,object-map,fast-diff,deep-flatten")
181888fb
FG
7111 .set_description("default v2 image features for new images")
7112 .set_long_description(
7113 "RBD features are only applicable for v2 images. This setting accepts "
7114 "either an integer bitmask value or comma-delimited string of RBD "
7115 "feature names. This setting is always internally stored as an integer "
7116 "bitmask value. The mapping between feature bitmask value and feature "
7117 "name is as follows: +1 -> layering, +2 -> striping, "
7118 "+4 -> exclusive-lock, +8 -> object-map, +16 -> fast-diff, "
7119 "+32 -> deep-flatten, +64 -> journaling, +128 -> data-pool")
11fdf7f2
TL
7120 .set_flag(Option::FLAG_RUNTIME)
7121 .set_validator([](std::string *value, std::string *error_message) {
7122 ostringstream ss;
7123 uint64_t features = librbd::rbd_features_from_string(*value, &ss);
7124 // Leave this in integer form to avoid breaking Cinder. Someday
7125 // we would like to present this in string form instead...
7126 *value = stringify(features);
7127 if (ss.str().size()) {
7128 return -EINVAL;
7129 }
7130 return 0;
7131 }),
7132
7133 Option("rbd_op_threads", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577 7134 .set_default(1)
181888fb 7135 .set_description("number of threads to utilize for internal processing"),
d2e6a577 7136
11fdf7f2 7137 Option("rbd_op_thread_timeout", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577 7138 .set_default(60)
181888fb 7139 .set_description("time in seconds for detecting a hung thread"),
d2e6a577
FG
7140
7141 Option("rbd_non_blocking_aio", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
7142 .set_default(true)
181888fb 7143 .set_description("process AIO ops from a dispatch thread to prevent blocking"),
d2e6a577
FG
7144
7145 Option("rbd_cache", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
7146 .set_default(true)
181888fb 7147 .set_description("whether to enable caching (writeback unless rbd_cache_max_dirty is 0)"),
d2e6a577
FG
7148
7149 Option("rbd_cache_writethrough_until_flush", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
7150 .set_default(true)
181888fb
FG
7151 .set_description("whether to make writeback caching writethrough until "
7152 "flush is called, to be sure the user of librbd will send "
7153 "flushes so that writeback is safe"),
d2e6a577 7154
11fdf7f2
TL
7155 Option("rbd_cache_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
7156 .set_default(32_M)
181888fb 7157 .set_description("cache size in bytes"),
d2e6a577 7158
11fdf7f2
TL
7159 Option("rbd_cache_max_dirty", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
7160 .set_default(24_M)
181888fb 7161 .set_description("dirty limit in bytes - set to 0 for write-through caching"),
d2e6a577 7162
11fdf7f2
TL
7163 Option("rbd_cache_target_dirty", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
7164 .set_default(16_M)
181888fb 7165 .set_description("target dirty limit in bytes"),
d2e6a577
FG
7166
7167 Option("rbd_cache_max_dirty_age", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7168 .set_default(1.0)
181888fb 7169 .set_description("seconds in cache before writeback starts"),
d2e6a577 7170
11fdf7f2 7171 Option("rbd_cache_max_dirty_object", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577 7172 .set_default(0)
181888fb 7173 .set_description("dirty limit for objects - set to 0 for auto calculate from rbd_cache_size"),
d2e6a577
FG
7174
7175 Option("rbd_cache_block_writes_upfront", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
7176 .set_default(false)
181888fb 7177 .set_description("whether to block writes to the cache before the aio_write call completes"),
d2e6a577 7178
11fdf7f2 7179 Option("rbd_concurrent_management_ops", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577
FG
7180 .set_default(10)
7181 .set_min(1)
181888fb 7182 .set_description("how many operations can be in flight for a management operation like deleting or resizing an image"),
c07f9fc5 7183
d2e6a577
FG
7184 Option("rbd_balance_snap_reads", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
7185 .set_default(false)
181888fb 7186 .set_description("distribute snap read requests to random OSD"),
c07f9fc5 7187
d2e6a577
FG
7188 Option("rbd_localize_snap_reads", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
7189 .set_default(false)
181888fb 7190 .set_description("localize snap read requests to closest OSD"),
c07f9fc5 7191
d2e6a577
FG
7192 Option("rbd_balance_parent_reads", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
7193 .set_default(false)
181888fb 7194 .set_description("distribute parent read requests to random OSD"),
c07f9fc5 7195
d2e6a577
FG
7196 Option("rbd_localize_parent_reads", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
7197 .set_default(false)
181888fb 7198 .set_description("localize parent requests to closest OSD"),
c07f9fc5 7199
11fdf7f2 7200 Option("rbd_sparse_read_threshold_bytes", Option::TYPE_SIZE,
b32b8144
FG
7201 Option::LEVEL_ADVANCED)
7202 .set_default(64_K)
7203 .set_description("threshold for issuing a sparse-read")
7204 .set_long_description("minimum number of sequential bytes to read against "
7205 "an object before issuing a sparse-read request to "
11fdf7f2 7206 "the cluster. 0 implies it must be a full object read "
b32b8144
FG
7207 "to issue a sparse-read, 1 implies always use "
7208 "sparse-read, and any value larger than the maximum "
7209 "object size will disable sparse-read for all "
7210 "requests"),
7211
11fdf7f2 7212 Option("rbd_readahead_trigger_requests", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577 7213 .set_default(10)
181888fb 7214 .set_description("number of sequential requests necessary to trigger readahead"),
c07f9fc5 7215
11fdf7f2 7216 Option("rbd_readahead_max_bytes", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 7217 .set_default(512_K)
181888fb 7218 .set_description("set to 0 to disable readahead"),
c07f9fc5 7219
11fdf7f2 7220 Option("rbd_readahead_disable_after_bytes", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 7221 .set_default(50_M)
181888fb 7222 .set_description("how many bytes are read in total before readahead is disabled"),
c07f9fc5 7223
d2e6a577
FG
7224 Option("rbd_clone_copy_on_read", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
7225 .set_default(false)
181888fb 7226 .set_description("copy-up parent image blocks to clone upon read request"),
c07f9fc5 7227
d2e6a577
FG
7228 Option("rbd_blacklist_on_break_lock", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
7229 .set_default(true)
181888fb 7230 .set_description("whether to blacklist clients whose lock was broken"),
c07f9fc5 7231
11fdf7f2 7232 Option("rbd_blacklist_expire_seconds", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577 7233 .set_default(0)
181888fb 7234 .set_description("number of seconds to blacklist - set to 0 for OSD default"),
c07f9fc5 7235
11fdf7f2 7236 Option("rbd_request_timed_out_seconds", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577 7237 .set_default(30)
181888fb 7238 .set_description("number of seconds before maintenance request times out"),
c07f9fc5 7239
d2e6a577 7240 Option("rbd_skip_partial_discard", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
11fdf7f2
TL
7241 .set_default(true)
7242 .set_description("skip discard (zero) of unaligned extents within an object"),
7243
7244 Option("rbd_discard_granularity_bytes", Option::TYPE_UINT,
7245 Option::LEVEL_ADVANCED)
7246 .set_default(64_K)
7247 .set_min_max(4_K, 32_M)
7248 .set_validator([](std::string *value, std::string *error_message){
7249 uint64_t f = strict_si_cast<uint64_t>(value->c_str(), error_message);
7250 if (!error_message->empty()) {
7251 return -EINVAL;
7252 } else if (!isp2(f)) {
7253 *error_message = "value must be a power of two";
7254 return -EINVAL;
7255 }
7256 return 0;
7257 })
7258 .set_description("minimum aligned size of discard operations"),
c07f9fc5 7259
d2e6a577
FG
7260 Option("rbd_enable_alloc_hint", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
7261 .set_default(true)
181888fb 7262 .set_description("when writing a object, it will issue a hint to osd backend to indicate the expected size object need"),
c07f9fc5 7263
d2e6a577
FG
7264 Option("rbd_tracing", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
7265 .set_default(false)
181888fb 7266 .set_description("true if LTTng-UST tracepoints should be enabled"),
c07f9fc5 7267
d2e6a577
FG
7268 Option("rbd_blkin_trace_all", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
7269 .set_default(false)
181888fb 7270 .set_description("create a blkin trace for all RBD requests"),
c07f9fc5 7271
d2e6a577
FG
7272 Option("rbd_validate_pool", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
7273 .set_default(true)
181888fb 7274 .set_description("validate empty pools for RBD compatibility"),
c07f9fc5 7275
d2e6a577
FG
7276 Option("rbd_validate_names", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
7277 .set_default(true)
181888fb 7278 .set_description("validate new image names for RBD compatibility"),
d2e6a577
FG
7279
7280 Option("rbd_auto_exclusive_lock_until_manual_request", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
7281 .set_default(true)
181888fb 7282 .set_description("automatically acquire/release exclusive lock until it is explicitly requested"),
d2e6a577 7283
11fdf7f2
TL
7284 Option("rbd_move_to_trash_on_remove", Option::TYPE_BOOL, Option::LEVEL_BASIC)
7285 .set_default(false)
7286 .set_description("automatically move images to the trash when deleted"),
7287
7288 Option("rbd_move_to_trash_on_remove_expire_seconds", Option::TYPE_UINT, Option::LEVEL_BASIC)
7289 .set_default(0)
7290 .set_description("default number of seconds to protect deleted images in the trash"),
7291
d2e6a577
FG
7292 Option("rbd_mirroring_resync_after_disconnect", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
7293 .set_default(false)
181888fb 7294 .set_description("automatically start image resync after mirroring is disconnected due to being laggy"),
d2e6a577 7295
11fdf7f2
TL
7296 Option("rbd_mirroring_delete_delay", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
7297 .set_default(0)
7298 .set_description("time-delay in seconds for rbd-mirror delete propagation"),
7299
7300 Option("rbd_mirroring_replay_delay", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577 7301 .set_default(0)
181888fb 7302 .set_description("time-delay in seconds for rbd-mirror asynchronous replication"),
d2e6a577 7303
11fdf7f2 7304 Option("rbd_default_format", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577 7305 .set_default(2)
181888fb 7306 .set_description("default image format for new images"),
d2e6a577 7307
11fdf7f2 7308 Option("rbd_default_order", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577 7309 .set_default(22)
181888fb 7310 .set_description("default order (data block object size) for new images"),
d2e6a577
FG
7311
7312 Option("rbd_default_stripe_count", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
7313 .set_default(0)
181888fb 7314 .set_description("default stripe count for new images"),
d2e6a577 7315
11fdf7f2 7316 Option("rbd_default_stripe_unit", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577 7317 .set_default(0)
181888fb 7318 .set_description("default stripe width for new images"),
d2e6a577
FG
7319
7320 Option("rbd_default_map_options", Option::TYPE_STR, Option::LEVEL_ADVANCED)
7321 .set_default("")
181888fb 7322 .set_description("default krbd map options"),
c07f9fc5 7323
11fdf7f2
TL
7324 Option("rbd_default_clone_format", Option::TYPE_STR, Option::LEVEL_ADVANCED)
7325 .set_enum_allowed({"1", "2", "auto"})
7326 .set_default("auto")
7327 .set_description("default internal format for handling clones")
7328 .set_long_description("This sets the internal format for tracking cloned "
7329 "images. The setting of '1' requires attaching to "
7330 "protected snapshots that cannot be removed until "
7331 "the clone is removed/flattened. The setting of '2' "
7332 "will allow clones to be attached to any snapshot "
7333 "and permits removing in-use parent snapshots but "
7334 "requires Mimic or later clients. The default "
7335 "setting of 'auto' will use the v2 format if the "
7336 "cluster is configured to require mimic or later "
7337 "clients.")
7338 .set_flag(Option::FLAG_RUNTIME),
7339
d2e6a577 7340 Option("rbd_journal_order", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
a8e16298 7341 .set_min_max(12, 26)
d2e6a577 7342 .set_default(24)
181888fb 7343 .set_description("default order (object size) for journal data objects"),
c07f9fc5 7344
d2e6a577
FG
7345 Option("rbd_journal_splay_width", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
7346 .set_default(4)
181888fb 7347 .set_description("number of active journal objects"),
c07f9fc5 7348
d2e6a577
FG
7349 Option("rbd_journal_commit_age", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7350 .set_default(5)
181888fb 7351 .set_description("commit time interval, seconds"),
c07f9fc5 7352
494da23a
TL
7353 Option("rbd_journal_object_writethrough_until_flush", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
7354 .set_default(true)
7355 .set_description("when enabled, the rbd_journal_object_flush* configuration "
7356 "options are ignored until the first flush so that batched "
7357 "journal IO is known to be safe for consistency"),
7358
11fdf7f2 7359 Option("rbd_journal_object_flush_interval", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577 7360 .set_default(0)
181888fb 7361 .set_description("maximum number of pending commits per journal object"),
c07f9fc5 7362
11fdf7f2 7363 Option("rbd_journal_object_flush_bytes", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
494da23a 7364 .set_default(1_M)
181888fb 7365 .set_description("maximum number of pending bytes per journal object"),
c07f9fc5 7366
d2e6a577
FG
7367 Option("rbd_journal_object_flush_age", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7368 .set_default(0)
181888fb 7369 .set_description("maximum age (in seconds) for pending commits"),
c07f9fc5 7370
11fdf7f2
TL
7371 Option("rbd_journal_object_max_in_flight_appends", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
7372 .set_default(0)
7373 .set_description("maximum number of in-flight appends per journal object"),
7374
d2e6a577
FG
7375 Option("rbd_journal_pool", Option::TYPE_STR, Option::LEVEL_ADVANCED)
7376 .set_default("")
181888fb 7377 .set_description("pool for journal objects"),
c07f9fc5 7378
11fdf7f2 7379 Option("rbd_journal_max_payload_bytes", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577 7380 .set_default(16384)
181888fb 7381 .set_description("maximum journal payload size before splitting"),
c07f9fc5 7382
11fdf7f2 7383 Option("rbd_journal_max_concurrent_object_sets", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577 7384 .set_default(0)
181888fb 7385 .set_description("maximum number of object sets a journal client can be behind before it is automatically unregistered"),
11fdf7f2
TL
7386
7387 Option("rbd_qos_iops_limit", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
7388 .set_default(0)
7389 .set_description("the desired limit of IO operations per second"),
7390
7391 Option("rbd_qos_bps_limit", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
7392 .set_default(0)
7393 .set_description("the desired limit of IO bytes per second"),
7394
7395 Option("rbd_qos_read_iops_limit", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
7396 .set_default(0)
7397 .set_description("the desired limit of read operations per second"),
7398
7399 Option("rbd_qos_write_iops_limit", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
7400 .set_default(0)
7401 .set_description("the desired limit of write operations per second"),
7402
7403 Option("rbd_qos_read_bps_limit", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
7404 .set_default(0)
7405 .set_description("the desired limit of read bytes per second"),
7406
7407 Option("rbd_qos_write_bps_limit", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
7408 .set_default(0)
7409 .set_description("the desired limit of write bytes per second"),
7410
7411 Option("rbd_qos_iops_burst", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
7412 .set_default(0)
7413 .set_description("the desired burst limit of IO operations"),
7414
7415 Option("rbd_qos_bps_burst", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
7416 .set_default(0)
7417 .set_description("the desired burst limit of IO bytes"),
7418
7419 Option("rbd_qos_read_iops_burst", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
7420 .set_default(0)
7421 .set_description("the desired burst limit of read operations"),
7422
7423 Option("rbd_qos_write_iops_burst", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
7424 .set_default(0)
7425 .set_description("the desired burst limit of write operations"),
7426
7427 Option("rbd_qos_read_bps_burst", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
7428 .set_default(0)
7429 .set_description("the desired burst limit of read bytes"),
7430
7431 Option("rbd_qos_write_bps_burst", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
7432 .set_default(0)
7433 .set_description("the desired burst limit of write bytes"),
7434
7435 Option("rbd_qos_schedule_tick_min", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
7436 .set_default(50)
7437 .set_min(1)
7438 .set_description("minimum schedule tick (in milliseconds) for QoS"),
7439
7440 Option("rbd_discard_on_zeroed_write_same", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
7441 .set_default(true)
7442 .set_description("discard data on zeroed write same instead of writing zero"),
7443
7444 Option("rbd_mtime_update_interval", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
7445 .set_default(60)
7446 .set_min(0)
7447 .set_description("RBD Image modify timestamp refresh interval. Set to 0 to disable modify timestamp update."),
7448
7449 Option("rbd_atime_update_interval", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
7450 .set_default(60)
7451 .set_min(0)
7452 .set_description("RBD Image access timestamp refresh interval. Set to 0 to disable access timestamp update."),
181888fb
FG
7453 });
7454}
c07f9fc5 7455
181888fb
FG
7456static std::vector<Option> get_rbd_mirror_options() {
7457 return std::vector<Option>({
d2e6a577
FG
7458 Option("rbd_mirror_journal_commit_age", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7459 .set_default(5)
181888fb 7460 .set_description("commit time interval, seconds"),
c07f9fc5 7461
d2e6a577
FG
7462 Option("rbd_mirror_journal_poll_age", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7463 .set_default(5)
181888fb 7464 .set_description("maximum age (in seconds) between successive journal polls"),
c07f9fc5 7465
11fdf7f2 7466 Option("rbd_mirror_journal_max_fetch_bytes", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577 7467 .set_default(32768)
181888fb 7468 .set_description("maximum bytes to read from each journal data object per fetch"),
c07f9fc5 7469
d2e6a577
FG
7470 Option("rbd_mirror_sync_point_update_age", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7471 .set_default(30)
181888fb 7472 .set_description("number of seconds between each update of the image sync point object number"),
c07f9fc5 7473
d2e6a577
FG
7474 Option("rbd_mirror_concurrent_image_syncs", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
7475 .set_default(5)
181888fb 7476 .set_description("maximum number of image syncs in parallel"),
c07f9fc5 7477
11fdf7f2 7478 Option("rbd_mirror_pool_replayers_refresh_interval", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577 7479 .set_default(30)
181888fb 7480 .set_description("interval to refresh peers in rbd-mirror daemon"),
c07f9fc5 7481
11fdf7f2
TL
7482 Option("rbd_mirror_concurrent_image_deletions", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
7483 .set_default(1)
7484 .set_min(1)
7485 .set_description("maximum number of image deletions in parallel"),
7486
d2e6a577
FG
7487 Option("rbd_mirror_delete_retry_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7488 .set_default(30)
11fdf7f2 7489 .set_description("interval to check and retry the failed deletion requests"),
c07f9fc5 7490
11fdf7f2 7491 Option("rbd_mirror_image_state_check_interval", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577
FG
7492 .set_default(30)
7493 .set_min(1)
181888fb 7494 .set_description("interval to get images from pool watcher and set sources in replayer"),
d2e6a577 7495
11fdf7f2 7496 Option("rbd_mirror_leader_heartbeat_interval", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577
FG
7497 .set_default(5)
7498 .set_min(1)
181888fb 7499 .set_description("interval (in seconds) between mirror leader heartbeats"),
d2e6a577 7500
11fdf7f2 7501 Option("rbd_mirror_leader_max_missed_heartbeats", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577 7502 .set_default(2)
181888fb 7503 .set_description("number of missed heartbeats for non-lock owner to attempt to acquire lock"),
d2e6a577 7504
11fdf7f2 7505 Option("rbd_mirror_leader_max_acquire_attempts_before_break", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577 7506 .set_default(3)
181888fb 7507 .set_description("number of failed attempts to acquire lock after missing heartbeats before breaking lock"),
11fdf7f2
TL
7508
7509 Option("rbd_mirror_image_policy_type", Option::TYPE_STR, Option::LEVEL_ADVANCED)
7510 .set_default("simple")
7511 .set_enum_allowed({"none", "simple"})
7512 .set_description("active/active policy type for mapping images to instances"),
7513
7514 Option("rbd_mirror_image_policy_migration_throttle", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
7515 .set_default(300)
7516 .set_description("number of seconds after which an image can be reshuffled (migrated) again"),
7517
7518 Option("rbd_mirror_image_policy_update_throttle_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7519 .set_default(1)
7520 .set_min(1)
7521 .set_description("interval (in seconds) to throttle images for mirror daemon peer updates"),
7522
7523 Option("rbd_mirror_image_policy_rebalance_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7524 .set_default(0)
7525 .set_description("number of seconds policy should be idle before trigerring reshuffle (rebalance) of images"),
7526
7527 Option("rbd_mirror_perf_stats_prio", Option::TYPE_INT, Option::LEVEL_ADVANCED)
7528 .set_default((int64_t)PerfCountersBuilder::PRIO_USEFUL)
7529 .set_description("Priority level for mirror daemon replication perf counters")
7530 .set_long_description("The daemon will send perf counter data to the "
7531 "manager daemon if the priority is not lower than "
7532 "mgr_stats_threshold.")
7533 .set_min_max((int64_t)PerfCountersBuilder::PRIO_DEBUGONLY,
7534 (int64_t)PerfCountersBuilder::PRIO_CRITICAL + 1),
d2e6a577
FG
7535 });
7536}
7537
7538std::vector<Option> get_mds_options() {
7539 return std::vector<Option>({
7540 Option("mds_data", Option::TYPE_STR, Option::LEVEL_ADVANCED)
7541 .set_default("/var/lib/ceph/mds/$cluster-$id")
11fdf7f2
TL
7542 .set_flag(Option::FLAG_NO_MON_UPDATE)
7543 .set_description("path to MDS data and keyring"),
c07f9fc5 7544
11fdf7f2
TL
7545 Option("mds_max_xattr_pairs_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
7546 .set_default(64_K)
7547 .set_description("maximum aggregate size of extended attributes on a file"),
c07f9fc5 7548
d2e6a577 7549 Option("mds_cache_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
181888fb
FG
7550 .set_default(0)
7551 .set_description("maximum number of inodes in MDS cache (<=0 is unlimited)")
7552 .set_long_description("This tunable is no longer recommended. Use mds_cache_memory_limit."),
7553
11fdf7f2 7554 Option("mds_cache_memory_limit", Option::TYPE_SIZE, Option::LEVEL_BASIC)
181888fb
FG
7555 .set_default(1*(1LL<<30))
7556 .set_description("target maximum memory usage of MDS cache")
7557 .set_long_description("This sets a target maximum memory usage of the MDS cache and is the primary tunable to limit the MDS memory usage. The MDS will try to stay under a reservation of this limit (by default 95%; 1 - mds_cache_reservation) by trimming unused metadata in its cache and recalling cached items in the client caches. It is possible for the MDS to exceed this limit due to slow recall from clients. The mds_health_cache_threshold (150%) sets a cache full threshold for when the MDS signals a cluster health warning."),
7558
7559 Option("mds_cache_reservation", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7560 .set_default(.05)
11fdf7f2 7561 .set_description("amount of memory to reserve for future cached objects"),
181888fb
FG
7562
7563 Option("mds_health_cache_threshold", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7564 .set_default(1.5)
7565 .set_description("threshold for cache size to generate health warning"),
c07f9fc5 7566
d2e6a577
FG
7567 Option("mds_cache_mid", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7568 .set_default(.7)
11fdf7f2 7569 .set_description("midpoint for MDS cache LRU"),
c07f9fc5 7570
a8e16298
TL
7571 Option("mds_cache_trim_decay_rate", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7572 .set_default(1)
7573 .set_description("decay rate for trimming MDS cache throttle"),
7574
11fdf7f2 7575 Option("mds_cache_trim_threshold", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
a8e16298
TL
7576 .set_default(64_K)
7577 .set_description("threshold for number of dentries that can be trimmed"),
7578
d2e6a577
FG
7579 Option("mds_max_file_recover", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
7580 .set_default(32)
11fdf7f2 7581 .set_description("maximum number of files to recover file sizes in parallel"),
c07f9fc5 7582
d2e6a577
FG
7583 Option("mds_dir_max_commit_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
7584 .set_default(10)
11fdf7f2 7585 .set_description("maximum size in megabytes for a RADOS write to a directory"),
c07f9fc5 7586
d2e6a577
FG
7587 Option("mds_dir_keys_per_op", Option::TYPE_INT, Option::LEVEL_ADVANCED)
7588 .set_default(16384)
11fdf7f2 7589 .set_description("number of directory entries to read in one RADOS operation"),
c07f9fc5 7590
d2e6a577
FG
7591 Option("mds_decay_halflife", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7592 .set_default(5)
11fdf7f2 7593 .set_description("rate of decay for temperature counters on each directory for balancing"),
c07f9fc5 7594
d2e6a577
FG
7595 Option("mds_beacon_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7596 .set_default(4)
11fdf7f2 7597 .set_description("interval in seconds between MDS beacons to monitors"),
c07f9fc5 7598
d2e6a577
FG
7599 Option("mds_beacon_grace", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7600 .set_default(15)
11fdf7f2 7601 .set_description("tolerance in seconds for missed MDS beacons to monitors"),
c07f9fc5 7602
f64942e4
AA
7603 Option("mds_heartbeat_grace", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7604 .set_default(15)
7605 .set_description("tolerance in seconds for MDS internal heartbeat"),
7606
d2e6a577
FG
7607 Option("mds_enforce_unique_name", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
7608 .set_default(true)
11fdf7f2 7609 .set_description("require MDS name is unique in the cluster"),
c07f9fc5 7610
d2e6a577
FG
7611 Option("mds_session_blacklist_on_timeout", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
7612 .set_default(true)
11fdf7f2 7613 .set_description("blacklist clients whose sessions have become stale"),
c07f9fc5 7614
d2e6a577
FG
7615 Option("mds_session_blacklist_on_evict", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
7616 .set_default(true)
11fdf7f2 7617 .set_description("blacklist clients that have been evicted"),
c07f9fc5 7618
d2e6a577
FG
7619 Option("mds_sessionmap_keys_per_op", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
7620 .set_default(1024)
11fdf7f2 7621 .set_description("number of omap keys to read from the SessionMap in one operation"),
c07f9fc5 7622
11fdf7f2 7623 Option("mds_recall_max_caps", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
a8e16298
TL
7624 .set_default(5000)
7625 .set_description("maximum number of caps to recall from client session in single recall"),
7626
7627 Option("mds_recall_max_decay_rate", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7628 .set_default(2.5)
7629 .set_description("decay rate for throttle on recalled caps on a session"),
7630
11fdf7f2 7631 Option("mds_recall_max_decay_threshold", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
a8e16298
TL
7632 .set_default(16_K)
7633 .set_description("decay threshold for throttle on recalled caps on a session"),
7634
11fdf7f2 7635 Option("mds_recall_global_max_decay_threshold", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
a8e16298
TL
7636 .set_default(64_K)
7637 .set_description("decay threshold for throttle on recalled caps globally"),
7638
11fdf7f2 7639 Option("mds_recall_warning_threshold", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
a8e16298
TL
7640 .set_default(32_K)
7641 .set_description("decay threshold for warning on slow session cap recall"),
7642
7643 Option("mds_recall_warning_decay_rate", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7644 .set_default(60.0)
7645 .set_description("decay rate for warning on slow session cap recall"),
c07f9fc5 7646
11fdf7f2 7647 Option("mds_freeze_tree_timeout", Option::TYPE_FLOAT, Option::LEVEL_DEV)
d2e6a577
FG
7648 .set_default(30)
7649 .set_description(""),
c07f9fc5 7650
d2e6a577
FG
7651 Option("mds_health_summarize_threshold", Option::TYPE_INT, Option::LEVEL_ADVANCED)
7652 .set_default(10)
11fdf7f2 7653 .set_description("threshold of number of clients to summarize late client recall"),
c07f9fc5 7654
d2e6a577
FG
7655 Option("mds_reconnect_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7656 .set_default(45)
11fdf7f2 7657 .set_description("timeout in seconds to wait for clients to reconnect during MDS reconnect recovery state"),
c07f9fc5 7658
d2e6a577
FG
7659 Option("mds_tick_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7660 .set_default(5)
11fdf7f2 7661 .set_description("time in seconds between upkeep tasks"),
c07f9fc5 7662
11fdf7f2 7663 Option("mds_dirstat_min_interval", Option::TYPE_FLOAT, Option::LEVEL_DEV)
d2e6a577
FG
7664 .set_default(1)
7665 .set_description(""),
c07f9fc5 7666
d2e6a577
FG
7667 Option("mds_scatter_nudge_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7668 .set_default(5)
11fdf7f2 7669 .set_description("minimum interval between scatter lock updates"),
c07f9fc5 7670
d2e6a577
FG
7671 Option("mds_client_prealloc_inos", Option::TYPE_INT, Option::LEVEL_ADVANCED)
7672 .set_default(1000)
11fdf7f2 7673 .set_description("number of unused inodes to pre-allocate to clients for file creation"),
c07f9fc5 7674
d2e6a577
FG
7675 Option("mds_early_reply", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
7676 .set_default(true)
11fdf7f2 7677 .set_description("additional reply to clients that metadata requests are complete but not yet durable"),
c07f9fc5 7678
d2e6a577
FG
7679 Option("mds_default_dir_hash", Option::TYPE_INT, Option::LEVEL_ADVANCED)
7680 .set_default(CEPH_STR_HASH_RJENKINS)
11fdf7f2 7681 .set_description("hash function to select directory fragment for dentry name"),
c07f9fc5 7682
11fdf7f2 7683 Option("mds_log_pause", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577
FG
7684 .set_default(false)
7685 .set_description(""),
c07f9fc5 7686
11fdf7f2 7687 Option("mds_log_skip_corrupt_events", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577
FG
7688 .set_default(false)
7689 .set_description(""),
c07f9fc5 7690
d2e6a577
FG
7691 Option("mds_log_max_events", Option::TYPE_INT, Option::LEVEL_ADVANCED)
7692 .set_default(-1)
11fdf7f2 7693 .set_description("maximum number of events in the MDS journal (-1 is unlimited)"),
c07f9fc5 7694
d2e6a577
FG
7695 Option("mds_log_events_per_segment", Option::TYPE_INT, Option::LEVEL_ADVANCED)
7696 .set_default(1024)
11fdf7f2 7697 .set_description("maximum number of events in an MDS journal segment"),
c07f9fc5 7698
11fdf7f2 7699 Option("mds_log_segment_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577 7700 .set_default(0)
11fdf7f2 7701 .set_description("size in bytes of each MDS log segment"),
c07f9fc5 7702
d2e6a577 7703 Option("mds_log_max_segments", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
94b18763 7704 .set_default(128)
11fdf7f2 7705 .set_description("maximum number of segments which may be untrimmed"),
c07f9fc5 7706
d2e6a577
FG
7707 Option("mds_bal_export_pin", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
7708 .set_default(true)
11fdf7f2 7709 .set_description("allow setting directory export pins to particular ranks"),
c07f9fc5 7710
d2e6a577
FG
7711 Option("mds_bal_sample_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7712 .set_default(3.0)
11fdf7f2 7713 .set_description("interval in seconds between balancer ticks"),
c07f9fc5 7714
d2e6a577
FG
7715 Option("mds_bal_replicate_threshold", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7716 .set_default(8000)
11fdf7f2 7717 .set_description("hot popularity threshold to replicate a subtree"),
c07f9fc5 7718
d2e6a577
FG
7719 Option("mds_bal_unreplicate_threshold", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7720 .set_default(0)
11fdf7f2 7721 .set_description("cold popularity threshold to merge subtrees"),
c07f9fc5 7722
d2e6a577
FG
7723 Option("mds_bal_split_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
7724 .set_default(10000)
11fdf7f2 7725 .set_description("minimum size of directory fragment before splitting"),
c07f9fc5 7726
d2e6a577
FG
7727 Option("mds_bal_split_rd", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7728 .set_default(25000)
11fdf7f2 7729 .set_description("hot read popularity threshold for splitting a directory fragment"),
c07f9fc5 7730
d2e6a577
FG
7731 Option("mds_bal_split_wr", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7732 .set_default(10000)
11fdf7f2 7733 .set_description("hot write popularity threshold for splitting a directory fragment"),
c07f9fc5 7734
d2e6a577
FG
7735 Option("mds_bal_split_bits", Option::TYPE_INT, Option::LEVEL_ADVANCED)
7736 .set_default(3)
11fdf7f2
TL
7737 .set_min_max(1, 24)
7738 .set_description("power of two child fragments for a fragment on split"),
c07f9fc5 7739
d2e6a577
FG
7740 Option("mds_bal_merge_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
7741 .set_default(50)
11fdf7f2 7742 .set_description("size of fragments where merging should occur"),
c07f9fc5 7743
d2e6a577
FG
7744 Option("mds_bal_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
7745 .set_default(10)
11fdf7f2 7746 .set_description("interval between MDS balancer cycles"),
c07f9fc5 7747
d2e6a577
FG
7748 Option("mds_bal_fragment_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
7749 .set_default(5)
11fdf7f2 7750 .set_description("delay in seconds before interrupting client IO to perform splits"),
c07f9fc5 7751
d2e6a577
FG
7752 Option("mds_bal_fragment_size_max", Option::TYPE_INT, Option::LEVEL_ADVANCED)
7753 .set_default(10000*10)
11fdf7f2 7754 .set_description("maximum size of a directory fragment before new creat/links fail"),
c07f9fc5 7755
d2e6a577
FG
7756 Option("mds_bal_fragment_fast_factor", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7757 .set_default(1.5)
11fdf7f2
TL
7758 .set_description("ratio of mds_bal_split_size at which fast fragment splitting occurs"),
7759
7760 Option("mds_bal_fragment_dirs", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
7761 .set_default(true)
7762 .set_description("enable directory fragmentation")
7763 .set_long_description("Directory fragmentation is a standard feature of CephFS that allows sharding directories across multiple objects for performance and stability. Additionally, this allows fragments to be distributed across multiple active MDSs to increase throughput. Disabling (new) fragmentation should only be done in exceptional circumstances and may lead to performance issues."),
c07f9fc5 7764
d2e6a577
FG
7765 Option("mds_bal_idle_threshold", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7766 .set_default(0)
11fdf7f2 7767 .set_description("idle metadata popularity threshold before rebalancing"),
c07f9fc5 7768
11fdf7f2 7769 Option("mds_bal_max", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577
FG
7770 .set_default(-1)
7771 .set_description(""),
c07f9fc5 7772
11fdf7f2 7773 Option("mds_bal_max_until", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577
FG
7774 .set_default(-1)
7775 .set_description(""),
c07f9fc5 7776
11fdf7f2 7777 Option("mds_bal_mode", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577
FG
7778 .set_default(0)
7779 .set_description(""),
c07f9fc5 7780
11fdf7f2 7781 Option("mds_bal_min_rebalance", Option::TYPE_FLOAT, Option::LEVEL_DEV)
d2e6a577 7782 .set_default(.1)
11fdf7f2 7783 .set_description("amount overloaded over internal target before balancer begins offloading"),
c07f9fc5 7784
11fdf7f2 7785 Option("mds_bal_min_start", Option::TYPE_FLOAT, Option::LEVEL_DEV)
d2e6a577
FG
7786 .set_default(.2)
7787 .set_description(""),
c07f9fc5 7788
11fdf7f2 7789 Option("mds_bal_need_min", Option::TYPE_FLOAT, Option::LEVEL_DEV)
d2e6a577
FG
7790 .set_default(.8)
7791 .set_description(""),
c07f9fc5 7792
11fdf7f2 7793 Option("mds_bal_need_max", Option::TYPE_FLOAT, Option::LEVEL_DEV)
d2e6a577
FG
7794 .set_default(1.2)
7795 .set_description(""),
c07f9fc5 7796
11fdf7f2 7797 Option("mds_bal_midchunk", Option::TYPE_FLOAT, Option::LEVEL_DEV)
d2e6a577
FG
7798 .set_default(.3)
7799 .set_description(""),
c07f9fc5 7800
11fdf7f2 7801 Option("mds_bal_minchunk", Option::TYPE_FLOAT, Option::LEVEL_DEV)
d2e6a577
FG
7802 .set_default(.001)
7803 .set_description(""),
c07f9fc5 7804
d2e6a577
FG
7805 Option("mds_bal_target_decay", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7806 .set_default(10.0)
11fdf7f2 7807 .set_description("rate of decay for export targets communicated to clients"),
c07f9fc5 7808
d2e6a577
FG
7809 Option("mds_replay_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7810 .set_default(1.0)
11fdf7f2 7811 .set_description("time in seconds between replay of updates to journal by standby replay MDS"),
c07f9fc5 7812
11fdf7f2 7813 Option("mds_shutdown_check", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577
FG
7814 .set_default(0)
7815 .set_description(""),
c07f9fc5 7816
11fdf7f2 7817 Option("mds_thrash_exports", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577
FG
7818 .set_default(0)
7819 .set_description(""),
c07f9fc5 7820
11fdf7f2 7821 Option("mds_thrash_fragments", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577
FG
7822 .set_default(0)
7823 .set_description(""),
c07f9fc5 7824
11fdf7f2 7825 Option("mds_dump_cache_on_map", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577
FG
7826 .set_default(false)
7827 .set_description(""),
c07f9fc5 7828
11fdf7f2 7829 Option("mds_dump_cache_after_rejoin", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577
FG
7830 .set_default(false)
7831 .set_description(""),
c07f9fc5 7832
11fdf7f2 7833 Option("mds_verify_scatter", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577
FG
7834 .set_default(false)
7835 .set_description(""),
c07f9fc5 7836
d2e6a577
FG
7837 Option("mds_debug_scatterstat", Option::TYPE_BOOL, Option::LEVEL_DEV)
7838 .set_default(false)
7839 .set_description(""),
c07f9fc5 7840
d2e6a577
FG
7841 Option("mds_debug_frag", Option::TYPE_BOOL, Option::LEVEL_DEV)
7842 .set_default(false)
7843 .set_description(""),
c07f9fc5 7844
d2e6a577
FG
7845 Option("mds_debug_auth_pins", Option::TYPE_BOOL, Option::LEVEL_DEV)
7846 .set_default(false)
7847 .set_description(""),
c07f9fc5 7848
d2e6a577
FG
7849 Option("mds_debug_subtrees", Option::TYPE_BOOL, Option::LEVEL_DEV)
7850 .set_default(false)
7851 .set_description(""),
c07f9fc5 7852
d2e6a577
FG
7853 Option("mds_kill_mdstable_at", Option::TYPE_INT, Option::LEVEL_DEV)
7854 .set_default(0)
7855 .set_description(""),
c07f9fc5 7856
11fdf7f2 7857 Option("mds_max_export_size", Option::TYPE_SIZE, Option::LEVEL_DEV)
91327a77 7858 .set_default(20_M)
b32b8144
FG
7859 .set_description(""),
7860
d2e6a577
FG
7861 Option("mds_kill_export_at", Option::TYPE_INT, Option::LEVEL_DEV)
7862 .set_default(0)
7863 .set_description(""),
c07f9fc5 7864
d2e6a577
FG
7865 Option("mds_kill_import_at", Option::TYPE_INT, Option::LEVEL_DEV)
7866 .set_default(0)
7867 .set_description(""),
c07f9fc5 7868
d2e6a577
FG
7869 Option("mds_kill_link_at", Option::TYPE_INT, Option::LEVEL_DEV)
7870 .set_default(0)
7871 .set_description(""),
c07f9fc5 7872
d2e6a577
FG
7873 Option("mds_kill_rename_at", Option::TYPE_INT, Option::LEVEL_DEV)
7874 .set_default(0)
7875 .set_description(""),
c07f9fc5 7876
d2e6a577
FG
7877 Option("mds_kill_openc_at", Option::TYPE_INT, Option::LEVEL_DEV)
7878 .set_default(0)
7879 .set_description(""),
c07f9fc5 7880
d2e6a577
FG
7881 Option("mds_kill_journal_at", Option::TYPE_INT, Option::LEVEL_DEV)
7882 .set_default(0)
7883 .set_description(""),
c07f9fc5 7884
d2e6a577
FG
7885 Option("mds_kill_journal_expire_at", Option::TYPE_INT, Option::LEVEL_DEV)
7886 .set_default(0)
7887 .set_description(""),
c07f9fc5 7888
d2e6a577
FG
7889 Option("mds_kill_journal_replay_at", Option::TYPE_INT, Option::LEVEL_DEV)
7890 .set_default(0)
7891 .set_description(""),
c07f9fc5 7892
11fdf7f2 7893 Option("mds_journal_format", Option::TYPE_UINT, Option::LEVEL_DEV)
d2e6a577
FG
7894 .set_default(1)
7895 .set_description(""),
c07f9fc5 7896
d2e6a577
FG
7897 Option("mds_kill_create_at", Option::TYPE_INT, Option::LEVEL_DEV)
7898 .set_default(0)
7899 .set_description(""),
c07f9fc5 7900
d2e6a577
FG
7901 Option("mds_inject_traceless_reply_probability", Option::TYPE_FLOAT, Option::LEVEL_DEV)
7902 .set_default(0)
7903 .set_description(""),
c07f9fc5 7904
11fdf7f2 7905 Option("mds_wipe_sessions", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577
FG
7906 .set_default(0)
7907 .set_description(""),
c07f9fc5 7908
11fdf7f2 7909 Option("mds_wipe_ino_prealloc", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577
FG
7910 .set_default(0)
7911 .set_description(""),
c07f9fc5 7912
11fdf7f2 7913 Option("mds_skip_ino", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577
FG
7914 .set_default(0)
7915 .set_description(""),
c07f9fc5 7916
d2e6a577
FG
7917 Option("mds_enable_op_tracker", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
7918 .set_default(true)
11fdf7f2 7919 .set_description("track remote operation progression and statistics"),
c07f9fc5 7920
d2e6a577
FG
7921 Option("mds_op_history_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
7922 .set_default(20)
11fdf7f2 7923 .set_description("maximum size for list of historical operations"),
c07f9fc5 7924
d2e6a577
FG
7925 Option("mds_op_history_duration", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
7926 .set_default(600)
11fdf7f2 7927 .set_description("expiration time in seconds of historical operations"),
c07f9fc5 7928
d2e6a577
FG
7929 Option("mds_op_complaint_time", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7930 .set_default(30)
11fdf7f2 7931 .set_description("time in seconds to consider an operation blocked after no updates"),
c07f9fc5 7932
11fdf7f2 7933 Option("mds_op_log_threshold", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577
FG
7934 .set_default(5)
7935 .set_description(""),
c07f9fc5 7936
d2e6a577
FG
7937 Option("mds_snap_min_uid", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
7938 .set_default(0)
11fdf7f2 7939 .set_description("minimum uid of client to perform snapshots"),
c07f9fc5 7940
d2e6a577
FG
7941 Option("mds_snap_max_uid", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
7942 .set_default(4294967294)
11fdf7f2 7943 .set_description("maximum uid of client to perform snapshots"),
c07f9fc5 7944
d2e6a577
FG
7945 Option("mds_snap_rstat", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
7946 .set_default(false)
11fdf7f2 7947 .set_description("enabled nested rstat for snapshots"),
c07f9fc5 7948
11fdf7f2 7949 Option("mds_verify_backtrace", Option::TYPE_UINT, Option::LEVEL_DEV)
d2e6a577
FG
7950 .set_default(1)
7951 .set_description(""),
c07f9fc5 7952
11fdf7f2 7953 Option("mds_max_completed_flushes", Option::TYPE_UINT, Option::LEVEL_DEV)
d2e6a577
FG
7954 .set_default(100000)
7955 .set_description(""),
c07f9fc5 7956
11fdf7f2 7957 Option("mds_max_completed_requests", Option::TYPE_UINT, Option::LEVEL_DEV)
d2e6a577
FG
7958 .set_default(100000)
7959 .set_description(""),
c07f9fc5 7960
d2e6a577
FG
7961 Option("mds_action_on_write_error", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
7962 .set_default(1)
11fdf7f2 7963 .set_description("action to take when MDS cannot write to RADOS (0:ignore, 1:read-only, 2:suicide)"),
c07f9fc5 7964
d2e6a577
FG
7965 Option("mds_mon_shutdown_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7966 .set_default(5)
11fdf7f2 7967 .set_description("time to wait for mon to receive damaged MDS rank notification"),
c07f9fc5 7968
d2e6a577
FG
7969 Option("mds_max_purge_files", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
7970 .set_default(64)
11fdf7f2 7971 .set_description("maximum number of deleted files to purge in parallel"),
c07f9fc5 7972
d2e6a577
FG
7973 Option("mds_max_purge_ops", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
7974 .set_default(8192)
11fdf7f2 7975 .set_description("maximum number of purge operations performed in parallel"),
c07f9fc5 7976
d2e6a577
FG
7977 Option("mds_max_purge_ops_per_pg", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
7978 .set_default(0.5)
11fdf7f2 7979 .set_description("number of parallel purge operations performed per PG"),
c07f9fc5 7980
11fdf7f2 7981 Option("mds_purge_queue_busy_flush_period", Option::TYPE_FLOAT, Option::LEVEL_DEV)
d2e6a577
FG
7982 .set_default(1.0)
7983 .set_description(""),
c07f9fc5 7984
d2e6a577
FG
7985 Option("mds_root_ino_uid", Option::TYPE_INT, Option::LEVEL_ADVANCED)
7986 .set_default(0)
11fdf7f2 7987 .set_description("default uid for new root directory"),
c07f9fc5 7988
d2e6a577
FG
7989 Option("mds_root_ino_gid", Option::TYPE_INT, Option::LEVEL_ADVANCED)
7990 .set_default(0)
11fdf7f2 7991 .set_description("default gid for new root directory"),
c07f9fc5 7992
d2e6a577
FG
7993 Option("mds_max_scrub_ops_in_progress", Option::TYPE_INT, Option::LEVEL_ADVANCED)
7994 .set_default(5)
11fdf7f2 7995 .set_description("maximum number of scrub operations performed in parallel"),
c07f9fc5 7996
d2e6a577
FG
7997 Option("mds_damage_table_max_entries", Option::TYPE_INT, Option::LEVEL_ADVANCED)
7998 .set_default(10000)
11fdf7f2 7999 .set_description("maximum number of damage table entries"),
d2e6a577
FG
8000
8001 Option("mds_client_writeable_range_max_inc_objs", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
8002 .set_default(1024)
11fdf7f2
TL
8003 .set_description("maximum number of objects in writeable range of a file for a client"),
8004
3efd9988
FG
8005 Option("mds_min_caps_per_client", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
8006 .set_default(100)
8007 .set_description("minimum number of capabilities a client may hold"),
8008
a8e16298
TL
8009 Option("mds_max_caps_per_client", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
8010 .set_default(1_M)
8011 .set_description("maximum number of capabilities a client may hold"),
8012
94b18763
FG
8013 Option("mds_hack_allow_loading_invalid_metadata", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
8014 .set_default(0)
8015 .set_description("INTENTIONALLY CAUSE DATA LOSS by bypasing checks for invalid metadata on disk. Allows testing repair tools."),
28e407b8 8016
494da23a
TL
8017 Option("mds_defer_session_stale", Option::TYPE_BOOL, Option::LEVEL_DEV)
8018 .set_default(true),
8019
28e407b8
AA
8020 Option("mds_inject_migrator_session_race", Option::TYPE_BOOL, Option::LEVEL_DEV)
8021 .set_default(false),
1adf2230 8022
91327a77
AA
8023 Option("mds_request_load_average_decay_rate", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
8024 .set_default(60)
8025 .set_description("rate of decay in seconds for calculating request load average"),
8026
8027 Option("mds_cap_revoke_eviction_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
8028 .set_default(0)
8029 .set_description("number of seconds after which clients which have not responded to cap revoke messages by the MDS are evicted."),
f64942e4 8030
11fdf7f2
TL
8031 Option("mds_max_retries_on_remount_failure", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
8032 .set_default(5)
8033 .set_description("number of consecutive failed remount attempts for invalidating kernel dcache after which client would abort."),
8034
8035 Option("mds_dump_cache_threshold_formatter", Option::TYPE_SIZE, Option::LEVEL_DEV)
f64942e4
AA
8036 .set_default(1_G)
8037 .set_description("threshold for cache usage to disallow \"dump cache\" operation to formatter")
8038 .set_long_description("Disallow MDS from dumping caches to formatter via \"dump cache\" command if cache usage exceeds this threshold."),
8039
11fdf7f2 8040 Option("mds_dump_cache_threshold_file", Option::TYPE_SIZE, Option::LEVEL_DEV)
f64942e4
AA
8041 .set_default(0)
8042 .set_description("threshold for cache usage to disallow \"dump cache\" operation to file")
8043 .set_long_description("Disallow MDS from dumping caches to file via \"dump cache\" command if cache usage exceeds this threshold."),
d2e6a577
FG
8044 });
8045}
c07f9fc5 8046
d2e6a577
FG
8047std::vector<Option> get_mds_client_options() {
8048 return std::vector<Option>({
11fdf7f2 8049 Option("client_cache_size", Option::TYPE_SIZE, Option::LEVEL_BASIC)
d2e6a577 8050 .set_default(16384)
28e407b8 8051 .set_description("soft maximum number of directory entries in client cache"),
c07f9fc5 8052
d2e6a577
FG
8053 Option("client_cache_mid", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
8054 .set_default(.75)
28e407b8 8055 .set_description("mid-point of client cache LRU"),
c07f9fc5 8056
28e407b8 8057 Option("client_use_random_mds", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577 8058 .set_default(false)
28e407b8 8059 .set_description("issue new requests to a random active MDS"),
c07f9fc5 8060
d2e6a577
FG
8061 Option("client_mount_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
8062 .set_default(300.0)
28e407b8 8063 .set_description("timeout for mounting CephFS (seconds)"),
c07f9fc5 8064
28e407b8 8065 Option("client_tick_interval", Option::TYPE_FLOAT, Option::LEVEL_DEV)
d2e6a577 8066 .set_default(1.0)
28e407b8 8067 .set_description("seconds between client upkeep ticks"),
c07f9fc5 8068
28e407b8 8069 Option("client_trace", Option::TYPE_STR, Option::LEVEL_DEV)
d2e6a577 8070 .set_default("")
28e407b8 8071 .set_description("file containing trace of client operations"),
c07f9fc5 8072
11fdf7f2 8073 Option("client_readahead_min", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577 8074 .set_default(128*1024)
28e407b8 8075 .set_description("minimum bytes to readahead in a file"),
c07f9fc5 8076
11fdf7f2 8077 Option("client_readahead_max_bytes", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
d2e6a577 8078 .set_default(0)
28e407b8 8079 .set_description("maximum bytes to readahead in a file (zero is unlimited)"),
c07f9fc5 8080
d2e6a577
FG
8081 Option("client_readahead_max_periods", Option::TYPE_INT, Option::LEVEL_ADVANCED)
8082 .set_default(4)
28e407b8 8083 .set_description("maximum stripe periods to readahead in a file"),
c07f9fc5 8084
d2e6a577
FG
8085 Option("client_reconnect_stale", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
8086 .set_default(false)
28e407b8 8087 .set_description("reconnect when the session becomes stale"),
c07f9fc5 8088
d2e6a577
FG
8089 Option("client_snapdir", Option::TYPE_STR, Option::LEVEL_ADVANCED)
8090 .set_default(".snap")
28e407b8 8091 .set_description("pseudo directory for snapshot access to a directory"),
c07f9fc5 8092
d2e6a577
FG
8093 Option("client_mountpoint", Option::TYPE_STR, Option::LEVEL_ADVANCED)
8094 .set_default("/")
28e407b8 8095 .set_description("default mount-point"),
c07f9fc5 8096
d2e6a577
FG
8097 Option("client_mount_uid", Option::TYPE_INT, Option::LEVEL_ADVANCED)
8098 .set_default(-1)
28e407b8 8099 .set_description("uid to mount as"),
c07f9fc5 8100
d2e6a577
FG
8101 Option("client_mount_gid", Option::TYPE_INT, Option::LEVEL_ADVANCED)
8102 .set_default(-1)
28e407b8 8103 .set_description("gid to mount as"),
c07f9fc5 8104
28e407b8
AA
8105 /* RADOS client option */
8106 Option("client_notify_timeout", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577
FG
8107 .set_default(10)
8108 .set_description(""),
c07f9fc5 8109
28e407b8
AA
8110 /* RADOS client option */
8111 Option("osd_client_watch_timeout", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577
FG
8112 .set_default(30)
8113 .set_description(""),
c07f9fc5 8114
28e407b8 8115 Option("client_caps_release_delay", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577
FG
8116 .set_default(5)
8117 .set_description(""),
c07f9fc5 8118
d2e6a577
FG
8119 Option("client_quota_df", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
8120 .set_default(true)
28e407b8 8121 .set_description("show quota usage for statfs (df)"),
c07f9fc5 8122
d2e6a577
FG
8123 Option("client_oc", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
8124 .set_default(true)
28e407b8 8125 .set_description("enable object caching"),
c07f9fc5 8126
11fdf7f2 8127 Option("client_oc_size", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 8128 .set_default(200_M)
28e407b8 8129 .set_description("maximum size of object cache"),
c07f9fc5 8130
11fdf7f2 8131 Option("client_oc_max_dirty", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 8132 .set_default(100_M)
28e407b8 8133 .set_description("maximum size of dirty pages in object cache"),
c07f9fc5 8134
11fdf7f2 8135 Option("client_oc_target_dirty", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
b32b8144 8136 .set_default(8_M)
28e407b8 8137 .set_description("target size of dirty pages object cache"),
c07f9fc5 8138
d2e6a577
FG
8139 Option("client_oc_max_dirty_age", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
8140 .set_default(5.0)
28e407b8 8141 .set_description("maximum age of dirty pages in object cache (seconds)"),
c07f9fc5 8142
d2e6a577
FG
8143 Option("client_oc_max_objects", Option::TYPE_INT, Option::LEVEL_ADVANCED)
8144 .set_default(1000)
28e407b8 8145 .set_description("maximum number of objects in cache"),
c07f9fc5 8146
d2e6a577
FG
8147 Option("client_debug_getattr_caps", Option::TYPE_BOOL, Option::LEVEL_DEV)
8148 .set_default(false)
8149 .set_description(""),
8150
8151 Option("client_debug_force_sync_read", Option::TYPE_BOOL, Option::LEVEL_DEV)
8152 .set_default(false)
8153 .set_description(""),
c07f9fc5 8154
d2e6a577
FG
8155 Option("client_debug_inject_tick_delay", Option::TYPE_INT, Option::LEVEL_DEV)
8156 .set_default(0)
8157 .set_description(""),
c07f9fc5 8158
11fdf7f2 8159 Option("client_max_inline_size", Option::TYPE_SIZE, Option::LEVEL_DEV)
b32b8144 8160 .set_default(4_K)
d2e6a577 8161 .set_description(""),
c07f9fc5 8162
d2e6a577
FG
8163 Option("client_inject_release_failure", Option::TYPE_BOOL, Option::LEVEL_DEV)
8164 .set_default(false)
8165 .set_description(""),
c07f9fc5 8166
d2e6a577
FG
8167 Option("client_inject_fixed_oldest_tid", Option::TYPE_BOOL, Option::LEVEL_DEV)
8168 .set_default(false)
8169 .set_description(""),
c07f9fc5 8170
d2e6a577
FG
8171 Option("client_metadata", Option::TYPE_STR, Option::LEVEL_ADVANCED)
8172 .set_default("")
28e407b8 8173 .set_description("metadata key=value comma-delimited pairs appended to session metadata"),
c07f9fc5 8174
d2e6a577
FG
8175 Option("client_acl_type", Option::TYPE_STR, Option::LEVEL_ADVANCED)
8176 .set_default("")
28e407b8 8177 .set_description("ACL type to enforce (none or \"posix_acl\")"),
c07f9fc5 8178
d2e6a577
FG
8179 Option("client_permissions", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
8180 .set_default(true)
28e407b8 8181 .set_description("client-enforced permission checking"),
c07f9fc5 8182
d2e6a577
FG
8183 Option("client_dirsize_rbytes", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
8184 .set_default(true)
28e407b8
AA
8185 .set_description("set the directory size as the number of file bytes recursively used")
8186 .set_long_description("This option enables a CephFS feature that stores the recursive directory size (the bytes used by files in the directory and its descendents) in the st_size field of the stat structure."),
c07f9fc5 8187
11fdf7f2
TL
8188 Option("client_force_lazyio", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
8189 .set_default(false)
8190 .set_description(""),
8191
8192 // note: the max amount of "in flight" dirty data is roughly (max - target)
d2e6a577
FG
8193 Option("fuse_use_invalidate_cb", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
8194 .set_default(true)
11fdf7f2 8195 .set_description("use fuse 2.8+ invalidate callback to keep page cache consistent"),
c07f9fc5 8196
d2e6a577
FG
8197 Option("fuse_disable_pagecache", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
8198 .set_default(false)
28e407b8 8199 .set_description("disable page caching in the kernel for this FUSE mount"),
c07f9fc5 8200
d2e6a577
FG
8201 Option("fuse_allow_other", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
8202 .set_default(true)
28e407b8 8203 .set_description("pass allow_other to FUSE on mount"),
c07f9fc5 8204
d2e6a577
FG
8205 Option("fuse_default_permissions", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
8206 .set_default(false)
28e407b8 8207 .set_description("pass default_permisions to FUSE on mount"),
c07f9fc5 8208
d2e6a577 8209 Option("fuse_big_writes", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
11fdf7f2
TL
8210 .set_default(false)
8211 .set_description("big_writes is deprecated in libfuse 3.0.0"),
8212
8213 Option("fuse_max_write", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
8214 .set_default(0)
8215 .set_description("set the maximum number of bytes in a single write operation")
8216 .set_long_description("Set the maximum number of bytes in a single write operation that may pass atomically through FUSE. The FUSE default is 128kB and may be indicated by setting this option to 0."),
c07f9fc5 8217
d2e6a577
FG
8218 Option("fuse_atomic_o_trunc", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
8219 .set_default(true)
28e407b8 8220 .set_description("pass atomic_o_trunc flag to FUSE on mount"),
c07f9fc5 8221
28e407b8 8222 Option("fuse_debug", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577
FG
8223 .set_default(false)
8224 .set_description(""),
c07f9fc5 8225
d2e6a577
FG
8226 Option("fuse_multithreaded", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
8227 .set_default(true)
28e407b8 8228 .set_description("allow parallel processing through FUSE library"),
c07f9fc5 8229
d2e6a577
FG
8230 Option("fuse_require_active_mds", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
8231 .set_default(true)
28e407b8 8232 .set_description("require active MDSs in the file system when mounting"),
c07f9fc5 8233
d2e6a577
FG
8234 Option("fuse_syncfs_on_mksnap", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
8235 .set_default(true)
28e407b8 8236 .set_description("synchronize all local metadata/file changes after snapshot"),
c07f9fc5 8237
d2e6a577 8238 Option("fuse_set_user_groups", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
181888fb
FG
8239 .set_default(true)
8240 .set_description("check for ceph-fuse to consider supplementary groups for permissions"),
c07f9fc5 8241
28e407b8 8242 Option("client_try_dentry_invalidate", Option::TYPE_BOOL, Option::LEVEL_DEV)
181888fb 8243 .set_default(false)
d2e6a577 8244 .set_description(""),
c07f9fc5 8245
b32b8144
FG
8246 Option("client_die_on_failed_remount", Option::TYPE_BOOL, Option::LEVEL_DEV)
8247 .set_default(false)
d2e6a577 8248 .set_description(""),
c07f9fc5 8249
b32b8144
FG
8250 Option("client_die_on_failed_dentry_invalidate", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
8251 .set_default(true)
8252 .set_description("kill the client when no dentry invalidation options are available")
8253 .set_long_description("The CephFS client requires a mechanism to invalidate dentries in the caller (e.g. the kernel for ceph-fuse) when capabilities must be recalled. If the client cannot do this then the MDS cache cannot shrink which can cause the MDS to fail."),
8254
d2e6a577
FG
8255 Option("client_check_pool_perm", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
8256 .set_default(true)
28e407b8 8257 .set_description("confirm access to inode's data pool/namespace described in file layout"),
d2e6a577 8258
28e407b8 8259 Option("client_use_faked_inos", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577
FG
8260 .set_default(false)
8261 .set_description(""),
8262
8263 Option("client_mds_namespace", Option::TYPE_STR, Option::LEVEL_ADVANCED)
8264 .set_default("")
11fdf7f2
TL
8265
8266 .set_description("CephFS file system name to mount")
8267 .set_long_description("Use this with ceph-fuse, or with any process "
8268 "that uses libcephfs. Programs using libcephfs may also pass "
8269 "the filesystem name into mount(), which will override this setting. "
8270 "If no filesystem name is given in mount() or this setting, the default "
8271 "filesystem will be mounted (usually the first created)."),
8272
8273 Option("fake_statfs_for_testing", Option::TYPE_INT, Option::LEVEL_DEV)
8274 .set_default(0)
8275 .set_description("Set a value for kb and compute kb_used from total of num_bytes"),
81eedcae
TL
8276
8277 Option("debug_allow_any_pool_priority", Option::TYPE_BOOL, Option::LEVEL_DEV)
8278 .set_default(false)
8279 .set_description("Allow any pool priority to be set to test conversion to new range"),
d2e6a577
FG
8280 });
8281}
c07f9fc5
FG
8282
8283
8284static std::vector<Option> build_options()
8285{
d2e6a577 8286 std::vector<Option> result = get_global_options();
c07f9fc5 8287
d2e6a577 8288 auto ingest = [&result](std::vector<Option>&& options, const char* svc) {
11fdf7f2 8289 for (auto &o : options) {
c07f9fc5 8290 o.add_service(svc);
11fdf7f2 8291 result.push_back(std::move(o));
c07f9fc5
FG
8292 }
8293 };
8294
d2e6a577
FG
8295 ingest(get_rgw_options(), "rgw");
8296 ingest(get_rbd_options(), "rbd");
181888fb 8297 ingest(get_rbd_mirror_options(), "rbd-mirror");
d2e6a577
FG
8298 ingest(get_mds_options(), "mds");
8299 ingest(get_mds_client_options(), "mds_client");
c07f9fc5
FG
8300
8301 return result;
8302}
8303
8304const std::vector<Option> ceph_options = build_options();