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