]> git.proxmox.com Git - ceph.git/blame - ceph/src/common/options.cc
update sources to v12.2.5
[ceph.git] / ceph / src / common / options.cc
CommitLineData
c07f9fc5
FG
1// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2// vim: ts=8 sw=2 smarttab
3
4#include "acconfig.h"
5#include "options.h"
6#include "common/Formatter.h"
7
8// Helpers for validators
9#include "include/stringify.h"
10#include <boost/algorithm/string.hpp>
11#include <boost/lexical_cast.hpp>
12#include <boost/regex.hpp>
13
3efd9988
FG
14// Definitions for enums
15#include "common/perf_counters.h"
16
c07f9fc5
FG
17
18void Option::dump_value(const char *field_name,
19 const Option::value_t &v, Formatter *f) const
20{
21 if (boost::get<boost::blank>(&v)) {
22 // This should be nil but Formatter doesn't allow it.
23 f->dump_string(field_name, "");
24 } else if (type == TYPE_UINT) {
25 f->dump_unsigned(field_name, boost::get<uint64_t>(v));
26 } else if (type == TYPE_INT) {
27 f->dump_int(field_name, boost::get<int64_t>(v));
28 } else if (type == TYPE_STR) {
29 f->dump_string(field_name, boost::get<std::string>(v));
30 } else if (type == TYPE_FLOAT) {
31 f->dump_float(field_name, boost::get<double>(v));
32 } else if (type == TYPE_BOOL) {
33 f->dump_bool(field_name, boost::get<bool>(v));
34 } else {
35 f->dump_stream(field_name) << v;
36 }
37}
38
39int Option::pre_validate(std::string *new_value, std::string *err) const
40{
41 if (validator) {
42 return validator(new_value, err);
43 } else {
44 return 0;
45 }
46}
47
48int Option::validate(const Option::value_t &new_value, std::string *err) const
49{
50 // Generic validation: min
51 if (!boost::get<boost::blank>(&(min))) {
52 if (new_value < min) {
53 std::ostringstream oss;
54 oss << "Value '" << new_value << "' is below minimum " << min;
55 *err = oss.str();
56 return -EINVAL;
57 }
58 }
59
60 // Generic validation: max
61 if (!boost::get<boost::blank>(&(max))) {
62 if (new_value > max) {
63 std::ostringstream oss;
64 oss << "Value '" << new_value << "' exceeds maximum " << max;
65 *err = oss.str();
66 return -EINVAL;
67 }
68 }
69
70 // Generic validation: enum
71 if (!enum_allowed.empty() && type == Option::TYPE_STR) {
72 auto found = std::find(enum_allowed.begin(), enum_allowed.end(),
73 boost::get<std::string>(new_value));
74 if (found == enum_allowed.end()) {
75 std::ostringstream oss;
76 oss << "'" << new_value << "' is not one of the permitted "
77 "values: " << joinify(enum_allowed.begin(),
78 enum_allowed.end(),
79 std::string(", "));
80 *err = oss.str();
81 return -EINVAL;
82 }
83 }
84
85 return 0;
86}
87
88void Option::dump(Formatter *f) const
89{
90 f->open_object_section("option");
91 f->dump_string("name", name);
92
93 f->dump_string("type", type_to_str(type));
c07f9fc5
FG
94
95 f->dump_string("level", level_to_str(level));
96
97 f->dump_string("desc", desc);
98 f->dump_string("long_desc", long_desc);
99
100 dump_value("default", value, f);
101 dump_value("daemon_default", daemon_value, f);
102
103 f->open_array_section("tags");
104 for (const auto t : tags) {
105 f->dump_string("tag", t);
106 }
107 f->close_section();
108
109 f->open_array_section("services");
110 for (const auto s : services) {
111 f->dump_string("service", s);
112 }
113 f->close_section();
114
115 f->open_array_section("see_also");
116 for (const auto sa : see_also) {
117 f->dump_string("see_also", sa);
118 }
119 f->close_section();
120
121 if (type == TYPE_STR) {
122 f->open_array_section("enum_values");
123 for (const auto &ea : enum_allowed) {
124 f->dump_string("enum_value", ea);
125 }
126 f->close_section();
127 }
128
129 dump_value("min", min, f);
130 dump_value("max", max, f);
131
132 f->close_section();
133}
134
b32b8144
FG
135constexpr unsigned long long operator"" _min (unsigned long long min) {
136 return min * 60;
137}
138constexpr unsigned long long operator"" _hr (unsigned long long hr) {
139 return hr * 60 * 60;
140}
141constexpr unsigned long long operator"" _day (unsigned long long day) {
142 return day * 60 * 60 * 24;
143}
144constexpr unsigned long long operator"" _K (unsigned long long n) {
145 return n << 10;
146}
147constexpr unsigned long long operator"" _M (unsigned long long n) {
148 return n << 20;
149}
150constexpr unsigned long long operator"" _G (unsigned long long n) {
151 return n << 30;
152}
c07f9fc5 153
d2e6a577
FG
154std::vector<Option> get_global_options() {
155 return std::vector<Option>({
156 Option("host", Option::TYPE_STR, Option::LEVEL_BASIC)
157 .set_description("local hostname")
158 .set_long_description("if blank, ceph assumes the short hostname (hostname -s)")
159 .add_service("common")
160 .add_tag("network"),
161
162 Option("fsid", Option::TYPE_UUID, Option::LEVEL_BASIC)
163 .set_description("cluster fsid (uuid)")
164 .add_service("common")
165 .add_tag("service"),
166
167 Option("public_addr", Option::TYPE_ADDR, Option::LEVEL_BASIC)
168 .set_description("public-facing address to bind to")
169 .add_service({"mon", "mds", "osd", "mgr"}),
170
171 Option("public_bind_addr", Option::TYPE_ADDR, Option::LEVEL_ADVANCED)
172 .set_default(entity_addr_t())
173 .add_service("mon")
174 .set_description(""),
175
176 Option("cluster_addr", Option::TYPE_ADDR, Option::LEVEL_BASIC)
177 .set_description("cluster-facing address to bind to")
178 .add_service("osd")
179 .add_tag("network"),
180
181 Option("public_network", Option::TYPE_STR, Option::LEVEL_ADVANCED)
182 .add_service({"mon", "mds", "osd", "mgr"})
183 .add_tag("network")
3efd9988
FG
184 .set_description("Network(s) from which to choose a public address to bind to"),
185
186 Option("public_network_interface", Option::TYPE_STR, Option::LEVEL_ADVANCED)
187 .add_service({"mon", "mds", "osd", "mgr"})
188 .add_tag("network")
189 .set_description("Interface name(s) from which to choose an address from a public_network to bind to; public_network must also be specified.")
190 .add_see_also("public_network"),
d2e6a577
FG
191
192 Option("cluster_network", Option::TYPE_STR, Option::LEVEL_ADVANCED)
193 .add_service("osd")
194 .add_tag("network")
3efd9988
FG
195 .set_description("Network(s) from which to choose a cluster address to bind to"),
196
197 Option("cluster_network_interface", Option::TYPE_STR, Option::LEVEL_ADVANCED)
198 .add_service({"mon", "mds", "osd", "mgr"})
199 .add_tag("network")
200 .set_description("Interface name(s) from which to choose an address from a cluster_network to bind to; cluster_network must also be specified.")
201 .add_see_also("cluster_network"),
d2e6a577
FG
202
203 Option("monmap", Option::TYPE_STR, Option::LEVEL_ADVANCED)
204 .set_description("path to MonMap file")
205 .set_long_description("This option is normally used during mkfs, but can also "
206 "be used to identify which monitors to connect to.")
207 .add_service("mon")
208 .add_tag("mkfs"),
209
210 Option("mon_host", Option::TYPE_STR, Option::LEVEL_BASIC)
211 .set_description("list of hosts or addresses to search for a monitor")
212 .set_long_description("This is a comma, whitespace, or semicolon separated "
213 "list of IP addresses or hostnames. Hostnames are "
214 "resolved via DNS and all A or AAAA records are "
215 "included in the search list.")
216 .add_service("common"),
217
218 Option("mon_dns_srv_name", Option::TYPE_STR, Option::LEVEL_ADVANCED)
3efd9988 219 .set_default("ceph-mon")
d2e6a577
FG
220 .set_description("name of DNS SRV record to check for monitor addresses")
221 .add_service("common")
222 .add_tag("network")
223 .add_see_also("mon_host"),
224
225 // lockdep
226 Option("lockdep", Option::TYPE_BOOL, Option::LEVEL_DEV)
227 .set_description("enable lockdep lock dependency analyzer")
228 .add_service("common"),
229
230 Option("lockdep_force_backtrace", Option::TYPE_BOOL, Option::LEVEL_DEV)
231 .set_description("always gather current backtrace at every lock")
232 .add_service("common")
233 .add_see_also("lockdep"),
234
235 Option("run_dir", Option::TYPE_STR, Option::LEVEL_ADVANCED)
236 .set_default("/var/run/ceph")
237 .set_description("path for the 'run' directory for storing pid and socket files")
238 .add_service("common")
239 .add_see_also("admin_socket"),
240
241 Option("admin_socket", Option::TYPE_STR, Option::LEVEL_ADVANCED)
242 .set_default("")
243 .set_daemon_default("$run_dir/$cluster-$name.asok")
244 .set_description("path for the runtime control socket file, used by the 'ceph daemon' command")
245 .add_service("common"),
246
247 Option("admin_socket_mode", Option::TYPE_STR, Option::LEVEL_ADVANCED)
248 .set_description("file mode to set for the admin socket file, e.g, '0755'")
249 .add_service("common")
250 .add_see_also("admin_socket"),
251
252 Option("crushtool", Option::TYPE_STR, Option::LEVEL_ADVANCED)
253 .set_description("name of the 'crushtool' utility")
254 .add_service("mon"),
255
256 // daemon
257 Option("daemonize", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
258 .set_default(false)
259 .set_daemon_default(true)
260 .set_description("whether to daemonize (background) after startup")
261 .add_service({"mon", "mgr", "osd", "mds"})
262 .add_tag("service")
263 .add_see_also({"pid_file", "chdir"}),
264
265 Option("setuser", Option::TYPE_STR, Option::LEVEL_ADVANCED)
266 .set_description("uid or user name to switch to on startup")
267 .set_long_description("This is normally specified by the systemd unit file.")
268 .add_service({"mon", "mgr", "osd", "mds"})
269 .add_tag("service")
270 .add_see_also("setgroup"),
271
272 Option("setgroup", Option::TYPE_STR, Option::LEVEL_ADVANCED)
273 .set_description("gid or group name to switch to on startup")
274 .set_long_description("This is normally specified by the systemd unit file.")
275 .add_service({"mon", "mgr", "osd", "mds"})
276 .add_tag("service")
277 .add_see_also("setuser"),
278
279 Option("setuser_match_path", Option::TYPE_STR, Option::LEVEL_ADVANCED)
280 .set_description("if set, setuser/setgroup is condition on this path matching ownership")
281 .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.")
282 .add_service({"mon", "mgr", "osd", "mds"})
283 .add_tag("service")
284 .add_see_also({"setuser", "setgroup"}),
285
286 Option("pid_file", Option::TYPE_STR, Option::LEVEL_ADVANCED)
287 .set_description("path to write a pid file (if any)")
288 .add_service({"mon", "mgr", "osd", "mds"})
289 .add_tag("service"),
290
291 Option("chdir", Option::TYPE_STR, Option::LEVEL_ADVANCED)
292 .set_description("path to chdir(2) to after daemonizing")
293 .add_service({"mon", "mgr", "osd", "mds"})
294 .add_tag("service")
295 .add_see_also("daemonize"),
296
297 Option("fatal_signal_handlers", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
298 .set_default(true)
299 .set_description("whether to register signal handlers for SIGABRT etc that dump a stack trace")
300 .set_long_description("This is normally true for daemons and values for libraries.")
301 .add_service({"mon", "mgr", "osd", "mds"})
302 .add_tag("service"),
303
304 // restapi
305 Option("restapi_log_level", Option::TYPE_STR, Option::LEVEL_ADVANCED)
306 .set_description("default set by python code"),
307
308 Option("restapi_base_url", Option::TYPE_STR, Option::LEVEL_ADVANCED)
309 .set_description("default set by python code"),
310
311 Option("erasure_code_dir", Option::TYPE_STR, Option::LEVEL_ADVANCED)
312 .set_default(CEPH_PKGLIBDIR"/erasure-code")
313 .set_description("directory where erasure-code plugins can be found")
314 .add_service({"mon", "osd"})
315 .set_safe(),
316
317 // logging
318 Option("log_file", Option::TYPE_STR, Option::LEVEL_BASIC)
319 .set_default("")
320 .set_daemon_default("/var/log/ceph/$cluster-$name.log")
321 .set_description("path to log file")
322 .add_see_also({"log_to_stderr",
323 "err_to_stderr",
324 "log_to_syslog",
325 "err_to_syslog"}),
326
327 Option("log_max_new", Option::TYPE_INT, Option::LEVEL_ADVANCED)
328 .set_default(1000)
329 .set_description("max unwritten log entries to allow before waiting to flush to the log")
330 .add_see_also("log_max_recent"),
331
332 Option("log_max_recent", Option::TYPE_INT, Option::LEVEL_ADVANCED)
333 .set_default(500)
334 .set_daemon_default(10000)
335 .set_description("recent log entries to keep in memory to dump in the event of a crash")
336 .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."),
337
338 Option("log_to_stderr", Option::TYPE_BOOL, Option::LEVEL_BASIC)
339 .set_default(true)
340 .set_daemon_default(false)
341 .set_description("send log lines to stderr"),
342
343 Option("err_to_stderr", Option::TYPE_BOOL, Option::LEVEL_BASIC)
344 .set_default(false)
345 .set_daemon_default(true)
346 .set_description("send critical error log lines to stderr"),
347
b32b8144
FG
348 Option("log_stderr_prefix", Option::TYPE_STR, Option::LEVEL_ADVANCED)
349 .set_description("String to prefix log messages with when sent to stderr"),
350
d2e6a577
FG
351 Option("log_to_syslog", Option::TYPE_BOOL, Option::LEVEL_BASIC)
352 .set_default(false)
353 .set_description("send log lines to syslog facility"),
354
355 Option("err_to_syslog", Option::TYPE_BOOL, Option::LEVEL_BASIC)
356 .set_default(false)
357 .set_description("send critical error log lines to syslog facility"),
358
359 Option("log_flush_on_exit", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
360 .set_default(false)
361 .set_description("set a process exit handler to ensure the log is flushed on exit"),
362
363 Option("log_stop_at_utilization", Option::TYPE_FLOAT, Option::LEVEL_BASIC)
364 .set_default(.97)
365 .set_min_max(0.0, 1.0)
366 .set_description("stop writing to the log file when device utilization reaches this ratio")
367 .add_see_also("log_file"),
368
369 Option("log_to_graylog", Option::TYPE_BOOL, Option::LEVEL_BASIC)
370 .set_default(false)
371 .set_description("send log lines to remote graylog server")
372 .add_see_also({"err_to_graylog",
373 "log_graylog_host",
374 "log_graylog_port"}),
375
376 Option("err_to_graylog", Option::TYPE_BOOL, Option::LEVEL_BASIC)
377 .set_default(false)
378 .set_description("send critical error log lines to remote graylog server")
379 .add_see_also({"log_to_graylog",
380 "log_graylog_host",
381 "log_graylog_port"}),
382
383 Option("log_graylog_host", Option::TYPE_STR, Option::LEVEL_BASIC)
384 .set_default("127.0.0.1")
385 .set_description("address or hostname of graylog server to log to")
386 .add_see_also({"log_to_graylog",
387 "err_to_graylog",
388 "log_graylog_port"}),
389
390 Option("log_graylog_port", Option::TYPE_INT, Option::LEVEL_BASIC)
391 .set_default(12201)
392 .set_description("port number for the remote graylog server")
393 .add_see_also("log_graylog_host"),
394
395
396
397 // unmodified
398 Option("clog_to_monitors", Option::TYPE_STR, Option::LEVEL_ADVANCED)
399 .set_default("default=true")
400 .set_description(""),
401
402 Option("clog_to_syslog", Option::TYPE_STR, Option::LEVEL_ADVANCED)
403 .set_default("false")
404 .set_description(""),
405
406 Option("clog_to_syslog_level", Option::TYPE_STR, Option::LEVEL_ADVANCED)
407 .set_default("info")
408 .set_description(""),
409
410 Option("clog_to_syslog_facility", Option::TYPE_STR, Option::LEVEL_ADVANCED)
411 .set_default("default=daemon audit=local0")
412 .set_description(""),
413
414 Option("clog_to_graylog", Option::TYPE_STR, Option::LEVEL_ADVANCED)
415 .set_default("false")
416 .set_description(""),
417
418 Option("clog_to_graylog_host", Option::TYPE_STR, Option::LEVEL_ADVANCED)
419 .set_default("127.0.0.1")
420 .set_description(""),
421
422 Option("clog_to_graylog_port", Option::TYPE_STR, Option::LEVEL_ADVANCED)
423 .set_default("12201")
424 .set_description(""),
425
b32b8144
FG
426 Option("mon_cluster_log_to_stderr", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
427 .set_default(false)
428 .set_description("Send cluster log messages to stderr (prefixed by channel)"),
429
d2e6a577
FG
430 Option("mon_cluster_log_to_syslog", Option::TYPE_STR, Option::LEVEL_ADVANCED)
431 .set_default("default=false")
432 .set_description(""),
433
434 Option("mon_cluster_log_to_syslog_level", Option::TYPE_STR, Option::LEVEL_ADVANCED)
435 .set_default("info")
436 .set_description(""),
437
438 Option("mon_cluster_log_to_syslog_facility", Option::TYPE_STR, Option::LEVEL_ADVANCED)
439 .set_default("daemon")
440 .set_description(""),
441
442 Option("mon_cluster_log_file", Option::TYPE_STR, Option::LEVEL_ADVANCED)
443 .set_default("default=/var/log/ceph/$cluster.$channel.log cluster=/var/log/ceph/$cluster.log")
444 .set_description(""),
445
446 Option("mon_cluster_log_file_level", Option::TYPE_STR, Option::LEVEL_ADVANCED)
447 .set_default("info")
448 .set_description(""),
449
450 Option("mon_cluster_log_to_graylog", Option::TYPE_STR, Option::LEVEL_ADVANCED)
451 .set_default("false")
452 .set_description(""),
453
454 Option("mon_cluster_log_to_graylog_host", Option::TYPE_STR, Option::LEVEL_ADVANCED)
455 .set_default("127.0.0.1")
456 .set_description(""),
457
458 Option("mon_cluster_log_to_graylog_port", Option::TYPE_STR, Option::LEVEL_ADVANCED)
459 .set_default("12201")
460 .set_description(""),
461
462 Option("enable_experimental_unrecoverable_data_corrupting_features", Option::TYPE_STR, Option::LEVEL_ADVANCED)
463 .set_default("")
464 .set_description(""),
465
466 Option("plugin_dir", Option::TYPE_STR, Option::LEVEL_ADVANCED)
467 .set_default(CEPH_PKGLIBDIR)
468 .set_description("")
469 .set_safe(),
470
471 Option("xio_trace_mempool", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
472 .set_default(false)
473 .set_description(""),
474
475 Option("xio_trace_msgcnt", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
476 .set_default(false)
477 .set_description(""),
478
479 Option("xio_trace_xcon", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
480 .set_default(false)
481 .set_description(""),
482
483 Option("xio_queue_depth", Option::TYPE_INT, Option::LEVEL_ADVANCED)
484 .set_default(128)
485 .set_description(""),
486
487 Option("xio_mp_min", Option::TYPE_INT, Option::LEVEL_ADVANCED)
488 .set_default(128)
489 .set_description(""),
490
491 Option("xio_mp_max_64", Option::TYPE_INT, Option::LEVEL_ADVANCED)
492 .set_default(65536)
493 .set_description(""),
494
495 Option("xio_mp_max_256", Option::TYPE_INT, Option::LEVEL_ADVANCED)
496 .set_default(8192)
497 .set_description(""),
c07f9fc5 498
d2e6a577
FG
499 Option("xio_mp_max_1k", Option::TYPE_INT, Option::LEVEL_ADVANCED)
500 .set_default(8192)
501 .set_description(""),
502
503 Option("xio_mp_max_page", Option::TYPE_INT, Option::LEVEL_ADVANCED)
504 .set_default(4096)
505 .set_description(""),
506
507 Option("xio_mp_max_hint", Option::TYPE_INT, Option::LEVEL_ADVANCED)
508 .set_default(4096)
509 .set_description(""),
510
511 Option("xio_portal_threads", Option::TYPE_INT, Option::LEVEL_ADVANCED)
512 .set_default(2)
513 .set_description(""),
514
515 Option("xio_max_conns_per_portal", Option::TYPE_INT, Option::LEVEL_ADVANCED)
516 .set_default(32)
517 .set_description(""),
518
519 Option("xio_transport_type", Option::TYPE_STR, Option::LEVEL_ADVANCED)
520 .set_default("rdma")
521 .set_description(""),
522
523 Option("xio_max_send_inline", Option::TYPE_INT, Option::LEVEL_ADVANCED)
524 .set_default(512)
525 .set_description(""),
526
527 Option("compressor_zlib_isal", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
528 .set_default(false)
529 .set_description(""),
530
531 Option("compressor_zlib_level", Option::TYPE_INT, Option::LEVEL_ADVANCED)
532 .set_default(5)
533 .set_description(""),
534
535 Option("async_compressor_enabled", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
536 .set_default(false)
537 .set_description(""),
538
539 Option("async_compressor_type", Option::TYPE_STR, Option::LEVEL_ADVANCED)
540 .set_default("snappy")
541 .set_description(""),
542
543 Option("async_compressor_threads", Option::TYPE_INT, Option::LEVEL_ADVANCED)
544 .set_default(2)
545 .set_description(""),
546
547 Option("async_compressor_thread_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
548 .set_default(5)
549 .set_description(""),
550
551 Option("async_compressor_thread_suicide_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
552 .set_default(30)
553 .set_description(""),
554
555 Option("plugin_crypto_accelerator", Option::TYPE_STR, Option::LEVEL_ADVANCED)
556 .set_default("crypto_isal")
557 .set_description(""),
558
559 Option("mempool_debug", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
560 .set_default(false)
561 .set_description(""),
562
563 Option("key", Option::TYPE_STR, Option::LEVEL_ADVANCED)
564 .set_default("")
3efd9988
FG
565 .set_description("Authentication key")
566 .set_long_description("A CephX authentication key, base64 encoded. It normally looks something like 'AQAtut9ZdMbNJBAAHz6yBAWyJyz2yYRyeMWDag=='.")
567 .add_see_also("keyfile")
568 .add_see_also("keyring"),
d2e6a577
FG
569
570 Option("keyfile", Option::TYPE_STR, Option::LEVEL_ADVANCED)
571 .set_default("")
3efd9988
FG
572 .set_description("Path to a file containing a key")
573 .set_long_description("The file should contain a CephX authentication key and optionally a trailing newline, but nothing else.")
574 .add_see_also("key"),
d2e6a577
FG
575
576 Option("keyring", Option::TYPE_STR, Option::LEVEL_ADVANCED)
577 .set_default(
578 "/etc/ceph/$cluster.$name.keyring,/etc/ceph/$cluster.keyring,"
579 "/etc/ceph/keyring,/etc/ceph/keyring.bin,"
580 #if defined(__FreeBSD)
581 "/usr/local/etc/ceph/$cluster.$name.keyring,"
582 "/usr/local/etc/ceph/$cluster.keyring,"
583 "/usr/local/etc/ceph/keyring,/usr/local/etc/ceph/keyring.bin,"
584 #endif
585 )
3efd9988
FG
586 .set_description("Path to a keyring file.")
587 .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.")
588 .add_see_also("key")
589 .add_see_also("keyfile"),
d2e6a577
FG
590
591 Option("heartbeat_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
592 .set_default(5)
593 .set_description(""),
594
595 Option("heartbeat_file", Option::TYPE_STR, Option::LEVEL_ADVANCED)
596 .set_default("")
597 .set_description(""),
598
599 Option("heartbeat_inject_failure", Option::TYPE_INT, Option::LEVEL_DEV)
600 .set_default(0)
601 .set_description(""),
602
603 Option("perf", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
604 .set_default(true)
605 .set_description(""),
606
607 Option("ms_type", Option::TYPE_STR, Option::LEVEL_ADVANCED)
608 .set_default("async+posix")
609 .set_description("")
610 .set_safe(),
611
612 Option("ms_public_type", Option::TYPE_STR, Option::LEVEL_ADVANCED)
613 .set_default("")
614 .set_description(""),
615
616 Option("ms_cluster_type", Option::TYPE_STR, Option::LEVEL_ADVANCED)
617 .set_default("")
618 .set_description(""),
619
620 Option("ms_tcp_nodelay", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
621 .set_default(true)
622 .set_description(""),
623
624 Option("ms_tcp_rcvbuf", Option::TYPE_INT, Option::LEVEL_ADVANCED)
625 .set_default(0)
626 .set_description(""),
627
628 Option("ms_tcp_prefetch_max_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144 629 .set_default(4_K)
d2e6a577
FG
630 .set_description(""),
631
632 Option("ms_initial_backoff", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
633 .set_default(.2)
634 .set_description(""),
635
636 Option("ms_max_backoff", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
637 .set_default(15.0)
638 .set_description(""),
639
640 Option("ms_crc_data", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
641 .set_default(true)
642 .set_description(""),
643
644 Option("ms_crc_header", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
645 .set_default(true)
646 .set_description(""),
647
648 Option("ms_die_on_bad_msg", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
649 .set_default(false)
650 .set_description(""),
651
652 Option("ms_die_on_unhandled_msg", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
653 .set_default(false)
654 .set_description(""),
655
656 Option("ms_die_on_old_message", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
657 .set_default(false)
658 .set_description(""),
659
660 Option("ms_die_on_skipped_message", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
661 .set_default(false)
662 .set_description(""),
663
664 Option("ms_dispatch_throttle_bytes", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
665 .set_default(100 << 20)
666 .set_description(""),
667
668 Option("ms_bind_ipv6", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
669 .set_default(false)
670 .set_description(""),
671
672 Option("ms_bind_port_min", Option::TYPE_INT, Option::LEVEL_ADVANCED)
673 .set_default(6800)
674 .set_description(""),
675
676 Option("ms_bind_port_max", Option::TYPE_INT, Option::LEVEL_ADVANCED)
677 .set_default(7300)
678 .set_description(""),
679
680 Option("ms_bind_retry_count", Option::TYPE_INT, Option::LEVEL_ADVANCED)
681 #if !defined(__FreeBSD__)
682 .set_default(3)
683 #else
684 // FreeBSD does not use SO_REAUSEADDR so allow for a bit more time per default
685 .set_default(6)
686 #endif
687 .set_description(""),
688
689 Option("ms_bind_retry_delay", Option::TYPE_INT, Option::LEVEL_ADVANCED)
690 #if !defined(__FreeBSD__)
691 .set_default(5)
692 #else
693 // FreeBSD does not use SO_REAUSEADDR so allow for a bit more time per default
694 .set_default(6)
695 #endif
696 .set_description(""),
697
698 Option("ms_bind_before_connect", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
699 .set_default(false)
700 .set_description(""),
701
702 Option("ms_tcp_listen_backlog", Option::TYPE_INT, Option::LEVEL_ADVANCED)
703 .set_default(512)
704 .set_description(""),
705
706 Option("ms_rwthread_stack_bytes", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 707 .set_default(1_M)
d2e6a577
FG
708 .set_description(""),
709
710 Option("ms_tcp_read_timeout", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
711 .set_default(900)
712 .set_description(""),
713
714 Option("ms_pq_max_tokens_per_priority", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
715 .set_default(16777216)
716 .set_description(""),
717
718 Option("ms_pq_min_cost", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
719 .set_default(65536)
720 .set_description(""),
721
722 Option("ms_inject_socket_failures", Option::TYPE_UINT, Option::LEVEL_DEV)
723 .set_default(0)
724 .set_description(""),
725
726 Option("ms_inject_delay_type", Option::TYPE_STR, Option::LEVEL_DEV)
727 .set_default("")
728 .set_description("")
729 .set_safe(),
730
731 Option("ms_inject_delay_msg_type", Option::TYPE_STR, Option::LEVEL_DEV)
732 .set_default("")
733 .set_description(""),
734
735 Option("ms_inject_delay_max", Option::TYPE_FLOAT, Option::LEVEL_DEV)
736 .set_default(1)
737 .set_description(""),
738
739 Option("ms_inject_delay_probability", Option::TYPE_FLOAT, Option::LEVEL_DEV)
740 .set_default(0)
741 .set_description(""),
742
743 Option("ms_inject_internal_delays", Option::TYPE_FLOAT, Option::LEVEL_DEV)
744 .set_default(0)
745 .set_description(""),
746
747 Option("ms_dump_on_send", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
748 .set_default(false)
749 .set_description(""),
750
751 Option("ms_dump_corrupt_message_level", Option::TYPE_INT, Option::LEVEL_ADVANCED)
752 .set_default(1)
753 .set_description(""),
754
755 Option("ms_async_op_threads", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
756 .set_default(3)
757 .set_description(""),
758
759 Option("ms_async_max_op_threads", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
760 .set_default(5)
761 .set_description(""),
762
763 Option("ms_async_set_affinity", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
764 .set_default(true)
765 .set_description(""),
766
767 Option("ms_async_affinity_cores", Option::TYPE_STR, Option::LEVEL_ADVANCED)
768 .set_default("")
769 .set_description(""),
770
771 Option("ms_async_rdma_device_name", Option::TYPE_STR, Option::LEVEL_ADVANCED)
772 .set_default("")
773 .set_description(""),
774
775 Option("ms_async_rdma_enable_hugepage", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
776 .set_default(false)
777 .set_description(""),
778
779 Option("ms_async_rdma_buffer_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144 780 .set_default(128_K)
d2e6a577
FG
781 .set_description(""),
782
783 Option("ms_async_rdma_send_buffers", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 784 .set_default(1_K)
d2e6a577
FG
785 .set_description(""),
786
787 Option("ms_async_rdma_receive_buffers", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
788 .set_default(1024)
789 .set_description(""),
790
791 Option("ms_async_rdma_port_num", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
792 .set_default(1)
793 .set_description(""),
794
795 Option("ms_async_rdma_polling_us", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
796 .set_default(1000)
797 .set_description(""),
798
799 Option("ms_async_rdma_local_gid", Option::TYPE_STR, Option::LEVEL_ADVANCED)
800 .set_default("")
801 .set_description(""),
802
803 Option("ms_async_rdma_roce_ver", Option::TYPE_INT, Option::LEVEL_ADVANCED)
804 .set_default(1)
805 .set_description(""),
806
807 Option("ms_async_rdma_sl", Option::TYPE_INT, Option::LEVEL_ADVANCED)
808 .set_default(3)
809 .set_description(""),
810
811 Option("ms_async_rdma_dscp", Option::TYPE_INT, Option::LEVEL_ADVANCED)
812 .set_default(96)
813 .set_description(""),
814
815 Option("ms_dpdk_port_id", Option::TYPE_INT, Option::LEVEL_ADVANCED)
816 .set_default(0)
817 .set_description(""),
818
819 Option("ms_dpdk_coremask", Option::TYPE_STR, Option::LEVEL_ADVANCED)
820 .set_default("1")
821 .set_description("")
822 .set_safe(),
823
824 Option("ms_dpdk_memory_channel", Option::TYPE_STR, Option::LEVEL_ADVANCED)
825 .set_default("4")
826 .set_description(""),
827
828 Option("ms_dpdk_hugepages", Option::TYPE_STR, Option::LEVEL_ADVANCED)
829 .set_default("")
830 .set_description(""),
831
832 Option("ms_dpdk_pmd", Option::TYPE_STR, Option::LEVEL_ADVANCED)
833 .set_default("")
834 .set_description(""),
835
836 Option("ms_dpdk_host_ipv4_addr", Option::TYPE_STR, Option::LEVEL_ADVANCED)
837 .set_default("")
838 .set_description("")
839 .set_safe(),
840
841 Option("ms_dpdk_gateway_ipv4_addr", Option::TYPE_STR, Option::LEVEL_ADVANCED)
842 .set_default("")
843 .set_description("")
844 .set_safe(),
845
846 Option("ms_dpdk_netmask_ipv4_addr", Option::TYPE_STR, Option::LEVEL_ADVANCED)
847 .set_default("")
848 .set_description("")
849 .set_safe(),
c07f9fc5 850
d2e6a577
FG
851 Option("ms_dpdk_lro", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
852 .set_default(true)
853 .set_description(""),
c07f9fc5 854
d2e6a577
FG
855 Option("ms_dpdk_hw_flow_control", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
856 .set_default(true)
857 .set_description(""),
c07f9fc5 858
d2e6a577
FG
859 Option("ms_dpdk_hw_queue_weight", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
860 .set_default(1)
861 .set_description(""),
c07f9fc5 862
d2e6a577
FG
863 Option("ms_dpdk_debug_allow_loopback", Option::TYPE_BOOL, Option::LEVEL_DEV)
864 .set_default(false)
865 .set_description(""),
c07f9fc5 866
d2e6a577
FG
867 Option("ms_dpdk_rx_buffer_count_per_core", Option::TYPE_INT, Option::LEVEL_ADVANCED)
868 .set_default(8192)
869 .set_description(""),
c07f9fc5 870
d2e6a577
FG
871 Option("inject_early_sigterm", Option::TYPE_BOOL, Option::LEVEL_DEV)
872 .set_default(false)
873 .set_description(""),
c07f9fc5 874
d2e6a577
FG
875 Option("mon_data", Option::TYPE_STR, Option::LEVEL_ADVANCED)
876 .set_default("/var/lib/ceph/mon/$cluster-$id")
877 .set_description(""),
c07f9fc5 878
d2e6a577
FG
879 Option("mon_initial_members", Option::TYPE_STR, Option::LEVEL_ADVANCED)
880 .set_default("")
881 .set_description(""),
c07f9fc5 882
d2e6a577
FG
883 Option("mon_compact_on_start", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
884 .set_default(false)
885 .set_description(""),
c07f9fc5 886
d2e6a577
FG
887 Option("mon_compact_on_bootstrap", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
888 .set_default(false)
889 .set_description(""),
c07f9fc5 890
d2e6a577
FG
891 Option("mon_compact_on_trim", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
892 .set_default(true)
893 .set_description(""),
c07f9fc5 894
d2e6a577
FG
895 Option("mon_osd_cache_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
896 .set_default(10)
897 .set_description(""),
c07f9fc5 898
d2e6a577
FG
899 Option("mon_cpu_threads", Option::TYPE_INT, Option::LEVEL_ADVANCED)
900 .set_default(4)
901 .set_description(""),
c07f9fc5 902
d2e6a577
FG
903 Option("mon_osd_mapping_pgs_per_chunk", Option::TYPE_INT, Option::LEVEL_ADVANCED)
904 .set_default(4096)
905 .set_description(""),
c07f9fc5 906
d2e6a577
FG
907 Option("mon_osd_max_creating_pgs", Option::TYPE_INT, Option::LEVEL_ADVANCED)
908 .set_default(1024)
909 .set_description(""),
c07f9fc5 910
d2e6a577
FG
911 Option("mon_tick_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
912 .set_default(5)
913 .set_description(""),
c07f9fc5 914
d2e6a577
FG
915 Option("mon_session_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
916 .set_default(300)
917 .set_description(""),
c07f9fc5 918
d2e6a577 919 Option("mon_subscribe_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
b32b8144 920 .set_default(1_day)
d2e6a577 921 .set_description(""),
c07f9fc5 922
d2e6a577
FG
923 Option("mon_delta_reset_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
924 .set_default(10)
925 .set_description(""),
c07f9fc5 926
d2e6a577 927 Option("mon_osd_laggy_halflife", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144 928 .set_default(1_hr)
d2e6a577 929 .set_description(""),
c07f9fc5 930
d2e6a577
FG
931 Option("mon_osd_laggy_weight", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
932 .set_default(.3)
933 .set_description(""),
c07f9fc5 934
d2e6a577
FG
935 Option("mon_osd_laggy_max_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
936 .set_default(300)
937 .set_description(""),
c07f9fc5 938
d2e6a577
FG
939 Option("mon_osd_adjust_heartbeat_grace", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
940 .set_default(true)
941 .set_description(""),
c07f9fc5 942
d2e6a577
FG
943 Option("mon_osd_adjust_down_out_interval", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
944 .set_default(true)
945 .set_description(""),
c07f9fc5 946
d2e6a577
FG
947 Option("mon_osd_auto_mark_in", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
948 .set_default(false)
949 .set_description(""),
c07f9fc5 950
d2e6a577
FG
951 Option("mon_osd_auto_mark_auto_out_in", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
952 .set_default(true)
953 .set_description(""),
c07f9fc5 954
d2e6a577
FG
955 Option("mon_osd_auto_mark_new_in", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
956 .set_default(true)
957 .set_description(""),
c07f9fc5 958
d2e6a577
FG
959 Option("mon_osd_destroyed_out_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
960 .set_default(600)
961 .set_description(""),
c07f9fc5 962
d2e6a577
FG
963 Option("mon_osd_down_out_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
964 .set_default(600)
965 .set_description(""),
c07f9fc5 966
d2e6a577
FG
967 Option("mon_osd_down_out_subtree_limit", Option::TYPE_STR, Option::LEVEL_ADVANCED)
968 .set_default("rack")
969 .set_description(""),
c07f9fc5 970
d2e6a577
FG
971 Option("mon_osd_min_up_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
972 .set_default(.3)
973 .set_description(""),
c07f9fc5 974
d2e6a577
FG
975 Option("mon_osd_min_in_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
976 .set_default(.75)
977 .set_description(""),
c07f9fc5 978
d2e6a577
FG
979 Option("mon_osd_warn_op_age", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
980 .set_default(32)
981 .set_description(""),
c07f9fc5 982
d2e6a577
FG
983 Option("mon_osd_err_op_age_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
984 .set_default(128)
985 .set_description(""),
c07f9fc5 986
d2e6a577
FG
987 Option("mon_osd_max_split_count", Option::TYPE_INT, Option::LEVEL_ADVANCED)
988 .set_default(32)
989 .set_description(""),
c07f9fc5 990
d2e6a577
FG
991 Option("mon_osd_allow_primary_temp", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
992 .set_default(false)
993 .set_description(""),
c07f9fc5 994
d2e6a577
FG
995 Option("mon_osd_allow_primary_affinity", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
996 .set_default(false)
997 .set_description(""),
c07f9fc5 998
d2e6a577
FG
999 Option("mon_osd_prime_pg_temp", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1000 .set_default(true)
1001 .set_description(""),
c07f9fc5 1002
d2e6a577
FG
1003 Option("mon_osd_prime_pg_temp_max_time", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1004 .set_default(.5)
1005 .set_description(""),
c07f9fc5 1006
d2e6a577
FG
1007 Option("mon_osd_prime_pg_temp_max_estimate", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1008 .set_default(.25)
1009 .set_description(""),
c07f9fc5 1010
d2e6a577
FG
1011 Option("mon_osd_pool_ec_fast_read", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1012 .set_default(false)
1013 .set_description(""),
c07f9fc5 1014
b32b8144 1015 Option("mon_stat_smooth_intervals", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577 1016 .set_default(6)
b32b8144
FG
1017 .set_min(1)
1018 .add_service("mgr")
1019 .set_description("number of PGMaps stats over which we calc the average read/write throughput of the whole cluster"),
c07f9fc5 1020
d2e6a577
FG
1021 Option("mon_election_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1022 .set_default(5)
1023 .set_description(""),
c07f9fc5 1024
d2e6a577
FG
1025 Option("mon_lease", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1026 .set_default(5)
1027 .set_description(""),
c07f9fc5 1028
d2e6a577
FG
1029 Option("mon_lease_renew_interval_factor", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1030 .set_default(.6)
1031 .set_description(""),
c07f9fc5 1032
d2e6a577
FG
1033 Option("mon_lease_ack_timeout_factor", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1034 .set_default(2.0)
1035 .set_description(""),
c07f9fc5 1036
d2e6a577
FG
1037 Option("mon_accept_timeout_factor", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1038 .set_default(2.0)
1039 .set_description(""),
c07f9fc5 1040
d2e6a577
FG
1041 Option("mon_clock_drift_allowed", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1042 .set_default(.050)
1043 .set_description(""),
c07f9fc5 1044
d2e6a577
FG
1045 Option("mon_clock_drift_warn_backoff", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1046 .set_default(5)
1047 .set_description(""),
c07f9fc5 1048
d2e6a577
FG
1049 Option("mon_timecheck_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1050 .set_default(300.0)
1051 .set_description(""),
c07f9fc5 1052
d2e6a577
FG
1053 Option("mon_timecheck_skew_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1054 .set_default(30.0)
1055 .set_description(""),
c07f9fc5 1056
d2e6a577
FG
1057 Option("mon_pg_stuck_threshold", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1058 .set_default(60)
b32b8144
FG
1059 .set_description("number of seconds after which pgs can be considered stuck inactive, unclean, etc")
1060 .set_long_description("see doc/control.rst under dump_stuck for more info")
1061 .add_service("mgr"),
c07f9fc5 1062
d2e6a577
FG
1063 Option("mon_pg_min_inactive", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1064 .set_default(1)
1065 .set_description(""),
c07f9fc5 1066
3efd9988 1067 Option("mon_pg_warn_min_per_osd", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577 1068 .set_default(30)
3efd9988 1069 .set_description("minimal number PGs per (in) osd before we warn the admin"),
c07f9fc5 1070
3efd9988
FG
1071 Option("mon_max_pg_per_osd", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1072 .set_default(200)
1073 .set_description("Max number of PGs per OSD the cluster will allow"),
c07f9fc5 1074
d2e6a577
FG
1075 Option("mon_pg_warn_max_object_skew", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1076 .set_default(10.0)
b32b8144
FG
1077 .set_description("max skew few average in objects per pg")
1078 .add_service("mgr"),
c07f9fc5 1079
d2e6a577
FG
1080 Option("mon_pg_warn_min_objects", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1081 .set_default(10000)
b32b8144
FG
1082 .set_description("do not warn below this object #")
1083 .add_service("mgr"),
c07f9fc5 1084
d2e6a577
FG
1085 Option("mon_pg_warn_min_pool_objects", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1086 .set_default(1000)
b32b8144
FG
1087 .set_description("do not warn on pools below this object #")
1088 .add_service("mgr"),
c07f9fc5 1089
d2e6a577
FG
1090 Option("mon_pg_check_down_all_threshold", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1091 .set_default(.5)
b32b8144
FG
1092 .set_description("threshold of down osds after which we check all pgs")
1093 .add_service("mgr"),
c07f9fc5 1094
d2e6a577
FG
1095 Option("mon_cache_target_full_warn_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1096 .set_default(.66)
1097 .set_description(""),
c07f9fc5 1098
d2e6a577
FG
1099 Option("mon_osd_full_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1100 .set_default(.95)
1101 .set_description(""),
c07f9fc5 1102
d2e6a577
FG
1103 Option("mon_osd_backfillfull_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1104 .set_default(.90)
1105 .set_description(""),
c07f9fc5 1106
d2e6a577
FG
1107 Option("mon_osd_nearfull_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1108 .set_default(.85)
1109 .set_description(""),
c07f9fc5 1110
d2e6a577
FG
1111 Option("mon_osd_initial_require_min_compat_client", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1112 .set_default("jewel")
1113 .set_description(""),
c07f9fc5 1114
d2e6a577
FG
1115 Option("mon_allow_pool_delete", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1116 .set_default(false)
1117 .set_description(""),
c07f9fc5 1118
d2e6a577
FG
1119 Option("mon_fake_pool_delete", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1120 .set_default(false)
1121 .set_description(""),
c07f9fc5 1122
d2e6a577
FG
1123 Option("mon_globalid_prealloc", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1124 .set_default(10000)
1125 .set_description(""),
c07f9fc5 1126
d2e6a577
FG
1127 Option("mon_osd_report_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1128 .set_default(900)
1129 .set_description(""),
c07f9fc5 1130
d2e6a577
FG
1131 Option("mon_force_standby_active", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1132 .set_default(true)
1133 .set_description(""),
c07f9fc5 1134
d2e6a577
FG
1135 Option("mon_warn_on_legacy_crush_tunables", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1136 .set_default(true)
1137 .set_description(""),
c07f9fc5 1138
d2e6a577
FG
1139 Option("mon_crush_min_required_version", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1140 .set_default("firefly")
1141 .set_description(""),
c07f9fc5 1142
d2e6a577
FG
1143 Option("mon_warn_on_crush_straw_calc_version_zero", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1144 .set_default(true)
1145 .set_description(""),
c07f9fc5 1146
d2e6a577
FG
1147 Option("mon_warn_on_osd_down_out_interval_zero", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1148 .set_default(true)
1149 .set_description(""),
c07f9fc5 1150
d2e6a577
FG
1151 Option("mon_warn_on_cache_pools_without_hit_sets", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1152 .set_default(true)
1153 .set_description(""),
c07f9fc5 1154
d2e6a577
FG
1155 Option("mon_warn_on_pool_no_app", Option::TYPE_BOOL, Option::LEVEL_DEV)
1156 .set_default(true)
1157 .set_description("Enable POOL_APP_NOT_ENABLED health check"),
c07f9fc5 1158
d2e6a577
FG
1159 Option("mon_min_osdmap_epochs", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1160 .set_default(500)
1161 .set_description(""),
c07f9fc5 1162
d2e6a577
FG
1163 Option("mon_max_pgmap_epochs", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1164 .set_default(500)
1165 .set_description(""),
c07f9fc5 1166
d2e6a577
FG
1167 Option("mon_max_log_epochs", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1168 .set_default(500)
1169 .set_description(""),
c07f9fc5 1170
d2e6a577
FG
1171 Option("mon_max_mdsmap_epochs", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1172 .set_default(500)
1173 .set_description(""),
c07f9fc5 1174
b32b8144
FG
1175 Option("mon_max_mgrmap_epochs", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1176 .set_default(500)
1177 .set_description(""),
1178
d2e6a577
FG
1179 Option("mon_max_osd", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1180 .set_default(10000)
1181 .set_description(""),
c07f9fc5 1182
d2e6a577
FG
1183 Option("mon_probe_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1184 .set_default(2.0)
1185 .set_description(""),
c07f9fc5 1186
d2e6a577
FG
1187 Option("mon_client_bytes", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1188 .set_default(100ul << 20)
1189 .set_description(""),
c07f9fc5 1190
3efd9988 1191 Option("mon_mgr_proxy_client_bytes_ratio", Option::TYPE_FLOAT, Option::LEVEL_DEV)
d2e6a577 1192 .set_default(.3)
3efd9988
FG
1193 .set_description("ratio of mon_client_bytes that can be consumed by "
1194 "proxied mgr commands before we error out to client"),
c07f9fc5 1195
d2e6a577
FG
1196 Option("mon_log_max_summary", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1197 .set_default(50)
1198 .set_description(""),
c07f9fc5 1199
d2e6a577
FG
1200 Option("mon_daemon_bytes", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1201 .set_default(400ul << 20)
1202 .set_description(""),
c07f9fc5 1203
d2e6a577
FG
1204 Option("mon_max_log_entries_per_event", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1205 .set_default(4096)
1206 .set_description(""),
c07f9fc5 1207
d2e6a577
FG
1208 Option("mon_reweight_min_pgs_per_osd", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1209 .set_default(10)
1210 .set_description(""),
c07f9fc5 1211
d2e6a577 1212 Option("mon_reweight_min_bytes_per_osd", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 1213 .set_default(100_M)
d2e6a577 1214 .set_description(""),
c07f9fc5 1215
d2e6a577
FG
1216 Option("mon_reweight_max_osds", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1217 .set_default(4)
1218 .set_description(""),
c07f9fc5 1219
d2e6a577
FG
1220 Option("mon_reweight_max_change", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1221 .set_default(0.05)
1222 .set_description(""),
c07f9fc5 1223
d2e6a577
FG
1224 Option("mon_health_data_update_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1225 .set_default(60.0)
1226 .set_description(""),
c07f9fc5 1227
d2e6a577
FG
1228 Option("mon_health_to_clog", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1229 .set_default(true)
1230 .set_description(""),
c07f9fc5 1231
d2e6a577 1232 Option("mon_health_to_clog_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144 1233 .set_default(1_hr)
d2e6a577 1234 .set_description(""),
c07f9fc5 1235
d2e6a577
FG
1236 Option("mon_health_to_clog_tick_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1237 .set_default(60.0)
1238 .set_description(""),
c07f9fc5 1239
d2e6a577
FG
1240 Option("mon_health_preluminous_compat", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1241 .set_default(false)
1242 .set_description("Include health warnings in preluminous JSON fields"),
c07f9fc5 1243
d2e6a577
FG
1244 Option("mon_health_preluminous_compat_warning", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1245 .set_default(true)
1246 .set_description("Warn about the health JSON format change in preluminous JSON fields"),
c07f9fc5 1247
b32b8144 1248 Option("mon_health_max_detail", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
d2e6a577 1249 .set_default(50)
b32b8144 1250 .set_description("max detailed pgs to report in health detail"),
c07f9fc5 1251
181888fb
FG
1252 Option("mon_health_log_update_period", Option::TYPE_INT, Option::LEVEL_DEV)
1253 .set_default(5)
1254 .set_description("Minimum time in seconds between log messages about "
1255 "each health check")
1256 .set_min(0),
1257
d2e6a577
FG
1258 Option("mon_data_avail_crit", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1259 .set_default(5)
1260 .set_description(""),
c07f9fc5 1261
d2e6a577
FG
1262 Option("mon_data_avail_warn", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1263 .set_default(30)
1264 .set_description(""),
c07f9fc5 1265
d2e6a577 1266 Option("mon_data_size_warn", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 1267 .set_default(15_G)
d2e6a577 1268 .set_description(""),
c07f9fc5 1269
d2e6a577
FG
1270 Option("mon_warn_not_scrubbed", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1271 .set_default(0)
1272 .set_description(""),
c07f9fc5 1273
d2e6a577
FG
1274 Option("mon_warn_not_deep_scrubbed", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1275 .set_default(0)
1276 .set_description(""),
c07f9fc5 1277
d2e6a577 1278 Option("mon_scrub_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144 1279 .set_default(1_day)
d2e6a577 1280 .set_description(""),
c07f9fc5 1281
d2e6a577 1282 Option("mon_scrub_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144 1283 .set_default(5_min)
d2e6a577 1284 .set_description(""),
c07f9fc5 1285
d2e6a577
FG
1286 Option("mon_scrub_max_keys", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1287 .set_default(100)
1288 .set_description(""),
c07f9fc5 1289
d2e6a577
FG
1290 Option("mon_scrub_inject_crc_mismatch", Option::TYPE_FLOAT, Option::LEVEL_DEV)
1291 .set_default(0.0)
1292 .set_description(""),
c07f9fc5 1293
d2e6a577
FG
1294 Option("mon_scrub_inject_missing_keys", Option::TYPE_FLOAT, Option::LEVEL_DEV)
1295 .set_default(0.0)
1296 .set_description(""),
c07f9fc5 1297
d2e6a577 1298 Option("mon_config_key_max_entry_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144 1299 .set_default(4_K)
d2e6a577 1300 .set_description(""),
c07f9fc5 1301
d2e6a577
FG
1302 Option("mon_sync_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1303 .set_default(60.0)
1304 .set_description(""),
c07f9fc5 1305
d2e6a577 1306 Option("mon_sync_max_payload_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 1307 .set_default(1_M)
d2e6a577 1308 .set_description(""),
c07f9fc5 1309
d2e6a577
FG
1310 Option("mon_sync_debug", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1311 .set_default(false)
1312 .set_description(""),
c07f9fc5 1313
d2e6a577
FG
1314 Option("mon_inject_sync_get_chunk_delay", Option::TYPE_FLOAT, Option::LEVEL_DEV)
1315 .set_default(0)
1316 .set_description(""),
c07f9fc5 1317
d2e6a577
FG
1318 Option("mon_osd_min_down_reporters", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1319 .set_default(2)
1320 .set_description(""),
c07f9fc5 1321
d2e6a577
FG
1322 Option("mon_osd_reporter_subtree_level", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1323 .set_default("host")
1324 .set_description(""),
c07f9fc5 1325
b32b8144
FG
1326 Option("mon_osd_snap_trim_queue_warn_on", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1327 .set_default(32768)
1328 .set_description("Warn when snap trim queue is that large (or larger).")
1329 .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"),
1330
d2e6a577
FG
1331 Option("mon_osd_force_trim_to", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1332 .set_default(0)
1333 .set_description(""),
c07f9fc5 1334
d2e6a577
FG
1335 Option("mon_mds_force_trim_to", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1336 .set_default(0)
1337 .set_description(""),
c07f9fc5 1338
d2e6a577
FG
1339 Option("mon_mds_skip_sanity", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1340 .set_default(false)
1341 .set_description(""),
c07f9fc5 1342
3efd9988
FG
1343 Option("mon_fixup_legacy_erasure_code_profiles", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1344 .set_default(true)
1345 .set_description("Automatically adjust ruleset-* to crush-* so that legacy apps can set modern erasure code profiles without modification"),
1346
d2e6a577
FG
1347 Option("mon_debug_deprecated_as_obsolete", Option::TYPE_BOOL, Option::LEVEL_DEV)
1348 .set_default(false)
1349 .set_description(""),
c07f9fc5 1350
d2e6a577
FG
1351 Option("mon_debug_dump_transactions", Option::TYPE_BOOL, Option::LEVEL_DEV)
1352 .set_default(false)
1353 .set_description(""),
c07f9fc5 1354
d2e6a577
FG
1355 Option("mon_debug_dump_json", Option::TYPE_BOOL, Option::LEVEL_DEV)
1356 .set_default(false)
1357 .set_description(""),
c07f9fc5 1358
d2e6a577
FG
1359 Option("mon_debug_dump_location", Option::TYPE_STR, Option::LEVEL_DEV)
1360 .set_default("/var/log/ceph/$cluster-$name.tdump")
1361 .set_description(""),
c07f9fc5 1362
d2e6a577
FG
1363 Option("mon_debug_no_require_luminous", Option::TYPE_BOOL, Option::LEVEL_DEV)
1364 .set_default(false)
1365 .set_description(""),
c07f9fc5 1366
d2e6a577
FG
1367 Option("mon_debug_no_require_bluestore_for_ec_overwrites", Option::TYPE_BOOL, Option::LEVEL_DEV)
1368 .set_default(false)
1369 .set_description(""),
c07f9fc5 1370
d2e6a577
FG
1371 Option("mon_debug_no_initial_persistent_features", Option::TYPE_BOOL, Option::LEVEL_DEV)
1372 .set_default(false)
1373 .set_description(""),
c07f9fc5 1374
d2e6a577
FG
1375 Option("mon_inject_transaction_delay_max", Option::TYPE_FLOAT, Option::LEVEL_DEV)
1376 .set_default(10.0)
1377 .set_description(""),
c07f9fc5 1378
d2e6a577
FG
1379 Option("mon_inject_transaction_delay_probability", Option::TYPE_FLOAT, Option::LEVEL_DEV)
1380 .set_default(0)
1381 .set_description(""),
c07f9fc5 1382
d2e6a577
FG
1383 Option("mon_sync_provider_kill_at", Option::TYPE_INT, Option::LEVEL_DEV)
1384 .set_default(0)
1385 .set_description(""),
c07f9fc5 1386
d2e6a577
FG
1387 Option("mon_sync_requester_kill_at", Option::TYPE_INT, Option::LEVEL_DEV)
1388 .set_default(0)
1389 .set_description(""),
c07f9fc5 1390
d2e6a577
FG
1391 Option("mon_force_quorum_join", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1392 .set_default(false)
1393 .set_description(""),
c07f9fc5 1394
d2e6a577
FG
1395 Option("mon_keyvaluedb", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1396 .set_default("rocksdb")
1397 .set_description(""),
c07f9fc5 1398
d2e6a577
FG
1399 Option("mon_debug_unsafe_allow_tier_with_nonempty_snaps", Option::TYPE_BOOL, Option::LEVEL_DEV)
1400 .set_default(false)
1401 .set_description(""),
c07f9fc5 1402
d2e6a577 1403 Option("mon_osd_blacklist_default_expire", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
b32b8144
FG
1404 .set_default(1_hr)
1405 .set_description("Duration in seconds that blacklist entries for clients "
1406 "remain in the OSD map"),
1407
1408 Option("mon_mds_blacklist_interval", Option::TYPE_FLOAT, Option::LEVEL_DEV)
1409 .set_default(1_day)
1410 .set_min(1_hr)
1411 .set_description("Duration in seconds that blacklist entries for MDS "
1412 "daemons remain in the OSD map"),
c07f9fc5 1413
d2e6a577
FG
1414 Option("mon_osd_crush_smoke_test", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1415 .set_default(true)
1416 .set_description(""),
c07f9fc5 1417
d2e6a577
FG
1418 Option("paxos_stash_full_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1419 .set_default(25)
1420 .set_description(""),
c07f9fc5 1421
d2e6a577
FG
1422 Option("paxos_max_join_drift", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1423 .set_default(10)
1424 .set_description(""),
c07f9fc5 1425
d2e6a577
FG
1426 Option("paxos_propose_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1427 .set_default(1.0)
1428 .set_description(""),
c07f9fc5 1429
d2e6a577
FG
1430 Option("paxos_min_wait", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1431 .set_default(0.05)
1432 .set_description(""),
c07f9fc5 1433
d2e6a577
FG
1434 Option("paxos_min", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1435 .set_default(500)
1436 .set_description(""),
c07f9fc5 1437
d2e6a577
FG
1438 Option("paxos_trim_min", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1439 .set_default(250)
1440 .set_description(""),
c07f9fc5 1441
d2e6a577
FG
1442 Option("paxos_trim_max", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1443 .set_default(500)
1444 .set_description(""),
c07f9fc5 1445
d2e6a577
FG
1446 Option("paxos_service_trim_min", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1447 .set_default(250)
1448 .set_description(""),
c07f9fc5 1449
d2e6a577
FG
1450 Option("paxos_service_trim_max", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1451 .set_default(500)
1452 .set_description(""),
c07f9fc5 1453
d2e6a577
FG
1454 Option("paxos_kill_at", Option::TYPE_INT, Option::LEVEL_DEV)
1455 .set_default(0)
1456 .set_description(""),
c07f9fc5 1457
d2e6a577
FG
1458 Option("auth_cluster_required", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1459 .set_default("cephx")
1460 .set_description(""),
c07f9fc5 1461
d2e6a577
FG
1462 Option("auth_service_required", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1463 .set_default("cephx")
1464 .set_description(""),
c07f9fc5 1465
d2e6a577
FG
1466 Option("auth_client_required", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1467 .set_default("cephx, none")
1468 .set_description(""),
c07f9fc5 1469
d2e6a577
FG
1470 Option("auth_supported", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1471 .set_default("")
1472 .set_description(""),
c07f9fc5 1473
d2e6a577
FG
1474 Option("max_rotating_auth_attempts", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1475 .set_default(10)
1476 .set_description(""),
c07f9fc5 1477
d2e6a577
FG
1478 Option("cephx_require_signatures", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1479 .set_default(false)
1480 .set_description(""),
c07f9fc5 1481
d2e6a577
FG
1482 Option("cephx_cluster_require_signatures", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1483 .set_default(false)
1484 .set_description(""),
c07f9fc5 1485
d2e6a577
FG
1486 Option("cephx_service_require_signatures", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1487 .set_default(false)
1488 .set_description(""),
c07f9fc5 1489
d2e6a577
FG
1490 Option("cephx_sign_messages", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1491 .set_default(true)
1492 .set_description(""),
c07f9fc5 1493
d2e6a577 1494 Option("auth_mon_ticket_ttl", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
b32b8144 1495 .set_default(12_hr)
d2e6a577 1496 .set_description(""),
c07f9fc5 1497
d2e6a577 1498 Option("auth_service_ticket_ttl", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
b32b8144 1499 .set_default(1_hr)
d2e6a577 1500 .set_description(""),
c07f9fc5 1501
d2e6a577
FG
1502 Option("auth_debug", Option::TYPE_BOOL, Option::LEVEL_DEV)
1503 .set_default(false)
1504 .set_description(""),
c07f9fc5 1505
d2e6a577
FG
1506 Option("mon_client_hunt_parallel", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1507 .set_default(2)
1508 .set_description(""),
c07f9fc5 1509
d2e6a577
FG
1510 Option("mon_client_hunt_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1511 .set_default(3.0)
1512 .set_description(""),
c07f9fc5 1513
d2e6a577
FG
1514 Option("mon_client_ping_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1515 .set_default(10.0)
1516 .set_description(""),
c07f9fc5 1517
d2e6a577
FG
1518 Option("mon_client_ping_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1519 .set_default(30.0)
1520 .set_description(""),
c07f9fc5 1521
d2e6a577
FG
1522 Option("mon_client_hunt_interval_backoff", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1523 .set_default(2.0)
1524 .set_description(""),
c07f9fc5 1525
d2e6a577
FG
1526 Option("mon_client_hunt_interval_min_multiple", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1527 .set_default(1.0)
1528 .set_description(""),
c07f9fc5 1529
d2e6a577
FG
1530 Option("mon_client_hunt_interval_max_multiple", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1531 .set_default(10.0)
1532 .set_description(""),
c07f9fc5 1533
d2e6a577
FG
1534 Option("mon_client_max_log_entries_per_message", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1535 .set_default(1000)
1536 .set_description(""),
c07f9fc5 1537
d2e6a577
FG
1538 Option("mon_max_pool_pg_num", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1539 .set_default(65536)
1540 .set_description(""),
c07f9fc5 1541
d2e6a577
FG
1542 Option("mon_pool_quota_warn_threshold", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1543 .set_default(0)
b32b8144
FG
1544 .set_description("percent of quota at which to issue warnings")
1545 .add_service("mgr"),
c07f9fc5 1546
d2e6a577
FG
1547 Option("mon_pool_quota_crit_threshold", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1548 .set_default(0)
b32b8144
FG
1549 .set_description("percent of quota at which to issue errors")
1550 .add_service("mgr"),
c07f9fc5 1551
d2e6a577
FG
1552 Option("crush_location", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1553 .set_default("")
1554 .set_description(""),
c07f9fc5 1555
d2e6a577
FG
1556 Option("crush_location_hook", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1557 .set_default("")
1558 .set_description(""),
c07f9fc5 1559
d2e6a577
FG
1560 Option("crush_location_hook_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1561 .set_default(10)
1562 .set_description(""),
c07f9fc5 1563
d2e6a577
FG
1564 Option("objecter_tick_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1565 .set_default(5.0)
1566 .set_description(""),
c07f9fc5 1567
d2e6a577
FG
1568 Option("objecter_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1569 .set_default(10.0)
1570 .set_description(""),
c07f9fc5 1571
d2e6a577 1572 Option("objecter_inflight_op_bytes", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 1573 .set_default(100_M)
d2e6a577 1574 .set_description(""),
c07f9fc5 1575
d2e6a577
FG
1576 Option("objecter_inflight_ops", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1577 .set_default(1024)
1578 .set_description(""),
c07f9fc5 1579
d2e6a577
FG
1580 Option("objecter_completion_locks_per_session", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1581 .set_default(32)
1582 .set_description(""),
c07f9fc5 1583
d2e6a577
FG
1584 Option("objecter_inject_no_watch_ping", Option::TYPE_BOOL, Option::LEVEL_DEV)
1585 .set_default(false)
1586 .set_description(""),
c07f9fc5 1587
d2e6a577
FG
1588 Option("objecter_retry_writes_after_first_reply", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1589 .set_default(false)
1590 .set_description(""),
c07f9fc5 1591
d2e6a577
FG
1592 Option("objecter_debug_inject_relock_delay", Option::TYPE_BOOL, Option::LEVEL_DEV)
1593 .set_default(false)
1594 .set_description(""),
c07f9fc5 1595
d2e6a577
FG
1596 Option("filer_max_purge_ops", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1597 .set_default(10)
1598 .set_description(""),
c07f9fc5 1599
d2e6a577
FG
1600 Option("filer_max_truncate_ops", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1601 .set_default(128)
1602 .set_description(""),
c07f9fc5 1603
d2e6a577
FG
1604 Option("journaler_write_head_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1605 .set_default(15)
1606 .set_description(""),
c07f9fc5 1607
d2e6a577
FG
1608 Option("journaler_prefetch_periods", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1609 .set_default(10)
1610 .set_description(""),
c07f9fc5 1611
d2e6a577
FG
1612 Option("journaler_prezero_periods", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1613 .set_default(5)
1614 .set_description(""),
c07f9fc5 1615
d2e6a577
FG
1616 Option("osd_check_max_object_name_len_on_startup", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1617 .set_default(true)
1618 .set_description(""),
c07f9fc5 1619
d2e6a577
FG
1620 Option("osd_max_backfills", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1621 .set_default(1)
1622 .set_description(""),
c07f9fc5 1623
d2e6a577
FG
1624 Option("osd_min_recovery_priority", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1625 .set_default(0)
1626 .set_description(""),
c07f9fc5 1627
d2e6a577
FG
1628 Option("osd_backfill_retry_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1629 .set_default(30.0)
1630 .set_description(""),
c07f9fc5 1631
d2e6a577
FG
1632 Option("osd_recovery_retry_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1633 .set_default(30.0)
1634 .set_description(""),
c07f9fc5 1635
d2e6a577
FG
1636 Option("osd_agent_max_ops", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1637 .set_default(4)
1638 .set_description(""),
c07f9fc5 1639
d2e6a577
FG
1640 Option("osd_agent_max_low_ops", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1641 .set_default(2)
1642 .set_description(""),
c07f9fc5 1643
d2e6a577
FG
1644 Option("osd_agent_min_evict_effort", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1645 .set_default(.1)
1646 .set_description(""),
c07f9fc5 1647
d2e6a577
FG
1648 Option("osd_agent_quantize_effort", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1649 .set_default(.1)
1650 .set_description(""),
c07f9fc5 1651
d2e6a577
FG
1652 Option("osd_agent_delay_time", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1653 .set_default(5.0)
1654 .set_description(""),
c07f9fc5 1655
d2e6a577
FG
1656 Option("osd_find_best_info_ignore_history_les", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1657 .set_default(false)
1658 .set_description(""),
c07f9fc5 1659
d2e6a577
FG
1660 Option("osd_agent_hist_halflife", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1661 .set_default(1000)
1662 .set_description(""),
c07f9fc5 1663
d2e6a577
FG
1664 Option("osd_agent_slop", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1665 .set_default(.02)
1666 .set_description(""),
c07f9fc5 1667
d2e6a577
FG
1668 Option("osd_uuid", Option::TYPE_UUID, Option::LEVEL_ADVANCED)
1669 .set_default(uuid_d())
1670 .set_description(""),
c07f9fc5 1671
d2e6a577
FG
1672 Option("osd_data", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1673 .set_default("/var/lib/ceph/osd/$cluster-$id")
1674 .set_description(""),
c07f9fc5 1675
d2e6a577
FG
1676 Option("osd_journal", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1677 .set_default("/var/lib/ceph/osd/$cluster-$id/journal")
1678 .set_description(""),
c07f9fc5 1679
d2e6a577
FG
1680 Option("osd_journal_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1681 .set_default(5120)
1682 .set_description(""),
c07f9fc5 1683
d2e6a577
FG
1684 Option("osd_journal_flush_on_shutdown", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1685 .set_default(true)
1686 .set_description(""),
c07f9fc5 1687
d2e6a577
FG
1688 Option("osd_os_flags", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1689 .set_default(0)
1690 .set_description(""),
c07f9fc5 1691
d2e6a577
FG
1692 Option("osd_max_write_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1693 .set_default(90)
1694 .set_description(""),
c07f9fc5 1695
d2e6a577
FG
1696 Option("osd_max_pgls", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1697 .set_default(1024)
1698 .set_description(""),
c07f9fc5 1699
d2e6a577 1700 Option("osd_client_message_size_cap", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 1701 .set_default(500_M)
d2e6a577 1702 .set_description(""),
c07f9fc5 1703
d2e6a577
FG
1704 Option("osd_client_message_cap", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1705 .set_default(100)
1706 .set_description(""),
c07f9fc5 1707
d2e6a577
FG
1708 Option("osd_pg_bits", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1709 .set_default(6)
1710 .set_description(""),
c07f9fc5 1711
d2e6a577
FG
1712 Option("osd_pgp_bits", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1713 .set_default(6)
1714 .set_description(""),
c07f9fc5 1715
d2e6a577
FG
1716 Option("osd_crush_update_weight_set", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1717 .set_default(true)
1718 .set_description(""),
c07f9fc5 1719
d2e6a577
FG
1720 Option("osd_crush_chooseleaf_type", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1721 .set_default(1)
1722 .set_description(""),
c07f9fc5 1723
d2e6a577
FG
1724 Option("osd_pool_use_gmt_hitset", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1725 .set_default(true)
1726 .set_description(""),
c07f9fc5 1727
d2e6a577
FG
1728 Option("osd_crush_update_on_start", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1729 .set_default(true)
1730 .set_description(""),
c07f9fc5 1731
d2e6a577
FG
1732 Option("osd_class_update_on_start", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1733 .set_default(true)
1734 .set_description(""),
c07f9fc5 1735
d2e6a577
FG
1736 Option("osd_crush_initial_weight", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1737 .set_default(-1)
1738 .set_description(""),
c07f9fc5 1739
d2e6a577
FG
1740 Option("osd_pool_default_crush_rule", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1741 .set_default(-1)
1742 .set_description(""),
c07f9fc5 1743
d2e6a577 1744 Option("osd_pool_erasure_code_stripe_unit", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 1745 .set_default(4_K)
d2e6a577 1746 .set_description(""),
c07f9fc5 1747
d2e6a577
FG
1748 Option("osd_pool_default_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1749 .set_default(3)
1750 .set_description(""),
c07f9fc5 1751
d2e6a577
FG
1752 Option("osd_pool_default_min_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1753 .set_default(0)
1754 .set_description(""),
c07f9fc5 1755
d2e6a577
FG
1756 Option("osd_pool_default_pg_num", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1757 .set_default(8)
1758 .set_description(""),
c07f9fc5 1759
d2e6a577
FG
1760 Option("osd_pool_default_pgp_num", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1761 .set_default(8)
1762 .set_description(""),
c07f9fc5 1763
d2e6a577
FG
1764 Option("osd_pool_default_type", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1765 .set_default("replicated")
1766 .set_description(""),
c07f9fc5 1767
d2e6a577
FG
1768 Option("osd_pool_default_erasure_code_profile", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1769 .set_default("plugin=jerasure technique=reed_sol_van k=2 m=1")
1770 .set_description(""),
c07f9fc5 1771
d2e6a577
FG
1772 Option("osd_erasure_code_plugins", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1773 .set_default("jerasure lrc"
1774 #ifdef HAVE_BETTER_YASM_ELF64
1775 " isa"
1776 #endif
1777 )
1778 .set_description(""),
c07f9fc5 1779
d2e6a577
FG
1780 Option("osd_allow_recovery_below_min_size", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1781 .set_default(true)
1782 .set_description(""),
c07f9fc5 1783
d2e6a577
FG
1784 Option("osd_pool_default_flags", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1785 .set_default(0)
1786 .set_description(""),
c07f9fc5 1787
d2e6a577
FG
1788 Option("osd_pool_default_flag_hashpspool", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1789 .set_default(true)
1790 .set_description(""),
c07f9fc5 1791
d2e6a577
FG
1792 Option("osd_pool_default_flag_nodelete", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1793 .set_default(false)
1794 .set_description(""),
c07f9fc5 1795
d2e6a577
FG
1796 Option("osd_pool_default_flag_nopgchange", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1797 .set_default(false)
1798 .set_description(""),
c07f9fc5 1799
d2e6a577
FG
1800 Option("osd_pool_default_flag_nosizechange", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1801 .set_default(false)
1802 .set_description(""),
c07f9fc5 1803
d2e6a577
FG
1804 Option("osd_pool_default_hit_set_bloom_fpp", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1805 .set_default(.05)
1806 .set_description(""),
c07f9fc5 1807
d2e6a577
FG
1808 Option("osd_pool_default_cache_target_dirty_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1809 .set_default(.4)
1810 .set_description(""),
c07f9fc5 1811
d2e6a577
FG
1812 Option("osd_pool_default_cache_target_dirty_high_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1813 .set_default(.6)
1814 .set_description(""),
c07f9fc5 1815
d2e6a577
FG
1816 Option("osd_pool_default_cache_target_full_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1817 .set_default(.8)
1818 .set_description(""),
c07f9fc5 1819
d2e6a577
FG
1820 Option("osd_pool_default_cache_min_flush_age", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1821 .set_default(0)
1822 .set_description(""),
c07f9fc5 1823
d2e6a577
FG
1824 Option("osd_pool_default_cache_min_evict_age", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1825 .set_default(0)
1826 .set_description(""),
c07f9fc5 1827
d2e6a577
FG
1828 Option("osd_pool_default_cache_max_evict_check_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1829 .set_default(10)
1830 .set_description(""),
c07f9fc5 1831
d2e6a577
FG
1832 Option("osd_hit_set_min_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1833 .set_default(1000)
1834 .set_description(""),
c07f9fc5 1835
d2e6a577
FG
1836 Option("osd_hit_set_max_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1837 .set_default(100000)
1838 .set_description(""),
c07f9fc5 1839
d2e6a577
FG
1840 Option("osd_hit_set_namespace", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1841 .set_default(".ceph-internal")
1842 .set_description(""),
c07f9fc5 1843
d2e6a577
FG
1844 Option("osd_tier_promote_max_objects_sec", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1845 .set_default(25)
1846 .set_description(""),
c07f9fc5 1847
d2e6a577 1848 Option("osd_tier_promote_max_bytes_sec", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 1849 .set_default(5_M)
d2e6a577 1850 .set_description(""),
c07f9fc5 1851
d2e6a577
FG
1852 Option("osd_tier_default_cache_mode", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1853 .set_default("writeback")
1854 .set_description(""),
c07f9fc5 1855
d2e6a577
FG
1856 Option("osd_tier_default_cache_hit_set_count", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1857 .set_default(4)
1858 .set_description(""),
c07f9fc5 1859
d2e6a577
FG
1860 Option("osd_tier_default_cache_hit_set_period", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1861 .set_default(1200)
1862 .set_description(""),
c07f9fc5 1863
d2e6a577
FG
1864 Option("osd_tier_default_cache_hit_set_type", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1865 .set_default("bloom")
1866 .set_description(""),
c07f9fc5 1867
d2e6a577
FG
1868 Option("osd_tier_default_cache_min_read_recency_for_promote", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1869 .set_default(1)
1870 .set_description(""),
c07f9fc5 1871
d2e6a577
FG
1872 Option("osd_tier_default_cache_min_write_recency_for_promote", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1873 .set_default(1)
1874 .set_description(""),
c07f9fc5 1875
d2e6a577
FG
1876 Option("osd_tier_default_cache_hit_set_grade_decay_rate", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1877 .set_default(20)
1878 .set_description(""),
c07f9fc5 1879
d2e6a577
FG
1880 Option("osd_tier_default_cache_hit_set_search_last_n", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1881 .set_default(1)
1882 .set_description(""),
c07f9fc5 1883
d2e6a577
FG
1884 Option("osd_map_dedup", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1885 .set_default(true)
1886 .set_description(""),
1887
1888 Option("osd_map_max_advance", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1889 .set_default(40)
1890 .set_description(""),
1891
1892 Option("osd_map_cache_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1893 .set_default(50)
1894 .set_description(""),
1895
1896 Option("osd_map_message_max", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1897 .set_default(40)
1898 .set_description(""),
1899
1900 Option("osd_map_share_max_epochs", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1901 .set_default(40)
1902 .set_description(""),
1903
1904 Option("osd_inject_bad_map_crc_probability", Option::TYPE_FLOAT, Option::LEVEL_DEV)
1905 .set_default(0)
1906 .set_description(""),
1907
1908 Option("osd_inject_failure_on_pg_removal", Option::TYPE_BOOL, Option::LEVEL_DEV)
1909 .set_default(false)
1910 .set_description(""),
1911
1912 Option("osd_max_markdown_period", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1913 .set_default(600)
1914 .set_description(""),
1915
1916 Option("osd_max_markdown_count", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1917 .set_default(5)
1918 .set_description(""),
1919
1920 Option("osd_peering_wq_threads", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1921 .set_default(2)
1922 .set_description(""),
1923
1924 Option("osd_peering_wq_batch_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1925 .set_default(20)
1926 .set_description(""),
1927
1928 Option("osd_op_pq_max_tokens_per_priority", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1929 .set_default(4194304)
1930 .set_description(""),
1931
1932 Option("osd_op_pq_min_cost", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1933 .set_default(65536)
1934 .set_description(""),
1935
1936 Option("osd_disk_threads", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1937 .set_default(1)
1938 .set_description(""),
1939
1940 Option("osd_disk_thread_ioprio_class", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1941 .set_default("")
1942 .set_description(""),
1943
1944 Option("osd_disk_thread_ioprio_priority", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1945 .set_default(-1)
1946 .set_description(""),
1947
1948 Option("osd_recover_clone_overlap", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1949 .set_default(true)
1950 .set_description(""),
1951
1952 Option("osd_op_num_threads_per_shard", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1953 .set_default(0)
1954 .set_description(""),
1955
1956 Option("osd_op_num_threads_per_shard_hdd", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1957 .set_default(1)
1958 .set_description(""),
1959
1960 Option("osd_op_num_threads_per_shard_ssd", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1961 .set_default(2)
1962 .set_description(""),
1963
1964 Option("osd_op_num_shards", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1965 .set_default(0)
1966 .set_description(""),
1967
1968 Option("osd_op_num_shards_hdd", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1969 .set_default(5)
1970 .set_description(""),
1971
1972 Option("osd_op_num_shards_ssd", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1973 .set_default(8)
1974 .set_description(""),
1975
1976 Option("osd_op_queue", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1977 .set_default("wpq")
1978 .set_enum_allowed( { "wpq", "prioritized", "mclock_opclass", "mclock_client", "debug_random" } )
1979 .set_description("which operation queue algorithm to use")
1980 .set_long_description("which operation queue algorithm to use; mclock_opclass and mclock_client are currently experimental")
1981 .add_see_also("osd_op_queue_cut_off"),
1982
1983 Option("osd_op_queue_cut_off", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1984 .set_default("low")
1985 .set_enum_allowed( { "low", "high", "debug_random" } )
1986 .set_description("the threshold between high priority ops and low priority ops")
1987 .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")
1988 .add_see_also("osd_op_queue"),
1989
1990 Option("osd_op_queue_mclock_client_op_res", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1991 .set_default(1000.0)
1992 .set_description("mclock reservation of client operator requests")
1993 .set_long_description("mclock reservation of client operator requests when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the reservation")
1994 .add_see_also("osd_op_queue")
1995 .add_see_also("osd_op_queue_mclock_client_op_wgt")
1996 .add_see_also("osd_op_queue_mclock_client_op_lim")
1997 .add_see_also("osd_op_queue_mclock_osd_subop_res")
1998 .add_see_also("osd_op_queue_mclock_osd_subop_wgt")
1999 .add_see_also("osd_op_queue_mclock_osd_subop_lim")
2000 .add_see_also("osd_op_queue_mclock_snap_res")
2001 .add_see_also("osd_op_queue_mclock_snap_wgt")
2002 .add_see_also("osd_op_queue_mclock_snap_lim")
2003 .add_see_also("osd_op_queue_mclock_recov_res")
2004 .add_see_also("osd_op_queue_mclock_recov_wgt")
2005 .add_see_also("osd_op_queue_mclock_recov_lim")
2006 .add_see_also("osd_op_queue_mclock_scrub_res")
2007 .add_see_also("osd_op_queue_mclock_scrub_wgt")
2008 .add_see_also("osd_op_queue_mclock_scrub_lim"),
2009
2010 Option("osd_op_queue_mclock_client_op_wgt", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2011 .set_default(500.0)
2012 .set_description("mclock weight of client operator requests")
2013 .set_long_description("mclock weight of client operator requests when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the weight")
2014 .add_see_also("osd_op_queue")
2015 .add_see_also("osd_op_queue_mclock_client_op_res")
2016 .add_see_also("osd_op_queue_mclock_client_op_lim")
2017 .add_see_also("osd_op_queue_mclock_osd_subop_res")
2018 .add_see_also("osd_op_queue_mclock_osd_subop_wgt")
2019 .add_see_also("osd_op_queue_mclock_osd_subop_lim")
2020 .add_see_also("osd_op_queue_mclock_snap_res")
2021 .add_see_also("osd_op_queue_mclock_snap_wgt")
2022 .add_see_also("osd_op_queue_mclock_snap_lim")
2023 .add_see_also("osd_op_queue_mclock_recov_res")
2024 .add_see_also("osd_op_queue_mclock_recov_wgt")
2025 .add_see_also("osd_op_queue_mclock_recov_lim")
2026 .add_see_also("osd_op_queue_mclock_scrub_res")
2027 .add_see_also("osd_op_queue_mclock_scrub_wgt")
2028 .add_see_also("osd_op_queue_mclock_scrub_lim"),
2029
2030 Option("osd_op_queue_mclock_client_op_lim", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2031 .set_default(0.0)
2032 .set_description("mclock limit of client operator requests")
2033 .set_long_description("mclock limit of client operator requests when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the limit")
2034 .add_see_also("osd_op_queue")
2035 .add_see_also("osd_op_queue_mclock_client_op_res")
2036 .add_see_also("osd_op_queue_mclock_client_op_wgt")
2037 .add_see_also("osd_op_queue_mclock_osd_subop_res")
2038 .add_see_also("osd_op_queue_mclock_osd_subop_wgt")
2039 .add_see_also("osd_op_queue_mclock_osd_subop_lim")
2040 .add_see_also("osd_op_queue_mclock_snap_res")
2041 .add_see_also("osd_op_queue_mclock_snap_wgt")
2042 .add_see_also("osd_op_queue_mclock_snap_lim")
2043 .add_see_also("osd_op_queue_mclock_recov_res")
2044 .add_see_also("osd_op_queue_mclock_recov_wgt")
2045 .add_see_also("osd_op_queue_mclock_recov_lim")
2046 .add_see_also("osd_op_queue_mclock_scrub_res")
2047 .add_see_also("osd_op_queue_mclock_scrub_wgt")
2048 .add_see_also("osd_op_queue_mclock_scrub_lim"),
2049
2050 Option("osd_op_queue_mclock_osd_subop_res", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2051 .set_default(1000.0)
2052 .set_description("mclock reservation of osd sub-operation requests")
2053 .set_long_description("mclock reservation of osd sub-operation requests when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the reservation")
2054 .add_see_also("osd_op_queue")
2055 .add_see_also("osd_op_queue_mclock_client_op_res")
2056 .add_see_also("osd_op_queue_mclock_client_op_wgt")
2057 .add_see_also("osd_op_queue_mclock_client_op_lim")
2058 .add_see_also("osd_op_queue_mclock_osd_subop_wgt")
2059 .add_see_also("osd_op_queue_mclock_osd_subop_lim")
2060 .add_see_also("osd_op_queue_mclock_snap_res")
2061 .add_see_also("osd_op_queue_mclock_snap_wgt")
2062 .add_see_also("osd_op_queue_mclock_snap_lim")
2063 .add_see_also("osd_op_queue_mclock_recov_res")
2064 .add_see_also("osd_op_queue_mclock_recov_wgt")
2065 .add_see_also("osd_op_queue_mclock_recov_lim")
2066 .add_see_also("osd_op_queue_mclock_scrub_res")
2067 .add_see_also("osd_op_queue_mclock_scrub_wgt")
2068 .add_see_also("osd_op_queue_mclock_scrub_lim"),
2069
2070 Option("osd_op_queue_mclock_osd_subop_wgt", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2071 .set_default(500.0)
2072 .set_description("mclock weight of osd sub-operation requests")
2073 .set_long_description("mclock weight of osd sub-operation requests when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the weight")
2074 .add_see_also("osd_op_queue")
2075 .add_see_also("osd_op_queue_mclock_client_op_res")
2076 .add_see_also("osd_op_queue_mclock_client_op_wgt")
2077 .add_see_also("osd_op_queue_mclock_client_op_lim")
2078 .add_see_also("osd_op_queue_mclock_osd_subop_res")
2079 .add_see_also("osd_op_queue_mclock_osd_subop_lim")
2080 .add_see_also("osd_op_queue_mclock_snap_res")
2081 .add_see_also("osd_op_queue_mclock_snap_wgt")
2082 .add_see_also("osd_op_queue_mclock_snap_lim")
2083 .add_see_also("osd_op_queue_mclock_recov_res")
2084 .add_see_also("osd_op_queue_mclock_recov_wgt")
2085 .add_see_also("osd_op_queue_mclock_recov_lim")
2086 .add_see_also("osd_op_queue_mclock_scrub_res")
2087 .add_see_also("osd_op_queue_mclock_scrub_wgt")
2088 .add_see_also("osd_op_queue_mclock_scrub_lim"),
2089
2090 Option("osd_op_queue_mclock_osd_subop_lim", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2091 .set_default(0.0)
2092 .set_description("mclock limit of osd sub-operation requests")
2093 .set_long_description("mclock limit of osd sub-operation requests when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the limit")
2094 .add_see_also("osd_op_queue")
2095 .add_see_also("osd_op_queue_mclock_client_op_res")
2096 .add_see_also("osd_op_queue_mclock_client_op_wgt")
2097 .add_see_also("osd_op_queue_mclock_client_op_lim")
2098 .add_see_also("osd_op_queue_mclock_osd_subop_res")
2099 .add_see_also("osd_op_queue_mclock_osd_subop_wgt")
2100 .add_see_also("osd_op_queue_mclock_snap_res")
2101 .add_see_also("osd_op_queue_mclock_snap_wgt")
2102 .add_see_also("osd_op_queue_mclock_snap_lim")
2103 .add_see_also("osd_op_queue_mclock_recov_res")
2104 .add_see_also("osd_op_queue_mclock_recov_wgt")
2105 .add_see_also("osd_op_queue_mclock_recov_lim")
2106 .add_see_also("osd_op_queue_mclock_scrub_res")
2107 .add_see_also("osd_op_queue_mclock_scrub_wgt")
2108 .add_see_also("osd_op_queue_mclock_scrub_lim"),
2109
2110 Option("osd_op_queue_mclock_snap_res", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2111 .set_default(0.0)
2112 .set_description("mclock reservation of snaptrim requests")
2113 .set_long_description("mclock reservation of snaptrim requests when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the reservation")
2114 .add_see_also("osd_op_queue")
2115 .add_see_also("osd_op_queue_mclock_client_op_res")
2116 .add_see_also("osd_op_queue_mclock_client_op_wgt")
2117 .add_see_also("osd_op_queue_mclock_client_op_lim")
2118 .add_see_also("osd_op_queue_mclock_osd_subop_res")
2119 .add_see_also("osd_op_queue_mclock_osd_subop_wgt")
2120 .add_see_also("osd_op_queue_mclock_osd_subop_lim")
2121 .add_see_also("osd_op_queue_mclock_snap_wgt")
2122 .add_see_also("osd_op_queue_mclock_snap_lim")
2123 .add_see_also("osd_op_queue_mclock_recov_res")
2124 .add_see_also("osd_op_queue_mclock_recov_wgt")
2125 .add_see_also("osd_op_queue_mclock_recov_lim")
2126 .add_see_also("osd_op_queue_mclock_scrub_res")
2127 .add_see_also("osd_op_queue_mclock_scrub_wgt")
2128 .add_see_also("osd_op_queue_mclock_scrub_lim"),
2129
2130 Option("osd_op_queue_mclock_snap_wgt", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2131 .set_default(1.0)
2132 .set_description("mclock weight of snaptrim requests")
2133 .set_long_description("mclock weight of snaptrim requests when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the weight")
2134 .add_see_also("osd_op_queue")
2135 .add_see_also("osd_op_queue_mclock_client_op_res")
2136 .add_see_also("osd_op_queue_mclock_client_op_wgt")
2137 .add_see_also("osd_op_queue_mclock_client_op_lim")
2138 .add_see_also("osd_op_queue_mclock_osd_subop_res")
2139 .add_see_also("osd_op_queue_mclock_osd_subop_wgt")
2140 .add_see_also("osd_op_queue_mclock_osd_subop_lim")
2141 .add_see_also("osd_op_queue_mclock_snap_res")
2142 .add_see_also("osd_op_queue_mclock_snap_lim")
2143 .add_see_also("osd_op_queue_mclock_recov_res")
2144 .add_see_also("osd_op_queue_mclock_recov_wgt")
2145 .add_see_also("osd_op_queue_mclock_recov_lim")
2146 .add_see_also("osd_op_queue_mclock_scrub_res")
2147 .add_see_also("osd_op_queue_mclock_scrub_wgt")
2148 .add_see_also("osd_op_queue_mclock_scrub_lim"),
2149
2150 Option("osd_op_queue_mclock_snap_lim", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2151 .set_default(0.001)
2152 .set_description("")
2153 .set_description("mclock limit of snaptrim requests")
2154 .set_long_description("mclock limit of snaptrim requests when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the limit")
2155 .add_see_also("osd_op_queue_mclock_client_op_res")
2156 .add_see_also("osd_op_queue_mclock_client_op_wgt")
2157 .add_see_also("osd_op_queue_mclock_client_op_lim")
2158 .add_see_also("osd_op_queue_mclock_osd_subop_res")
2159 .add_see_also("osd_op_queue_mclock_osd_subop_wgt")
2160 .add_see_also("osd_op_queue_mclock_osd_subop_lim")
2161 .add_see_also("osd_op_queue_mclock_snap_res")
2162 .add_see_also("osd_op_queue_mclock_snap_wgt")
2163 .add_see_also("osd_op_queue_mclock_recov_res")
2164 .add_see_also("osd_op_queue_mclock_recov_wgt")
2165 .add_see_also("osd_op_queue_mclock_recov_lim")
2166 .add_see_also("osd_op_queue_mclock_scrub_res")
2167 .add_see_also("osd_op_queue_mclock_scrub_wgt")
2168 .add_see_also("osd_op_queue_mclock_scrub_lim"),
2169
2170 Option("osd_op_queue_mclock_recov_res", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2171 .set_default(0.0)
2172 .set_description("mclock reservation of recovery requests")
2173 .set_long_description("mclock reservation of recovery requests when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the reservation")
2174 .add_see_also("osd_op_queue")
2175 .add_see_also("osd_op_queue_mclock_client_op_res")
2176 .add_see_also("osd_op_queue_mclock_client_op_wgt")
2177 .add_see_also("osd_op_queue_mclock_client_op_lim")
2178 .add_see_also("osd_op_queue_mclock_osd_subop_res")
2179 .add_see_also("osd_op_queue_mclock_osd_subop_wgt")
2180 .add_see_also("osd_op_queue_mclock_osd_subop_lim")
2181 .add_see_also("osd_op_queue_mclock_snap_res")
2182 .add_see_also("osd_op_queue_mclock_snap_wgt")
2183 .add_see_also("osd_op_queue_mclock_snap_lim")
2184 .add_see_also("osd_op_queue_mclock_recov_wgt")
2185 .add_see_also("osd_op_queue_mclock_recov_lim")
2186 .add_see_also("osd_op_queue_mclock_scrub_res")
2187 .add_see_also("osd_op_queue_mclock_scrub_wgt")
2188 .add_see_also("osd_op_queue_mclock_scrub_lim"),
2189
2190 Option("osd_op_queue_mclock_recov_wgt", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2191 .set_default(1.0)
2192 .set_description("mclock weight of recovery requests")
2193 .set_long_description("mclock weight of recovery requests when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the weight")
2194 .add_see_also("osd_op_queue")
2195 .add_see_also("osd_op_queue_mclock_client_op_res")
2196 .add_see_also("osd_op_queue_mclock_client_op_wgt")
2197 .add_see_also("osd_op_queue_mclock_client_op_lim")
2198 .add_see_also("osd_op_queue_mclock_osd_subop_res")
2199 .add_see_also("osd_op_queue_mclock_osd_subop_wgt")
2200 .add_see_also("osd_op_queue_mclock_osd_subop_lim")
2201 .add_see_also("osd_op_queue_mclock_snap_res")
2202 .add_see_also("osd_op_queue_mclock_snap_wgt")
2203 .add_see_also("osd_op_queue_mclock_snap_lim")
2204 .add_see_also("osd_op_queue_mclock_recov_res")
2205 .add_see_also("osd_op_queue_mclock_recov_lim")
2206 .add_see_also("osd_op_queue_mclock_scrub_res")
2207 .add_see_also("osd_op_queue_mclock_scrub_wgt")
2208 .add_see_also("osd_op_queue_mclock_scrub_lim"),
2209
2210 Option("osd_op_queue_mclock_recov_lim", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2211 .set_default(0.001)
2212 .set_description("mclock limit of recovery requests")
2213 .set_long_description("mclock limit of recovery requests when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the limit")
2214 .add_see_also("osd_op_queue")
2215 .add_see_also("osd_op_queue_mclock_client_op_res")
2216 .add_see_also("osd_op_queue_mclock_client_op_wgt")
2217 .add_see_also("osd_op_queue_mclock_client_op_lim")
2218 .add_see_also("osd_op_queue_mclock_osd_subop_res")
2219 .add_see_also("osd_op_queue_mclock_osd_subop_wgt")
2220 .add_see_also("osd_op_queue_mclock_osd_subop_lim")
2221 .add_see_also("osd_op_queue_mclock_snap_res")
2222 .add_see_also("osd_op_queue_mclock_snap_wgt")
2223 .add_see_also("osd_op_queue_mclock_snap_lim")
2224 .add_see_also("osd_op_queue_mclock_recov_res")
2225 .add_see_also("osd_op_queue_mclock_recov_wgt")
2226 .add_see_also("osd_op_queue_mclock_scrub_res")
2227 .add_see_also("osd_op_queue_mclock_scrub_wgt")
2228 .add_see_also("osd_op_queue_mclock_scrub_lim"),
2229
2230 Option("osd_op_queue_mclock_scrub_res", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2231 .set_default(0.0)
2232 .set_description("mclock reservation of scrub requests")
2233 .set_long_description("mclock reservation of scrub requests when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the reservation")
2234 .add_see_also("osd_op_queue")
2235 .add_see_also("osd_op_queue_mclock_client_op_res")
2236 .add_see_also("osd_op_queue_mclock_client_op_wgt")
2237 .add_see_also("osd_op_queue_mclock_client_op_lim")
2238 .add_see_also("osd_op_queue_mclock_osd_subop_res")
2239 .add_see_also("osd_op_queue_mclock_osd_subop_wgt")
2240 .add_see_also("osd_op_queue_mclock_osd_subop_lim")
2241 .add_see_also("osd_op_queue_mclock_snap_res")
2242 .add_see_also("osd_op_queue_mclock_snap_wgt")
2243 .add_see_also("osd_op_queue_mclock_snap_lim")
2244 .add_see_also("osd_op_queue_mclock_recov_res")
2245 .add_see_also("osd_op_queue_mclock_recov_wgt")
2246 .add_see_also("osd_op_queue_mclock_recov_lim")
2247 .add_see_also("osd_op_queue_mclock_scrub_wgt")
2248 .add_see_also("osd_op_queue_mclock_scrub_lim"),
2249
2250 Option("osd_op_queue_mclock_scrub_wgt", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2251 .set_default(1.0)
2252 .set_description("mclock weight of scrub requests")
2253 .set_long_description("mclock weight of scrub requests when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the weight")
2254 .add_see_also("osd_op_queue")
2255 .add_see_also("osd_op_queue_mclock_client_op_res")
2256 .add_see_also("osd_op_queue_mclock_client_op_wgt")
2257 .add_see_also("osd_op_queue_mclock_client_op_lim")
2258 .add_see_also("osd_op_queue_mclock_osd_subop_res")
2259 .add_see_also("osd_op_queue_mclock_osd_subop_wgt")
2260 .add_see_also("osd_op_queue_mclock_osd_subop_lim")
2261 .add_see_also("osd_op_queue_mclock_snap_res")
2262 .add_see_also("osd_op_queue_mclock_snap_wgt")
2263 .add_see_also("osd_op_queue_mclock_snap_lim")
2264 .add_see_also("osd_op_queue_mclock_recov_res")
2265 .add_see_also("osd_op_queue_mclock_recov_wgt")
2266 .add_see_also("osd_op_queue_mclock_recov_lim")
2267 .add_see_also("osd_op_queue_mclock_scrub_res")
2268 .add_see_also("osd_op_queue_mclock_scrub_lim"),
2269
2270 Option("osd_op_queue_mclock_scrub_lim", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2271 .set_default(0.001)
2272 .set_description("mclock weight of limit requests")
2273 .set_long_description("mclock weight of limit requests when osd_op_queue is either 'mclock_opclass' or 'mclock_client'; higher values increase the limit")
2274 .add_see_also("osd_op_queue")
2275 .add_see_also("osd_op_queue_mclock_client_op_res")
2276 .add_see_also("osd_op_queue_mclock_client_op_wgt")
2277 .add_see_also("osd_op_queue_mclock_client_op_lim")
2278 .add_see_also("osd_op_queue_mclock_osd_subop_res")
2279 .add_see_also("osd_op_queue_mclock_osd_subop_wgt")
2280 .add_see_also("osd_op_queue_mclock_osd_subop_lim")
2281 .add_see_also("osd_op_queue_mclock_snap_res")
2282 .add_see_also("osd_op_queue_mclock_snap_wgt")
2283 .add_see_also("osd_op_queue_mclock_snap_lim")
2284 .add_see_also("osd_op_queue_mclock_recov_res")
2285 .add_see_also("osd_op_queue_mclock_recov_wgt")
2286 .add_see_also("osd_op_queue_mclock_recov_lim")
2287 .add_see_also("osd_op_queue_mclock_scrub_res")
2288 .add_see_also("osd_op_queue_mclock_scrub_wgt"),
2289
2290 Option("osd_ignore_stale_divergent_priors", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2291 .set_default(false)
2292 .set_description(""),
2293
2294 Option("osd_read_ec_check_for_errors", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2295 .set_default(false)
2296 .set_description(""),
2297
2298 Option("osd_recover_clone_overlap_limit", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2299 .set_default(10)
2300 .set_description(""),
2301
2302 Option("osd_backfill_scan_min", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2303 .set_default(64)
2304 .set_description(""),
2305
2306 Option("osd_backfill_scan_max", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2307 .set_default(512)
2308 .set_description(""),
2309
2310 Option("osd_op_thread_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2311 .set_default(15)
2312 .set_description(""),
2313
2314 Option("osd_op_thread_suicide_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2315 .set_default(150)
2316 .set_description(""),
2317
2318 Option("osd_recovery_thread_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2319 .set_default(30)
2320 .set_description(""),
2321
2322 Option("osd_recovery_thread_suicide_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2323 .set_default(300)
2324 .set_description(""),
2325
2326 Option("osd_recovery_sleep", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2327 .set_default(0)
2328 .set_description("Time in seconds to sleep before next recovery or backfill op"),
2329
2330 Option("osd_recovery_sleep_hdd", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2331 .set_default(0.1)
2332 .set_description("Time in seconds to sleep before next recovery or backfill op for HDDs"),
2333
2334 Option("osd_recovery_sleep_ssd", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2335 .set_default(0)
2336 .set_description("Time in seconds to sleep before next recovery or backfill op for SSDs"),
2337
2338 Option("osd_recovery_sleep_hybrid", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2339 .set_default(0.025)
2340 .set_description("Time in seconds to sleep before next recovery or backfill op when data is on HDD and journal is on SSD"),
2341
2342 Option("osd_snap_trim_sleep", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2343 .set_default(0)
2344 .set_description(""),
2345
2346 Option("osd_scrub_invalid_stats", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2347 .set_default(true)
2348 .set_description(""),
2349
2350 Option("osd_remove_thread_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144 2351 .set_default(1_hr)
d2e6a577
FG
2352 .set_description(""),
2353
2354 Option("osd_remove_thread_suicide_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144 2355 .set_default(10_hr)
d2e6a577
FG
2356 .set_description(""),
2357
2358 Option("osd_command_thread_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144 2359 .set_default(10_min)
d2e6a577
FG
2360 .set_description(""),
2361
2362 Option("osd_command_thread_suicide_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144 2363 .set_default(15_min)
d2e6a577
FG
2364 .set_description(""),
2365
2366 Option("osd_heartbeat_addr", Option::TYPE_ADDR, Option::LEVEL_ADVANCED)
2367 .set_default(entity_addr_t())
2368 .set_description(""),
2369
2370 Option("osd_heartbeat_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2371 .set_default(6)
2372 .set_description(""),
2373
2374 Option("osd_heartbeat_grace", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2375 .set_default(20)
2376 .set_description(""),
2377
2378 Option("osd_heartbeat_min_peers", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2379 .set_default(10)
2380 .set_description(""),
2381
2382 Option("osd_heartbeat_use_min_delay_socket", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2383 .set_default(false)
2384 .set_description(""),
c07f9fc5 2385
d2e6a577
FG
2386 Option("osd_heartbeat_min_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2387 .set_default(2000)
2388 .set_description(""),
c07f9fc5 2389
d2e6a577
FG
2390 Option("osd_pg_max_concurrent_snap_trims", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2391 .set_default(2)
2392 .set_description(""),
c07f9fc5 2393
d2e6a577
FG
2394 Option("osd_max_trimming_pgs", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2395 .set_default(2)
2396 .set_description(""),
c07f9fc5 2397
d2e6a577
FG
2398 Option("osd_heartbeat_min_healthy_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2399 .set_default(.33)
2400 .set_description(""),
c07f9fc5 2401
d2e6a577
FG
2402 Option("osd_mon_heartbeat_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2403 .set_default(30)
2404 .set_description(""),
c07f9fc5 2405
d2e6a577
FG
2406 Option("osd_mon_report_interval_max", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2407 .set_default(600)
2408 .set_description(""),
c07f9fc5 2409
d2e6a577
FG
2410 Option("osd_mon_report_interval_min", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2411 .set_default(5)
2412 .set_description(""),
c07f9fc5 2413
d2e6a577
FG
2414 Option("osd_mon_report_max_in_flight", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2415 .set_default(2)
2416 .set_description(""),
c07f9fc5 2417
d2e6a577
FG
2418 Option("osd_beacon_report_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2419 .set_default(300)
2420 .set_description(""),
c07f9fc5 2421
d2e6a577
FG
2422 Option("osd_pg_stat_report_interval_max", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2423 .set_default(500)
2424 .set_description(""),
c07f9fc5 2425
d2e6a577
FG
2426 Option("osd_mon_ack_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2427 .set_default(30.0)
2428 .set_description(""),
c07f9fc5 2429
d2e6a577
FG
2430 Option("osd_stats_ack_timeout_factor", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2431 .set_default(2.0)
2432 .set_description(""),
c07f9fc5 2433
d2e6a577
FG
2434 Option("osd_stats_ack_timeout_decay", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2435 .set_default(.9)
2436 .set_description(""),
c07f9fc5 2437
d2e6a577
FG
2438 Option("osd_default_data_pool_replay_window", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2439 .set_default(45)
2440 .set_description(""),
c07f9fc5 2441
d2e6a577
FG
2442 Option("osd_auto_mark_unfound_lost", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2443 .set_default(false)
2444 .set_description(""),
c07f9fc5 2445
d2e6a577
FG
2446 Option("osd_recovery_delay_start", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2447 .set_default(0)
2448 .set_description(""),
c07f9fc5 2449
d2e6a577
FG
2450 Option("osd_recovery_max_active", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2451 .set_default(3)
2452 .set_description(""),
c07f9fc5 2453
d2e6a577
FG
2454 Option("osd_recovery_max_single_start", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2455 .set_default(1)
2456 .set_description(""),
c07f9fc5 2457
d2e6a577
FG
2458 Option("osd_recovery_max_chunk", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2459 .set_default(8<<20)
2460 .set_description(""),
c07f9fc5 2461
d2e6a577 2462 Option("osd_recovery_max_omap_entries_per_chunk", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 2463 .set_default(8096)
d2e6a577 2464 .set_description(""),
c07f9fc5 2465
d2e6a577
FG
2466 Option("osd_copyfrom_max_chunk", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2467 .set_default(8<<20)
2468 .set_description(""),
c07f9fc5 2469
d2e6a577
FG
2470 Option("osd_push_per_object_cost", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2471 .set_default(1000)
2472 .set_description(""),
c07f9fc5 2473
d2e6a577
FG
2474 Option("osd_max_push_cost", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2475 .set_default(8<<20)
2476 .set_description(""),
c07f9fc5 2477
d2e6a577
FG
2478 Option("osd_max_push_objects", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2479 .set_default(10)
2480 .set_description(""),
c07f9fc5 2481
d2e6a577
FG
2482 Option("osd_recovery_forget_lost_objects", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2483 .set_default(false)
2484 .set_description(""),
c07f9fc5 2485
d2e6a577
FG
2486 Option("osd_max_scrubs", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2487 .set_default(1)
2488 .set_description(""),
c07f9fc5 2489
d2e6a577
FG
2490 Option("osd_scrub_during_recovery", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2491 .set_default(false)
2492 .set_description(""),
c07f9fc5 2493
d2e6a577
FG
2494 Option("osd_scrub_begin_hour", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2495 .set_default(0)
2496 .set_description(""),
c07f9fc5 2497
d2e6a577
FG
2498 Option("osd_scrub_end_hour", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2499 .set_default(24)
2500 .set_description(""),
c07f9fc5 2501
d2e6a577
FG
2502 Option("osd_scrub_load_threshold", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2503 .set_default(0.5)
2504 .set_description(""),
c07f9fc5 2505
d2e6a577 2506 Option("osd_scrub_min_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
b32b8144 2507 .set_default(1_day)
d2e6a577
FG
2508 .set_description(""),
2509
2510 Option("osd_scrub_max_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
b32b8144 2511 .set_default(7_day)
d2e6a577
FG
2512 .set_description(""),
2513
2514 Option("osd_scrub_interval_randomize_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2515 .set_default(0.5)
2516 .set_description(""),
2517
2518 Option("osd_scrub_backoff_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2519 .set_default(.66)
2520 .set_description(""),
2521
2522 Option("osd_scrub_chunk_min", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2523 .set_default(5)
2524 .set_description(""),
2525
2526 Option("osd_scrub_chunk_max", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2527 .set_default(25)
2528 .set_description(""),
2529
2530 Option("osd_scrub_sleep", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2531 .set_default(0)
2532 .set_description(""),
2533
2534 Option("osd_scrub_auto_repair", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2535 .set_default(false)
2536 .set_description(""),
2537
2538 Option("osd_scrub_auto_repair_num_errors", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2539 .set_default(5)
2540 .set_description(""),
2541
2542 Option("osd_deep_scrub_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
b32b8144 2543 .set_default(7_day)
d2e6a577
FG
2544 .set_description(""),
2545
2546 Option("osd_deep_scrub_randomize_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2547 .set_default(0.15)
2548 .set_description(""),
2549
2550 Option("osd_deep_scrub_stride", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2551 .set_default(524288)
2552 .set_description(""),
2553
2554 Option("osd_deep_scrub_update_digest_min_age", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144 2555 .set_default(2_hr)
d2e6a577
FG
2556 .set_description(""),
2557
2558 Option("osd_class_dir", Option::TYPE_STR, Option::LEVEL_ADVANCED)
2559 .set_default(CEPH_LIBDIR "/rados-classes")
2560 .set_description(""),
2561
2562 Option("osd_open_classes_on_start", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2563 .set_default(true)
2564 .set_description(""),
2565
2566 Option("osd_class_load_list", Option::TYPE_STR, Option::LEVEL_ADVANCED)
2567 .set_default("cephfs hello journal lock log numops " "rbd refcount replica_log rgw statelog timeindex user version")
2568 .set_description(""),
2569
2570 Option("osd_class_default_list", Option::TYPE_STR, Option::LEVEL_ADVANCED)
2571 .set_default("cephfs hello journal lock log numops " "rbd refcount replica_log rgw statelog timeindex user version")
2572 .set_description(""),
2573
2574 Option("osd_check_for_log_corruption", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2575 .set_default(false)
2576 .set_description(""),
2577
2578 Option("osd_use_stale_snap", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2579 .set_default(false)
2580 .set_description(""),
2581
2582 Option("osd_rollback_to_cluster_snap", Option::TYPE_STR, Option::LEVEL_ADVANCED)
2583 .set_default("")
2584 .set_description(""),
2585
2586 Option("osd_default_notify_timeout", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2587 .set_default(30)
2588 .set_description(""),
2589
2590 Option("osd_kill_backfill_at", Option::TYPE_INT, Option::LEVEL_DEV)
2591 .set_default(0)
2592 .set_description(""),
2593
2594 Option("osd_pg_epoch_persisted_max_stale", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2595 .set_default(40)
2596 .set_description(""),
2597
2598 Option("osd_min_pg_log_entries", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
181888fb 2599 .set_default(1500)
d2e6a577
FG
2600 .set_description("minimum number of entries to maintain in the PG log")
2601 .add_service("osd")
2602 .add_see_also("osd_max_pg_log_entries")
2603 .add_see_also("osd_pg_log_dups_tracked"),
2604
2605 Option("osd_max_pg_log_entries", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2606 .set_default(10000)
2607 .set_description("maximum number of entries to maintain in the PG log when degraded before we trim")
2608 .add_service("osd")
2609 .add_see_also("osd_min_pg_log_entries")
2610 .add_see_also("osd_pg_log_dups_tracked"),
2611
2612 Option("osd_pg_log_dups_tracked", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2613 .set_default(3000)
2614 .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")
2615 .add_service("osd")
2616 .add_see_also("osd_min_pg_log_entries")
2617 .add_see_also("osd_max_pg_log_entries"),
2618
2619 Option("osd_force_recovery_pg_log_entries_factor", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2620 .set_default(1.3)
2621 .set_description(""),
2622
2623 Option("osd_pg_log_trim_min", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2624 .set_default(100)
2625 .set_description(""),
2626
3efd9988
FG
2627 Option("osd_max_pg_per_osd_hard_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2628 .set_default(2)
2629 .set_min(1)
2630 .set_description("Maximum number of PG per OSD, a factor of 'mon_max_pg_per_osd'")
2631 .set_long_description("OSD will refuse to instantiate PG if the number of PG it serves exceeds this number.")
2632 .add_see_also("mon_max_pg_per_osd"),
2633
94b18763
FG
2634 Option("osd_pg_log_trim_max", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2635 .set_default(10000)
2636 .set_description("maximum number of entries to remove at once from the PG log")
2637 .add_service("osd")
2638 .add_see_also("osd_min_pg_log_entries")
2639 .add_see_also("osd_max_pg_log_entries"),
2640
d2e6a577
FG
2641 Option("osd_op_complaint_time", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2642 .set_default(30)
2643 .set_description(""),
2644
2645 Option("osd_command_max_records", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2646 .set_default(256)
2647 .set_description(""),
2648
2649 Option("osd_max_pg_blocked_by", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2650 .set_default(16)
2651 .set_description(""),
2652
2653 Option("osd_op_log_threshold", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2654 .set_default(5)
2655 .set_description(""),
2656
2657 Option("osd_verify_sparse_read_holes", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2658 .set_default(false)
2659 .set_description(""),
2660
2661 Option("osd_backoff_on_unfound", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2662 .set_default(true)
2663 .set_description(""),
2664
2665 Option("osd_backoff_on_degraded", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2666 .set_default(false)
2667 .set_description(""),
2668
2669 Option("osd_backoff_on_down", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2670 .set_default(true)
2671 .set_description(""),
2672
2673 Option("osd_backoff_on_peering", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2674 .set_default(false)
2675 .set_description(""),
2676
3efd9988
FG
2677 Option("osd_debug_shutdown", Option::TYPE_BOOL, Option::LEVEL_DEV)
2678 .set_default(false)
2679 .set_description("Turn up debug levels during shutdown"),
2680
d2e6a577
FG
2681 Option("osd_debug_crash_on_ignored_backoff", Option::TYPE_BOOL, Option::LEVEL_DEV)
2682 .set_default(false)
2683 .set_description(""),
2684
2685 Option("osd_debug_inject_dispatch_delay_probability", Option::TYPE_FLOAT, Option::LEVEL_DEV)
2686 .set_default(0)
2687 .set_description(""),
2688
2689 Option("osd_debug_inject_dispatch_delay_duration", Option::TYPE_FLOAT, Option::LEVEL_DEV)
2690 .set_default(.1)
2691 .set_description(""),
2692
2693 Option("osd_debug_drop_ping_probability", Option::TYPE_FLOAT, Option::LEVEL_DEV)
2694 .set_default(0)
2695 .set_description(""),
2696
2697 Option("osd_debug_drop_ping_duration", Option::TYPE_INT, Option::LEVEL_DEV)
2698 .set_default(0)
2699 .set_description(""),
2700
2701 Option("osd_debug_op_order", Option::TYPE_BOOL, Option::LEVEL_DEV)
2702 .set_default(false)
2703 .set_description(""),
2704
2705 Option("osd_debug_verify_missing_on_start", Option::TYPE_BOOL, Option::LEVEL_DEV)
2706 .set_default(false)
2707 .set_description(""),
2708
2709 Option("osd_debug_scrub_chance_rewrite_digest", Option::TYPE_UINT, Option::LEVEL_DEV)
2710 .set_default(0)
2711 .set_description(""),
2712
94b18763 2713 Option("osd_debug_verify_snaps", Option::TYPE_BOOL, Option::LEVEL_DEV)
d2e6a577
FG
2714 .set_default(false)
2715 .set_description(""),
2716
2717 Option("osd_debug_verify_stray_on_activate", Option::TYPE_BOOL, Option::LEVEL_DEV)
2718 .set_default(false)
2719 .set_description(""),
2720
2721 Option("osd_debug_skip_full_check_in_backfill_reservation", Option::TYPE_BOOL, Option::LEVEL_DEV)
2722 .set_default(false)
2723 .set_description(""),
2724
2725 Option("osd_debug_reject_backfill_probability", Option::TYPE_FLOAT, Option::LEVEL_DEV)
2726 .set_default(0)
2727 .set_description(""),
c07f9fc5 2728
d2e6a577
FG
2729 Option("osd_debug_inject_copyfrom_error", Option::TYPE_BOOL, Option::LEVEL_DEV)
2730 .set_default(false)
2731 .set_description(""),
c07f9fc5 2732
d2e6a577
FG
2733 Option("osd_debug_misdirected_ops", Option::TYPE_BOOL, Option::LEVEL_DEV)
2734 .set_default(false)
2735 .set_description(""),
c07f9fc5 2736
d2e6a577
FG
2737 Option("osd_debug_skip_full_check_in_recovery", Option::TYPE_BOOL, Option::LEVEL_DEV)
2738 .set_default(false)
2739 .set_description(""),
c07f9fc5 2740
d2e6a577
FG
2741 Option("osd_debug_random_push_read_error", Option::TYPE_FLOAT, Option::LEVEL_DEV)
2742 .set_default(0)
2743 .set_description(""),
c07f9fc5 2744
d2e6a577
FG
2745 Option("osd_debug_verify_cached_snaps", Option::TYPE_BOOL, Option::LEVEL_DEV)
2746 .set_default(false)
2747 .set_description(""),
c07f9fc5 2748
d2e6a577
FG
2749 Option("osd_enable_op_tracker", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2750 .set_default(true)
2751 .set_description(""),
c07f9fc5 2752
d2e6a577
FG
2753 Option("osd_num_op_tracker_shard", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2754 .set_default(32)
2755 .set_description(""),
c07f9fc5 2756
d2e6a577
FG
2757 Option("osd_op_history_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2758 .set_default(20)
2759 .set_description(""),
c07f9fc5 2760
d2e6a577
FG
2761 Option("osd_op_history_duration", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2762 .set_default(600)
2763 .set_description(""),
c07f9fc5 2764
d2e6a577
FG
2765 Option("osd_op_history_slow_op_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2766 .set_default(20)
2767 .set_description(""),
c07f9fc5 2768
d2e6a577
FG
2769 Option("osd_op_history_slow_op_threshold", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2770 .set_default(10.0)
2771 .set_description(""),
c07f9fc5 2772
d2e6a577
FG
2773 Option("osd_target_transaction_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2774 .set_default(30)
2775 .set_description(""),
c07f9fc5 2776
d2e6a577
FG
2777 Option("osd_failsafe_full_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2778 .set_default(.97)
2779 .set_description(""),
c07f9fc5 2780
d2e6a577
FG
2781 Option("osd_fast_fail_on_connection_refused", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2782 .set_default(true)
2783 .set_description(""),
c07f9fc5 2784
d2e6a577
FG
2785 Option("osd_pg_object_context_cache_count", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2786 .set_default(64)
2787 .set_description(""),
c07f9fc5 2788
d2e6a577
FG
2789 Option("osd_tracing", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2790 .set_default(false)
2791 .set_description(""),
c07f9fc5 2792
d2e6a577
FG
2793 Option("osd_function_tracing", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2794 .set_default(false)
2795 .set_description(""),
c07f9fc5 2796
d2e6a577
FG
2797 Option("osd_fast_info", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2798 .set_default(true)
2799 .set_description(""),
c07f9fc5 2800
d2e6a577
FG
2801 Option("osd_debug_pg_log_writeout", Option::TYPE_BOOL, Option::LEVEL_DEV)
2802 .set_default(false)
2803 .set_description(""),
c07f9fc5 2804
d2e6a577
FG
2805 Option("osd_loop_before_reset_tphandle", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2806 .set_default(64)
2807 .set_description(""),
c07f9fc5 2808
d2e6a577
FG
2809 Option("threadpool_default_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2810 .set_default(60)
2811 .set_description(""),
c07f9fc5 2812
d2e6a577
FG
2813 Option("threadpool_empty_queue_max_wait", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2814 .set_default(2)
2815 .set_description(""),
c07f9fc5 2816
d2e6a577
FG
2817 Option("leveldb_log_to_ceph_log", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2818 .set_default(true)
2819 .set_description(""),
c07f9fc5 2820
d2e6a577 2821 Option("leveldb_write_buffer_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 2822 .set_default(8_M)
d2e6a577 2823 .set_description(""),
c07f9fc5 2824
d2e6a577 2825 Option("leveldb_cache_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 2826 .set_default(128_M)
d2e6a577 2827 .set_description(""),
c07f9fc5 2828
d2e6a577
FG
2829 Option("leveldb_block_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2830 .set_default(0)
2831 .set_description(""),
c07f9fc5 2832
d2e6a577
FG
2833 Option("leveldb_bloom_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2834 .set_default(0)
2835 .set_description(""),
c07f9fc5 2836
d2e6a577
FG
2837 Option("leveldb_max_open_files", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2838 .set_default(0)
2839 .set_description(""),
c07f9fc5 2840
d2e6a577
FG
2841 Option("leveldb_compression", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2842 .set_default(true)
2843 .set_description(""),
c07f9fc5 2844
d2e6a577
FG
2845 Option("leveldb_paranoid", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2846 .set_default(false)
2847 .set_description(""),
2848
2849 Option("leveldb_log", Option::TYPE_STR, Option::LEVEL_ADVANCED)
2850 .set_default("/dev/null")
2851 .set_description(""),
2852
2853 Option("leveldb_compact_on_mount", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2854 .set_default(false)
2855 .set_description(""),
2856
2857 Option("kinetic_host", Option::TYPE_STR, Option::LEVEL_ADVANCED)
2858 .set_default("")
2859 .set_description(""),
2860
2861 Option("kinetic_port", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2862 .set_default(8123)
2863 .set_description(""),
2864
2865 Option("kinetic_user_id", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2866 .set_default(1)
2867 .set_description(""),
2868
2869 Option("kinetic_hmac_key", Option::TYPE_STR, Option::LEVEL_ADVANCED)
2870 .set_default("asdfasdf")
2871 .set_description(""),
2872
2873 Option("kinetic_use_ssl", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2874 .set_default(false)
2875 .set_description(""),
2876
2877 Option("rocksdb_separate_wal_dir", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2878 .set_default(false)
2879 .set_description(""),
2880
2881 Option("rocksdb_db_paths", Option::TYPE_STR, Option::LEVEL_ADVANCED)
2882 .set_default("")
2883 .set_description("")
2884 .set_safe(),
2885
2886 Option("rocksdb_log_to_ceph_log", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2887 .set_default(true)
2888 .set_description(""),
2889
2890 Option("rocksdb_cache_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 2891 .set_default(128_M)
d2e6a577
FG
2892 .set_description(""),
2893
2894 Option("rocksdb_cache_row_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2895 .set_default(0)
2896 .set_description(""),
2897
2898 Option("rocksdb_cache_shard_bits", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2899 .set_default(4)
2900 .set_description(""),
2901
2902 Option("rocksdb_cache_type", Option::TYPE_STR, Option::LEVEL_ADVANCED)
2903 .set_default("lru")
2904 .set_description(""),
2905
2906 Option("rocksdb_block_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144 2907 .set_default(4_K)
d2e6a577
FG
2908 .set_description(""),
2909
2910 Option("rocksdb_perf", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2911 .set_default(false)
2912 .set_description(""),
2913
2914 Option("rocksdb_collect_compaction_stats", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2915 .set_default(false)
2916 .set_description(""),
2917
2918 Option("rocksdb_collect_extended_stats", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2919 .set_default(false)
2920 .set_description(""),
2921
2922 Option("rocksdb_collect_memory_stats", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2923 .set_default(false)
2924 .set_description(""),
2925
2926 Option("rocksdb_enable_rmrange", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2927 .set_default(false)
2928 .set_description(""),
2929
2930 Option("rocksdb_bloom_bits_per_key", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2931 .set_default(20)
2932 .set_description("Number of bits per key to use for RocksDB's bloom filters.")
2933 .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."),
2934
2935 Option("rocksdb_cache_index_and_filter_blocks", Option::TYPE_BOOL, Option::LEVEL_DEV)
2936 .set_default(true)
2937 .set_description("Whether to cache indices and filters in block cache")
2938 .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."),
2939
2940 Option("rocksdb_cache_index_and_filter_blocks_with_high_priority", Option::TYPE_BOOL, Option::LEVEL_DEV)
2941 .set_default(true)
2942 .set_description("Whether to cache indices and filters in the block cache with high priority")
2943 .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."),
2944
2945 Option("rocksdb_pin_l0_filter_and_index_blocks_in_cache", Option::TYPE_BOOL, Option::LEVEL_DEV)
2946 .set_default(true)
2947 .set_description("Whether to pin Level 0 indices and bloom filters in the block cache")
2948 .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."),
2949
2950 Option("rocksdb_index_type", Option::TYPE_STR, Option::LEVEL_DEV)
2951 .set_default("binary_search")
2952 .set_description("Type of index for SST files: binary_search, hash_search, two_level")
2953 .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"),
2954
2955 Option("rocksdb_partition_filters", Option::TYPE_BOOL, Option::LEVEL_DEV)
2956 .set_default(false)
2957 .set_description("(experimental) partition SST index/filters into smaller blocks")
2958 .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"),
2959
2960 Option("rocksdb_metadata_block_size", Option::TYPE_UINT, Option::LEVEL_DEV)
b32b8144 2961 .set_default(4_K)
d2e6a577
FG
2962 .set_description("The block size for index partitions. (0 = rocksdb default)"),
2963
2964 Option("mon_rocksdb_options", Option::TYPE_STR, Option::LEVEL_ADVANCED)
2965 .set_default("write_buffer_size=33554432,compression=kNoCompression")
2966 .set_description(""),
2967
2968 Option("osd_client_op_priority", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2969 .set_default(63)
2970 .set_description(""),
2971
2972 Option("osd_recovery_op_priority", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2973 .set_default(3)
2974 .set_description(""),
2975
2976 Option("osd_snap_trim_priority", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2977 .set_default(5)
2978 .set_description(""),
2979
2980 Option("osd_snap_trim_cost", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2981 .set_default(1<<20)
2982 .set_description(""),
2983
2984 Option("osd_scrub_priority", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2985 .set_default(5)
2986 .set_description(""),
2987
2988 Option("osd_scrub_cost", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2989 .set_default(50<<20)
2990 .set_description(""),
2991
2992 Option("osd_requested_scrub_priority", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2993 .set_default(120)
2994 .set_description(""),
2995
2996 Option("osd_recovery_priority", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2997 .set_default(5)
2998 .set_description(""),
2999
3000 Option("osd_recovery_cost", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3001 .set_default(20<<20)
3002 .set_description(""),
3003
3004 Option("osd_recovery_op_warn_multiple", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3005 .set_default(16)
3006 .set_description(""),
3007
3008 Option("osd_mon_shutdown_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3009 .set_default(5)
3010 .set_description(""),
3011
3012 Option("osd_shutdown_pgref_assert", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3013 .set_default(false)
3014 .set_description(""),
3015
3016 Option("osd_max_object_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 3017 .set_default(128_M)
d2e6a577
FG
3018 .set_description(""),
3019
3020 Option("osd_max_object_name_len", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3021 .set_default(2048)
3022 .set_description(""),
3023
3024 Option("osd_max_object_namespace_len", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3025 .set_default(256)
3026 .set_description(""),
3027
3028 Option("osd_max_attr_name_len", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3029 .set_default(100)
3030 .set_description(""),
3031
3032 Option("osd_max_attr_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3033 .set_default(0)
3034 .set_description(""),
3035
3036 Option("osd_max_omap_entries_per_request", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3037 .set_default(131072)
3038 .set_description(""),
c07f9fc5 3039
d2e6a577
FG
3040 Option("osd_max_omap_bytes_per_request", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3041 .set_default(1<<30)
3042 .set_description(""),
c07f9fc5 3043
d2e6a577
FG
3044 Option("osd_objectstore", Option::TYPE_STR, Option::LEVEL_ADVANCED)
3045 .set_default("filestore")
3046 .set_description(""),
c07f9fc5 3047
d2e6a577
FG
3048 Option("osd_objectstore_tracing", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3049 .set_default(false)
3050 .set_description(""),
c07f9fc5 3051
d2e6a577
FG
3052 Option("osd_objectstore_fuse", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3053 .set_default(false)
3054 .set_description(""),
c07f9fc5 3055
d2e6a577
FG
3056 Option("osd_bench_small_size_max_iops", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3057 .set_default(100)
3058 .set_description(""),
c07f9fc5 3059
d2e6a577
FG
3060 Option("osd_bench_large_size_max_throughput", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3061 .set_default(100 << 20)
3062 .set_description(""),
c07f9fc5 3063
d2e6a577
FG
3064 Option("osd_bench_max_block_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3065 .set_default(64 << 20)
3066 .set_description(""),
c07f9fc5 3067
d2e6a577
FG
3068 Option("osd_bench_duration", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3069 .set_default(30)
3070 .set_description(""),
c07f9fc5 3071
d2e6a577
FG
3072 Option("osd_blkin_trace_all", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3073 .set_default(false)
3074 .set_description(""),
c07f9fc5 3075
d2e6a577
FG
3076 Option("osdc_blkin_trace_all", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3077 .set_default(false)
3078 .set_description(""),
c07f9fc5 3079
d2e6a577
FG
3080 Option("osd_discard_disconnected_ops", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3081 .set_default(true)
3082 .set_description(""),
c07f9fc5 3083
d2e6a577 3084 Option("memstore_device_bytes", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 3085 .set_default(1_G)
d2e6a577 3086 .set_description(""),
c07f9fc5 3087
d2e6a577 3088 Option("memstore_page_set", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
35e4c445 3089 .set_default(false)
d2e6a577 3090 .set_description(""),
c07f9fc5 3091
d2e6a577 3092 Option("memstore_page_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 3093 .set_default(64_K)
d2e6a577 3094 .set_description(""),
c07f9fc5 3095
d2e6a577
FG
3096 Option("objectstore_blackhole", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3097 .set_default(false)
3098 .set_description(""),
c07f9fc5 3099
d2e6a577
FG
3100 // --------------------------
3101 // bluestore
c07f9fc5 3102
3efd9988
FG
3103 Option("bdev_inject_bad_size", Option::TYPE_BOOL, Option::LEVEL_DEV)
3104 .set_default(false)
3105 .set_description(""),
3106
d2e6a577
FG
3107 Option("bdev_debug_inflight_ios", Option::TYPE_BOOL, Option::LEVEL_DEV)
3108 .set_default(false)
3109 .set_description(""),
c07f9fc5 3110
d2e6a577
FG
3111 Option("bdev_inject_crash", Option::TYPE_INT, Option::LEVEL_DEV)
3112 .set_default(0)
3113 .set_description(""),
c07f9fc5 3114
d2e6a577
FG
3115 Option("bdev_inject_crash_flush_delay", Option::TYPE_INT, Option::LEVEL_DEV)
3116 .set_default(2)
3117 .set_description(""),
c07f9fc5 3118
d2e6a577
FG
3119 Option("bdev_aio", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3120 .set_default(true)
3121 .set_description(""),
c07f9fc5 3122
d2e6a577
FG
3123 Option("bdev_aio_poll_ms", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3124 .set_default(250)
3125 .set_description(""),
c07f9fc5 3126
d2e6a577
FG
3127 Option("bdev_aio_max_queue_depth", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3128 .set_default(1024)
3129 .set_description(""),
c07f9fc5 3130
d2e6a577
FG
3131 Option("bdev_aio_reap_max", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3132 .set_default(16)
3133 .set_description(""),
c07f9fc5 3134
d2e6a577 3135 Option("bdev_block_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144 3136 .set_default(4_K)
d2e6a577 3137 .set_description(""),
c07f9fc5 3138
d2e6a577
FG
3139 Option("bdev_debug_aio", Option::TYPE_BOOL, Option::LEVEL_DEV)
3140 .set_default(false)
3141 .set_description(""),
c07f9fc5 3142
d2e6a577
FG
3143 Option("bdev_debug_aio_suicide_timeout", Option::TYPE_FLOAT, Option::LEVEL_DEV)
3144 .set_default(60.0)
3145 .set_description(""),
c07f9fc5 3146
d2e6a577
FG
3147 Option("bdev_nvme_unbind_from_kernel", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3148 .set_default(false)
3149 .set_description(""),
c07f9fc5 3150
d2e6a577
FG
3151 Option("bdev_nvme_retry_count", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3152 .set_default(-1)
3153 .set_description(""),
c07f9fc5 3154
d2e6a577 3155 Option("bluefs_alloc_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 3156 .set_default(1_M)
d2e6a577
FG
3157 .set_description(""),
3158
3159 Option("bluefs_max_prefetch", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 3160 .set_default(1_M)
d2e6a577
FG
3161 .set_description(""),
3162
3163 Option("bluefs_min_log_runway", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 3164 .set_default(1_M)
d2e6a577
FG
3165 .set_description(""),
3166
3167 Option("bluefs_max_log_runway", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3168 .set_default(4194304)
3169 .set_description(""),
3170
3171 Option("bluefs_log_compact_min_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3172 .set_default(5.0)
3173 .set_description(""),
3174
3175 Option("bluefs_log_compact_min_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 3176 .set_default(16_M)
d2e6a577
FG
3177 .set_description(""),
3178
3179 Option("bluefs_min_flush_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 3180 .set_default(512_K)
d2e6a577
FG
3181 .set_description(""),
3182
3183 Option("bluefs_compact_log_sync", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3184 .set_default(false)
3185 .set_description(""),
3186
3187 Option("bluefs_buffered_io", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3188 .set_default(false)
3189 .set_description(""),
3190
3191 Option("bluefs_sync_write", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3192 .set_default(false)
3193 .set_description(""),
3194
3195 Option("bluefs_allocator", Option::TYPE_STR, Option::LEVEL_DEV)
181888fb 3196 .set_default("stupid")
d2e6a577
FG
3197 .set_description(""),
3198
3199 Option("bluefs_preextend_wal_files", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3200 .set_default(false)
3201 .set_description(""),
3202
3203 Option("bluestore_bluefs", Option::TYPE_BOOL, Option::LEVEL_DEV)
3204 .set_default(true)
3205 .add_tag("mkfs")
3206 .set_description("Use BlueFS to back rocksdb")
3207 .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."),
3208
3209 Option("bluestore_bluefs_env_mirror", Option::TYPE_BOOL, Option::LEVEL_DEV)
3210 .set_default(false)
3211 .add_tag("mkfs")
3212 .set_description("Mirror bluefs data to file system for testing/validation"),
3213
3214 Option("bluestore_bluefs_min", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 3215 .set_default(1_G)
d2e6a577
FG
3216 .set_description("minimum disk space allocated to BlueFS (e.g., at mkfs)"),
3217
3efd9988
FG
3218 Option("bluestore_bluefs_min_free", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3219 .set_default(1*1024*1024*1024)
3220 .set_description("minimum free space allocated to BlueFS"),
3221
d2e6a577
FG
3222 Option("bluestore_bluefs_min_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3223 .set_default(.02)
3224 .set_description("Minimum fraction of free space devoted to BlueFS"),
3225
3226 Option("bluestore_bluefs_max_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3227 .set_default(.90)
3228 .set_description("Maximum fraction of free storage devoted to BlueFS"),
3229
3230 Option("bluestore_bluefs_gift_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3231 .set_default(.02)
3232 .set_description("Maximum fraction of free space to give to BlueFS at once"),
3233
3234 Option("bluestore_bluefs_reclaim_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3235 .set_default(.20)
3236 .set_description("Maximum fraction of free space to reclaim from BlueFS at once"),
3237
3238 Option("bluestore_bluefs_balance_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3239 .set_default(1)
3240 .set_description("How frequently (in seconds) to balance free space between BlueFS and BlueStore"),
3241
3242 Option("bluestore_spdk_mem", Option::TYPE_UINT, Option::LEVEL_DEV)
3243 .set_default(512)
3244 .set_description(""),
3245
3246 Option("bluestore_spdk_coremask", Option::TYPE_STR, Option::LEVEL_DEV)
3247 .set_default("0x3")
3248 .set_description(""),
3249
3250 Option("bluestore_spdk_max_io_completion", Option::TYPE_UINT, Option::LEVEL_DEV)
3251 .set_default(0)
3252 .set_description(""),
3253
3254 Option("bluestore_block_path", Option::TYPE_STR, Option::LEVEL_DEV)
3255 .set_default("")
3256 .add_tag("mkfs")
3257 .set_description("Path to block device/file"),
3258
3259 Option("bluestore_block_size", Option::TYPE_UINT, Option::LEVEL_DEV)
b32b8144 3260 .set_default(10_G)
d2e6a577
FG
3261 .add_tag("mkfs")
3262 .set_description("Size of file to create for backing bluestore"),
3263
3264 Option("bluestore_block_create", Option::TYPE_BOOL, Option::LEVEL_DEV)
3265 .set_default(true)
3266 .add_tag("mkfs")
3267 .set_description("Create bluestore_block_path if it doesn't exist")
3268 .add_see_also("bluestore_block_path").add_see_also("bluestore_block_size"),
3269
3270 Option("bluestore_block_db_path", Option::TYPE_STR, Option::LEVEL_DEV)
3271 .set_default("")
3272 .add_tag("mkfs")
3273 .set_description("Path for db block device"),
3274
3275 Option("bluestore_block_db_size", Option::TYPE_UINT, Option::LEVEL_DEV)
3276 .set_default(0)
3277 .add_tag("mkfs")
3278 .set_description("Size of file to create for bluestore_block_db_path"),
3279
3280 Option("bluestore_block_db_create", Option::TYPE_BOOL, Option::LEVEL_DEV)
3281 .set_default(false)
3282 .add_tag("mkfs")
3283 .set_description("Create bluestore_block_db_path if it doesn't exist")
3284 .add_see_also("bluestore_block_db_path")
3285 .add_see_also("bluestore_block_db_size"),
3286
3287 Option("bluestore_block_wal_path", Option::TYPE_STR, Option::LEVEL_DEV)
3288 .set_default("")
3289 .add_tag("mkfs")
3290 .set_description("Path to block device/file backing bluefs wal"),
3291
3292 Option("bluestore_block_wal_size", Option::TYPE_UINT, Option::LEVEL_DEV)
b32b8144 3293 .set_default(96_M)
d2e6a577
FG
3294 .add_tag("mkfs")
3295 .set_description("Size of file to create for bluestore_block_wal_path"),
3296
3297 Option("bluestore_block_wal_create", Option::TYPE_BOOL, Option::LEVEL_DEV)
3298 .set_default(false)
3299 .add_tag("mkfs")
3300 .set_description("Create bluestore_block_wal_path if it doesn't exist")
3301 .add_see_also("bluestore_block_wal_path")
3302 .add_see_also("bluestore_block_wal_size"),
3303
3304 Option("bluestore_block_preallocate_file", Option::TYPE_BOOL, Option::LEVEL_DEV)
3305 .set_default(false)
3306 .add_tag("mkfs")
3307 .set_description("Preallocate file created via bluestore_block*_create"),
3308
3309 Option("bluestore_csum_type", Option::TYPE_STR, Option::LEVEL_ADVANCED)
3310 .set_default("crc32c")
3311 .set_enum_allowed({"none", "crc32c", "crc32c_16", "crc32c_8", "xxhash32", "xxhash64"})
3312 .set_safe()
3313 .set_description("Default checksum algorithm to use")
3314 .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."),
3315
3316 Option("bluestore_csum_min_block", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3317 .set_default(4096)
3318 .set_safe()
3319 .set_description("Minimum block size to checksum")
3320 .set_long_description("A larger checksum block means less checksum metadata to store, but results in read amplification when doing a read smaller than this size (because the entire block must be read to verify the checksum).")
3321 .add_see_also("bluestore_csum_max_block"),
3322
3323 Option("bluestore_csum_max_block", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 3324 .set_default(64_K)
d2e6a577
FG
3325 .set_safe()
3326 .set_description("Maximum block size to checksum")
3327 .add_see_also("bluestore_csum_min_block"),
3328
3329 Option("bluestore_min_alloc_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3330 .set_default(0)
3331 .add_tag("mkfs")
3332 .set_description("Minimum allocation size to allocate for an object")
3333 .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."),
3334
3335 Option("bluestore_min_alloc_size_hdd", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 3336 .set_default(64_K)
d2e6a577
FG
3337 .add_tag("mkfs")
3338 .set_description("Default min_alloc_size value for rotational media"),
3339
3340 Option("bluestore_min_alloc_size_ssd", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 3341 .set_default(16_K)
d2e6a577
FG
3342 .add_tag("mkfs")
3343 .set_description("Default min_alloc_size value for non-rotational (solid state) media"),
3344
3345 Option("bluestore_max_alloc_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3346 .set_default(0)
3347 .add_tag("mkfs")
3348 .set_description("Maximum size of a single allocation (0 for no max)"),
3349
3350 Option("bluestore_prefer_deferred_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3351 .set_default(0)
3352 .set_safe()
3353 .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."),
3354
3355 Option("bluestore_prefer_deferred_size_hdd", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3356 .set_default(32768)
3357 .set_safe()
3358 .set_description("Default bluestore_prefer_deferred_size for rotational media"),
3359
3360 Option("bluestore_prefer_deferred_size_ssd", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3361 .set_default(0)
3362 .set_safe()
3363 .set_description("Default bluestore_prefer_deferred_size for non-rotational (solid state) media"),
3364
3365 Option("bluestore_compression_mode", Option::TYPE_STR, Option::LEVEL_ADVANCED)
3366 .set_default("none")
3367 .set_enum_allowed({"none", "passive", "aggressive", "force"})
3368 .set_safe()
3369 .set_description("Default policy for using compression when pool does not specify")
3370 .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."),
3371
3372 Option("bluestore_compression_algorithm", Option::TYPE_STR, Option::LEVEL_ADVANCED)
3373 .set_default("snappy")
3374 .set_enum_allowed({"", "snappy", "zlib", "zstd", "lz4"})
3375 .set_safe()
3376 .set_description("Default compression algorithm to use when writing object data")
3377 .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."),
3378
3379 Option("bluestore_compression_min_blob_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3380 .set_default(0)
3381 .set_safe()
3382 .set_description("Chunks smaller than this are never compressed"),
3383
3384 Option("bluestore_compression_min_blob_size_hdd", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 3385 .set_default(128_K)
d2e6a577
FG
3386 .set_safe()
3387 .set_description("Default value of bluestore_compression_min_blob_size for rotational media"),
3388
3389 Option("bluestore_compression_min_blob_size_ssd", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 3390 .set_default(8_K)
d2e6a577
FG
3391 .set_safe()
3392 .set_description("Default value of bluestore_compression_min_blob_size for non-rotational (solid state) media"),
3393
3394 Option("bluestore_compression_max_blob_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3395 .set_default(0)
3396 .set_safe()
3397 .set_description("Chunks larger than this are broken into smaller chunks before being compressed"),
3398
3399 Option("bluestore_compression_max_blob_size_hdd", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 3400 .set_default(512_K)
d2e6a577
FG
3401 .set_safe()
3402 .set_description("Default value of bluestore_compression_max_blob_size for rotational media"),
3403
3404 Option("bluestore_compression_max_blob_size_ssd", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 3405 .set_default(64_K)
d2e6a577
FG
3406 .set_safe()
3407 .set_description("Default value of bluestore_compression_max_blob_size for non-rotational (solid state) media"),
3408
3409 Option("bluestore_gc_enable_blob_threshold", Option::TYPE_INT, Option::LEVEL_DEV)
3410 .set_default(0)
3411 .set_safe()
3412 .set_description(""),
3413
3414 Option("bluestore_gc_enable_total_threshold", Option::TYPE_INT, Option::LEVEL_DEV)
3415 .set_default(0)
3416 .set_safe()
3417 .set_description(""),
3418
3419 Option("bluestore_max_blob_size", Option::TYPE_UINT, Option::LEVEL_DEV)
3420 .set_default(0)
3421 .set_safe()
3422 .set_description(""),
3423
3424 Option("bluestore_max_blob_size_hdd", Option::TYPE_UINT, Option::LEVEL_DEV)
b32b8144 3425 .set_default(512_K)
d2e6a577
FG
3426 .set_safe()
3427 .set_description(""),
3428
3429 Option("bluestore_max_blob_size_ssd", Option::TYPE_UINT, Option::LEVEL_DEV)
b32b8144 3430 .set_default(64_K)
d2e6a577
FG
3431 .set_safe()
3432 .set_description(""),
3433
3434 Option("bluestore_compression_required_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3435 .set_default(.875)
3436 .set_safe()
3437 .set_description("Compression ratio required to store compressed data")
3438 .set_long_description("If we compress data and get less than this we discard the result and store the original uncompressed data."),
3439
3440 Option("bluestore_extent_map_shard_max_size", Option::TYPE_UINT, Option::LEVEL_DEV)
3441 .set_default(1200)
3442 .set_description("Max size (bytes) for a single extent map shard before splitting"),
3443
3444 Option("bluestore_extent_map_shard_target_size", Option::TYPE_UINT, Option::LEVEL_DEV)
3445 .set_default(500)
3446 .set_description("Target size (bytes) for a single extent map shard"),
3447
3448 Option("bluestore_extent_map_shard_min_size", Option::TYPE_UINT, Option::LEVEL_DEV)
3449 .set_default(150)
3450 .set_description("Min size (bytes) for a single extent map shard before merging"),
3451
3452 Option("bluestore_extent_map_shard_target_size_slop", Option::TYPE_FLOAT, Option::LEVEL_DEV)
3453 .set_default(.2)
3454 .set_description("Ratio above/below target for a shard when trying to align to an existing extent or blob boundary"),
3455
3456 Option("bluestore_extent_map_inline_shard_prealloc_size", Option::TYPE_UINT, Option::LEVEL_DEV)
3457 .set_default(256)
3458 .set_description("Preallocated buffer for inline shards"),
3459
3460 Option("bluestore_cache_trim_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
94b18763 3461 .set_default(.05)
d2e6a577
FG
3462 .set_description("How frequently we trim the bluestore cache"),
3463
3464 Option("bluestore_cache_trim_max_skip_pinned", Option::TYPE_UINT, Option::LEVEL_DEV)
3465 .set_default(64)
3466 .set_description("Max pinned cache entries we consider before giving up"),
3467
3468 Option("bluestore_cache_type", Option::TYPE_STR, Option::LEVEL_DEV)
3469 .set_default("2q")
3470 .set_enum_allowed({"2q", "lru"})
3471 .set_description("Cache replacement algorithm"),
3472
3473 Option("bluestore_2q_cache_kin_ratio", Option::TYPE_FLOAT, Option::LEVEL_DEV)
3474 .set_default(.5)
3475 .set_description("2Q paper suggests .5"),
3476
3477 Option("bluestore_2q_cache_kout_ratio", Option::TYPE_FLOAT, Option::LEVEL_DEV)
3478 .set_default(.5)
3479 .set_description("2Q paper suggests .5"),
3480
3481 Option("bluestore_cache_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3482 .set_default(0)
3483 .set_description("Cache size (in bytes) for BlueStore")
3484 .set_long_description("This includes data and metadata cached by BlueStore as well as memory devoted to rocksdb's cache(s)."),
3485
3486 Option("bluestore_cache_size_hdd", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 3487 .set_default(1_G)
d2e6a577
FG
3488 .set_description("Default bluestore_cache_size for rotational media"),
3489
3490 Option("bluestore_cache_size_ssd", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 3491 .set_default(3_G)
d2e6a577
FG
3492 .set_description("Default bluestore_cache_size for non-rotational (solid state) media"),
3493
3494 Option("bluestore_cache_meta_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3495 .set_default(.01)
3496 .set_description("Ratio of bluestore cache to devote to metadata"),
3497
3498 Option("bluestore_cache_kv_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3499 .set_default(.99)
3500 .set_description("Ratio of bluestore cache to devote to kv database (rocksdb)"),
3501
94b18763 3502 Option("bluestore_cache_kv_max", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144 3503 .set_default(512_M)
94b18763
FG
3504 .set_description("Max memory (bytes) to devote to kv database (rocksdb)")
3505 .set_long_description("A negative value means using bluestore_cache_meta_ratio "
3506 "and bluestore_cache_kv_ratio instead of calculating these ratios using "
3507 "bluestore_cache_size_* and bluestore_cache_kv_max."),
d2e6a577
FG
3508
3509 Option("bluestore_kvbackend", Option::TYPE_STR, Option::LEVEL_DEV)
3510 .set_default("rocksdb")
3511 .add_tag("mkfs")
3512 .set_description("Key value database to use for bluestore"),
3513
3514 Option("bluestore_allocator", Option::TYPE_STR, Option::LEVEL_DEV)
181888fb
FG
3515 .set_default("stupid")
3516 .set_enum_allowed({"bitmap", "stupid"})
3517 .set_description("Allocator policy"),
d2e6a577
FG
3518
3519 Option("bluestore_freelist_blocks_per_key", Option::TYPE_INT, Option::LEVEL_DEV)
3520 .set_default(128)
3521 .set_description("Block (and bits) per database key"),
3522
3523 Option("bluestore_bitmapallocator_blocks_per_zone", Option::TYPE_INT, Option::LEVEL_DEV)
3524 .set_default(1024)
3525 .set_description(""),
3526
3527 Option("bluestore_bitmapallocator_span_size", Option::TYPE_INT, Option::LEVEL_DEV)
3528 .set_default(1024)
3529 .set_description(""),
3530
3531 Option("bluestore_max_deferred_txc", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3532 .set_default(32)
3533 .set_description("Max transactions with deferred writes that can accumulate before we force flush deferred writes"),
3534
3535 Option("bluestore_rocksdb_options", Option::TYPE_STR, Option::LEVEL_ADVANCED)
3536 .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")
3537 .set_description("Rocksdb options"),
3538
3539 Option("bluestore_fsck_on_mount", Option::TYPE_BOOL, Option::LEVEL_DEV)
3540 .set_default(false)
3541 .set_description("Run fsck at mount"),
3542
3543 Option("bluestore_fsck_on_mount_deep", Option::TYPE_BOOL, Option::LEVEL_DEV)
3544 .set_default(true)
3545 .set_description("Run deep fsck at mount"),
3546
3547 Option("bluestore_fsck_on_umount", Option::TYPE_BOOL, Option::LEVEL_DEV)
3548 .set_default(false)
3549 .set_description("Run fsck at umount"),
3550
3551 Option("bluestore_fsck_on_umount_deep", Option::TYPE_BOOL, Option::LEVEL_DEV)
3552 .set_default(true)
3553 .set_description("Run deep fsck at umount"),
3554
3555 Option("bluestore_fsck_on_mkfs", Option::TYPE_BOOL, Option::LEVEL_DEV)
3556 .set_default(true)
3557 .set_description("Run fsck after mkfs"),
3558
3559 Option("bluestore_fsck_on_mkfs_deep", Option::TYPE_BOOL, Option::LEVEL_DEV)
3560 .set_default(false)
3561 .set_description("Run deep fsck after mkfs"),
3562
3563 Option("bluestore_sync_submit_transaction", Option::TYPE_BOOL, Option::LEVEL_DEV)
3564 .set_default(false)
3565 .set_description("Try to submit metadata transaction to rocksdb in queuing thread context"),
3566
3567 Option("bluestore_throttle_bytes", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 3568 .set_default(64_M)
d2e6a577
FG
3569 .set_safe()
3570 .set_description("Maximum bytes in flight before we throttle IO submission"),
3571
3572 Option("bluestore_throttle_deferred_bytes", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 3573 .set_default(128_M)
d2e6a577
FG
3574 .set_safe()
3575 .set_description("Maximum bytes for deferred writes before we throttle IO submission"),
3576
3577 Option("bluestore_throttle_cost_per_io", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3578 .set_default(0)
3579 .set_safe()
3580 .set_description("Overhead added to transaction cost (in bytes) for each IO"),
3581
3582 Option("bluestore_throttle_cost_per_io_hdd", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3583 .set_default(670000)
3584 .set_safe()
3585 .set_description("Default bluestore_throttle_cost_per_io for rotational media"),
3586
3587 Option("bluestore_throttle_cost_per_io_ssd", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3588 .set_default(4000)
3589 .set_safe()
3590 .set_description("Default bluestore_throttle_cost_per_io for non-rotation (solid state) media"),
3591
3592
3593 Option("bluestore_deferred_batch_ops", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3594 .set_default(0)
3595 .set_safe()
3596 .set_description("Max number of deferred writes before we flush the deferred write queue"),
3597
3598 Option("bluestore_deferred_batch_ops_hdd", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3599 .set_default(64)
3600 .set_safe()
3601 .set_description("Default bluestore_deferred_batch_ops for rotational media"),
3602
3603 Option("bluestore_deferred_batch_ops_ssd", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3604 .set_default(16)
3605 .set_safe()
3606 .set_description("Default bluestore_deferred_batch_ops for non-rotational (solid state) media"),
3607
3608 Option("bluestore_nid_prealloc", Option::TYPE_INT, Option::LEVEL_DEV)
3609 .set_default(1024)
3610 .set_description("Number of unique object ids to preallocate at a time"),
3611
3612 Option("bluestore_blobid_prealloc", Option::TYPE_UINT, Option::LEVEL_DEV)
3613 .set_default(10240)
3614 .set_description("Number of unique blob ids to preallocate at a time"),
3615
3616 Option("bluestore_clone_cow", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3617 .set_default(true)
3618 .set_safe()
3619 .set_description("Use copy-on-write when cloning objects (versus reading and rewriting them at clone time)"),
3620
3621 Option("bluestore_default_buffered_read", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3622 .set_default(true)
3623 .set_safe()
3624 .set_description("Cache read results by default (unless hinted NOCACHE or WONTNEED)"),
3625
3626 Option("bluestore_default_buffered_write", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3627 .set_default(false)
3628 .set_safe()
3629 .set_description("Cache writes by default (unless hinted NOCACHE or WONTNEED)"),
3630
3631 Option("bluestore_debug_misc", Option::TYPE_BOOL, Option::LEVEL_DEV)
3632 .set_default(false)
3633 .set_description(""),
3634
3635 Option("bluestore_debug_no_reuse_blocks", Option::TYPE_BOOL, Option::LEVEL_DEV)
3636 .set_default(false)
3637 .set_description(""),
3638
3639 Option("bluestore_debug_small_allocations", Option::TYPE_INT, Option::LEVEL_DEV)
3640 .set_default(0)
3641 .set_description(""),
3642
3643 Option("bluestore_debug_freelist", Option::TYPE_BOOL, Option::LEVEL_DEV)
3644 .set_default(false)
3645 .set_description(""),
3646
3647 Option("bluestore_debug_prefill", Option::TYPE_FLOAT, Option::LEVEL_DEV)
3648 .set_default(0)
3649 .set_description("simulate fragmentation"),
3650
3651 Option("bluestore_debug_prefragment_max", Option::TYPE_INT, Option::LEVEL_DEV)
b32b8144 3652 .set_default(1_M)
d2e6a577
FG
3653 .set_description(""),
3654
3655 Option("bluestore_debug_inject_read_err", Option::TYPE_BOOL, Option::LEVEL_DEV)
3656 .set_default(false)
3657 .set_description(""),
3658
3659 Option("bluestore_debug_randomize_serial_transaction", Option::TYPE_INT, Option::LEVEL_DEV)
3660 .set_default(0)
3661 .set_description(""),
3662
3663 Option("bluestore_debug_omit_block_device_write", Option::TYPE_BOOL, Option::LEVEL_DEV)
3664 .set_default(false)
3665 .set_description(""),
3666
3667 Option("bluestore_debug_fsck_abort", Option::TYPE_BOOL, Option::LEVEL_DEV)
3668 .set_default(false)
3669 .set_description(""),
3670
3671 Option("bluestore_debug_omit_kv_commit", Option::TYPE_BOOL, Option::LEVEL_DEV)
3672 .set_default(false)
3673 .set_description(""),
3674
3675 Option("bluestore_debug_permit_any_bdev_label", Option::TYPE_BOOL, Option::LEVEL_DEV)
3676 .set_default(false)
3677 .set_description(""),
3678
3679 Option("bluestore_shard_finishers", Option::TYPE_BOOL, Option::LEVEL_DEV)
3680 .set_default(false)
3681 .set_description(""),
3682
3683 Option("bluestore_debug_random_read_err", Option::TYPE_FLOAT, Option::LEVEL_DEV)
3684 .set_default(0)
3685 .set_description(""),
c07f9fc5 3686
d2e6a577
FG
3687 // -----------------------------------------
3688 // kstore
c07f9fc5 3689
d2e6a577
FG
3690 Option("kstore_max_ops", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3691 .set_default(512)
3692 .set_description(""),
3693
3694 Option("kstore_max_bytes", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 3695 .set_default(64_M)
d2e6a577 3696 .set_description(""),
c07f9fc5 3697
d2e6a577
FG
3698 Option("kstore_backend", Option::TYPE_STR, Option::LEVEL_ADVANCED)
3699 .set_default("rocksdb")
3700 .set_description(""),
c07f9fc5 3701
d2e6a577
FG
3702 Option("kstore_rocksdb_options", Option::TYPE_STR, Option::LEVEL_ADVANCED)
3703 .set_default("compression=kNoCompression")
3704 .set_description(""),
c07f9fc5 3705
d2e6a577
FG
3706 Option("kstore_fsck_on_mount", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3707 .set_default(false)
3708 .set_description(""),
c07f9fc5 3709
d2e6a577
FG
3710 Option("kstore_fsck_on_mount_deep", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3711 .set_default(true)
3712 .set_description(""),
c07f9fc5 3713
d2e6a577
FG
3714 Option("kstore_nid_prealloc", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3715 .set_default(1024)
3716 .set_description(""),
c07f9fc5 3717
d2e6a577
FG
3718 Option("kstore_sync_transaction", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3719 .set_default(false)
3720 .set_description(""),
c07f9fc5 3721
d2e6a577
FG
3722 Option("kstore_sync_submit_transaction", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3723 .set_default(false)
3724 .set_description(""),
c07f9fc5 3725
d2e6a577
FG
3726 Option("kstore_onode_map_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3727 .set_default(1024)
3728 .set_description(""),
c07f9fc5 3729
d2e6a577
FG
3730 Option("kstore_default_stripe_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3731 .set_default(65536)
3732 .set_description(""),
c07f9fc5 3733
d2e6a577
FG
3734 // ---------------------
3735 // filestore
c07f9fc5 3736
d2e6a577 3737 Option("filestore_rocksdb_options", Option::TYPE_STR, Option::LEVEL_ADVANCED)
3efd9988 3738 .set_default("max_background_compactions=8,compaction_readahead_size=2097152,compression=kNoCompression")
d2e6a577 3739 .set_description(""),
c07f9fc5 3740
d2e6a577
FG
3741 Option("filestore_omap_backend", Option::TYPE_STR, Option::LEVEL_ADVANCED)
3742 .set_default("rocksdb")
3743 .set_description(""),
c07f9fc5 3744
d2e6a577
FG
3745 Option("filestore_omap_backend_path", Option::TYPE_STR, Option::LEVEL_ADVANCED)
3746 .set_default("")
3747 .set_description(""),
c07f9fc5 3748
d2e6a577
FG
3749 Option("filestore_wbthrottle_enable", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3750 .set_default(true)
3751 .set_description(""),
c07f9fc5 3752
d2e6a577
FG
3753 Option("filestore_wbthrottle_btrfs_bytes_start_flusher", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3754 .set_default(41943040)
3755 .set_description(""),
c07f9fc5 3756
d2e6a577
FG
3757 Option("filestore_wbthrottle_btrfs_bytes_hard_limit", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3758 .set_default(419430400)
3759 .set_description(""),
c07f9fc5 3760
d2e6a577
FG
3761 Option("filestore_wbthrottle_btrfs_ios_start_flusher", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3762 .set_default(500)
3763 .set_description(""),
c07f9fc5 3764
d2e6a577
FG
3765 Option("filestore_wbthrottle_btrfs_ios_hard_limit", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3766 .set_default(5000)
3767 .set_description(""),
c07f9fc5 3768
d2e6a577
FG
3769 Option("filestore_wbthrottle_btrfs_inodes_start_flusher", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3770 .set_default(500)
3771 .set_description(""),
c07f9fc5 3772
d2e6a577
FG
3773 Option("filestore_wbthrottle_xfs_bytes_start_flusher", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3774 .set_default(41943040)
3775 .set_description(""),
c07f9fc5 3776
d2e6a577
FG
3777 Option("filestore_wbthrottle_xfs_bytes_hard_limit", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3778 .set_default(419430400)
3779 .set_description(""),
c07f9fc5 3780
d2e6a577
FG
3781 Option("filestore_wbthrottle_xfs_ios_start_flusher", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3782 .set_default(500)
3783 .set_description(""),
c07f9fc5 3784
d2e6a577
FG
3785 Option("filestore_wbthrottle_xfs_ios_hard_limit", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3786 .set_default(5000)
3787 .set_description(""),
c07f9fc5 3788
d2e6a577
FG
3789 Option("filestore_wbthrottle_xfs_inodes_start_flusher", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3790 .set_default(500)
3791 .set_description(""),
c07f9fc5 3792
d2e6a577
FG
3793 Option("filestore_wbthrottle_btrfs_inodes_hard_limit", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3794 .set_default(5000)
3795 .set_description(""),
c07f9fc5 3796
d2e6a577
FG
3797 Option("filestore_wbthrottle_xfs_inodes_hard_limit", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3798 .set_default(5000)
3799 .set_description(""),
c07f9fc5 3800
d2e6a577
FG
3801 Option("filestore_odsync_write", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3802 .set_default(false)
3803 .set_description(""),
c07f9fc5 3804
d2e6a577
FG
3805 Option("filestore_index_retry_probability", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3806 .set_default(0)
3807 .set_description(""),
c07f9fc5 3808
d2e6a577
FG
3809 Option("filestore_debug_inject_read_err", Option::TYPE_BOOL, Option::LEVEL_DEV)
3810 .set_default(false)
3811 .set_description(""),
c07f9fc5 3812
d2e6a577
FG
3813 Option("filestore_debug_random_read_err", Option::TYPE_FLOAT, Option::LEVEL_DEV)
3814 .set_default(0)
3815 .set_description(""),
c07f9fc5 3816
d2e6a577
FG
3817 Option("filestore_debug_omap_check", Option::TYPE_BOOL, Option::LEVEL_DEV)
3818 .set_default(false)
3819 .set_description(""),
c07f9fc5 3820
d2e6a577
FG
3821 Option("filestore_omap_header_cache_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3822 .set_default(1024)
3823 .set_description(""),
c07f9fc5 3824
d2e6a577
FG
3825 Option("filestore_max_inline_xattr_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3826 .set_default(0)
3827 .set_description(""),
c07f9fc5 3828
d2e6a577
FG
3829 Option("filestore_max_inline_xattr_size_xfs", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3830 .set_default(65536)
3831 .set_description(""),
c07f9fc5 3832
d2e6a577
FG
3833 Option("filestore_max_inline_xattr_size_btrfs", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3834 .set_default(2048)
3835 .set_description(""),
c07f9fc5 3836
d2e6a577
FG
3837 Option("filestore_max_inline_xattr_size_other", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3838 .set_default(512)
3839 .set_description(""),
c07f9fc5 3840
d2e6a577
FG
3841 Option("filestore_max_inline_xattrs", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3842 .set_default(0)
3843 .set_description(""),
c07f9fc5 3844
d2e6a577
FG
3845 Option("filestore_max_inline_xattrs_xfs", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3846 .set_default(10)
3847 .set_description(""),
c07f9fc5 3848
d2e6a577
FG
3849 Option("filestore_max_inline_xattrs_btrfs", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3850 .set_default(10)
3851 .set_description(""),
c07f9fc5 3852
d2e6a577
FG
3853 Option("filestore_max_inline_xattrs_other", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3854 .set_default(2)
3855 .set_description(""),
c07f9fc5 3856
d2e6a577
FG
3857 Option("filestore_max_xattr_value_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3858 .set_default(0)
3859 .set_description(""),
c07f9fc5 3860
d2e6a577
FG
3861 Option("filestore_max_xattr_value_size_xfs", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3862 .set_default(64<<10)
3863 .set_description(""),
c07f9fc5 3864
d2e6a577
FG
3865 Option("filestore_max_xattr_value_size_btrfs", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3866 .set_default(64<<10)
3867 .set_description(""),
c07f9fc5 3868
d2e6a577
FG
3869 Option("filestore_max_xattr_value_size_other", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3870 .set_default(1<<10)
3871 .set_description(""),
c07f9fc5 3872
d2e6a577
FG
3873 Option("filestore_sloppy_crc", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3874 .set_default(false)
3875 .set_description(""),
c07f9fc5 3876
d2e6a577
FG
3877 Option("filestore_sloppy_crc_block_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3878 .set_default(65536)
3879 .set_description(""),
c07f9fc5 3880
d2e6a577
FG
3881 Option("filestore_max_alloc_hint_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3882 .set_default(1ULL << 20)
3883 .set_description(""),
c07f9fc5 3884
d2e6a577
FG
3885 Option("filestore_max_sync_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3886 .set_default(5)
3887 .set_description(""),
c07f9fc5 3888
d2e6a577
FG
3889 Option("filestore_min_sync_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3890 .set_default(.01)
3891 .set_description(""),
c07f9fc5 3892
d2e6a577
FG
3893 Option("filestore_btrfs_snap", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3894 .set_default(true)
3895 .set_description(""),
c07f9fc5 3896
d2e6a577
FG
3897 Option("filestore_btrfs_clone_range", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3898 .set_default(true)
3899 .set_description(""),
c07f9fc5 3900
d2e6a577
FG
3901 Option("filestore_zfs_snap", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3902 .set_default(false)
3903 .set_description(""),
c07f9fc5 3904
d2e6a577
FG
3905 Option("filestore_fsync_flushes_journal_data", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3906 .set_default(false)
3907 .set_description(""),
c07f9fc5 3908
d2e6a577
FG
3909 Option("filestore_fiemap", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3910 .set_default(false)
3911 .set_description(""),
c07f9fc5 3912
d2e6a577
FG
3913 Option("filestore_punch_hole", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3914 .set_default(false)
3915 .set_description(""),
c07f9fc5 3916
d2e6a577
FG
3917 Option("filestore_seek_data_hole", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3918 .set_default(false)
3919 .set_description(""),
c07f9fc5 3920
d2e6a577
FG
3921 Option("filestore_splice", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3922 .set_default(false)
3923 .set_description(""),
c07f9fc5 3924
d2e6a577
FG
3925 Option("filestore_fadvise", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3926 .set_default(true)
3927 .set_description(""),
c07f9fc5 3928
d2e6a577
FG
3929 Option("filestore_collect_device_partition_information", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3930 .set_default(true)
3931 .set_description(""),
c07f9fc5 3932
d2e6a577
FG
3933 Option("filestore_xfs_extsize", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3934 .set_default(false)
3935 .set_description(""),
c07f9fc5 3936
d2e6a577
FG
3937 Option("filestore_journal_parallel", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3938 .set_default(false)
3939 .set_description(""),
c07f9fc5 3940
d2e6a577
FG
3941 Option("filestore_journal_writeahead", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3942 .set_default(false)
3943 .set_description(""),
c07f9fc5 3944
d2e6a577
FG
3945 Option("filestore_journal_trailing", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3946 .set_default(false)
3947 .set_description(""),
c07f9fc5 3948
d2e6a577
FG
3949 Option("filestore_queue_max_ops", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3950 .set_default(50)
3951 .set_description(""),
c07f9fc5 3952
d2e6a577
FG
3953 Option("filestore_queue_max_bytes", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3954 .set_default(100 << 20)
3955 .set_description(""),
c07f9fc5 3956
d2e6a577
FG
3957 Option("filestore_caller_concurrency", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3958 .set_default(10)
3959 .set_description(""),
c07f9fc5 3960
d2e6a577
FG
3961 Option("filestore_expected_throughput_bytes", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3962 .set_default(200 << 20)
3963 .set_description(""),
c07f9fc5 3964
d2e6a577
FG
3965 Option("filestore_expected_throughput_ops", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3966 .set_default(200)
3967 .set_description(""),
c07f9fc5 3968
d2e6a577
FG
3969 Option("filestore_queue_max_delay_multiple", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3970 .set_default(0)
3971 .set_description(""),
c07f9fc5 3972
d2e6a577
FG
3973 Option("filestore_queue_high_delay_multiple", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3974 .set_default(0)
3975 .set_description(""),
c07f9fc5 3976
d2e6a577
FG
3977 Option("filestore_queue_low_threshhold", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3978 .set_default(0.3)
3979 .set_description(""),
c07f9fc5 3980
d2e6a577
FG
3981 Option("filestore_queue_high_threshhold", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3982 .set_default(0.9)
3983 .set_description(""),
c07f9fc5 3984
d2e6a577
FG
3985 Option("filestore_op_threads", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3986 .set_default(2)
3987 .set_description(""),
c07f9fc5 3988
d2e6a577
FG
3989 Option("filestore_op_thread_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3990 .set_default(60)
3991 .set_description(""),
c07f9fc5 3992
d2e6a577
FG
3993 Option("filestore_op_thread_suicide_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3994 .set_default(180)
3995 .set_description(""),
c07f9fc5 3996
d2e6a577
FG
3997 Option("filestore_commit_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3998 .set_default(600)
3999 .set_description(""),
c07f9fc5 4000
b32b8144
FG
4001 Option("filestore_fiemap_threshold", Option::TYPE_INT, Option::LEVEL_DEV)
4002 .set_default(4_K)
d2e6a577 4003 .set_description(""),
c07f9fc5 4004
d2e6a577
FG
4005 Option("filestore_merge_threshold", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4006 .set_default(10)
4007 .set_description(""),
c07f9fc5 4008
d2e6a577
FG
4009 Option("filestore_split_multiple", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4010 .set_default(2)
4011 .set_description(""),
c07f9fc5 4012
d2e6a577
FG
4013 Option("filestore_split_rand_factor", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4014 .set_default(20)
4015 .set_description(""),
c07f9fc5 4016
d2e6a577
FG
4017 Option("filestore_update_to", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4018 .set_default(1000)
4019 .set_description(""),
c07f9fc5 4020
d2e6a577
FG
4021 Option("filestore_blackhole", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4022 .set_default(false)
4023 .set_description(""),
c07f9fc5 4024
d2e6a577
FG
4025 Option("filestore_fd_cache_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4026 .set_default(128)
4027 .set_description(""),
c07f9fc5 4028
d2e6a577
FG
4029 Option("filestore_fd_cache_shards", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4030 .set_default(16)
4031 .set_description(""),
c07f9fc5 4032
d2e6a577
FG
4033 Option("filestore_ondisk_finisher_threads", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4034 .set_default(1)
4035 .set_description(""),
c07f9fc5 4036
d2e6a577
FG
4037 Option("filestore_apply_finisher_threads", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4038 .set_default(1)
4039 .set_description(""),
c07f9fc5 4040
d2e6a577
FG
4041 Option("filestore_dump_file", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4042 .set_default("")
4043 .set_description(""),
c07f9fc5 4044
d2e6a577
FG
4045 Option("filestore_kill_at", Option::TYPE_INT, Option::LEVEL_DEV)
4046 .set_default(0)
4047 .set_description(""),
c07f9fc5 4048
d2e6a577
FG
4049 Option("filestore_inject_stall", Option::TYPE_INT, Option::LEVEL_DEV)
4050 .set_default(0)
4051 .set_description(""),
c07f9fc5 4052
d2e6a577
FG
4053 Option("filestore_fail_eio", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4054 .set_default(true)
4055 .set_description(""),
c07f9fc5 4056
d2e6a577
FG
4057 Option("filestore_debug_verify_split", Option::TYPE_BOOL, Option::LEVEL_DEV)
4058 .set_default(false)
4059 .set_description(""),
c07f9fc5 4060
d2e6a577
FG
4061 Option("journal_dio", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4062 .set_default(true)
4063 .set_description(""),
c07f9fc5 4064
d2e6a577
FG
4065 Option("journal_aio", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4066 .set_default(true)
4067 .set_description(""),
c07f9fc5 4068
d2e6a577
FG
4069 Option("journal_force_aio", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4070 .set_default(false)
4071 .set_description(""),
c07f9fc5 4072
b32b8144
FG
4073 Option("journal_block_size", Option::TYPE_INT, Option::LEVEL_DEV)
4074 .set_default(4_K)
d2e6a577 4075 .set_description(""),
c07f9fc5 4076
d2e6a577
FG
4077 Option("journal_max_corrupt_search", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4078 .set_default(10<<20)
4079 .set_description(""),
c07f9fc5 4080
d2e6a577
FG
4081 Option("journal_block_align", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4082 .set_default(true)
4083 .set_description(""),
c07f9fc5 4084
d2e6a577
FG
4085 Option("journal_write_header_frequency", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4086 .set_default(0)
4087 .set_description(""),
c07f9fc5 4088
d2e6a577
FG
4089 Option("journal_max_write_bytes", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4090 .set_default(10 << 20)
4091 .set_description(""),
c07f9fc5 4092
d2e6a577
FG
4093 Option("journal_max_write_entries", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4094 .set_default(100)
4095 .set_description(""),
c07f9fc5 4096
d2e6a577
FG
4097 Option("journal_throttle_low_threshhold", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
4098 .set_default(0.6)
4099 .set_description(""),
c07f9fc5 4100
d2e6a577
FG
4101 Option("journal_throttle_high_threshhold", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
4102 .set_default(0.9)
4103 .set_description(""),
c07f9fc5 4104
d2e6a577
FG
4105 Option("journal_throttle_high_multiple", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
4106 .set_default(0)
4107 .set_description(""),
c07f9fc5 4108
d2e6a577
FG
4109 Option("journal_throttle_max_multiple", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
4110 .set_default(0)
4111 .set_description(""),
c07f9fc5 4112
d2e6a577
FG
4113 Option("journal_align_min_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4114 .set_default(64 << 10)
4115 .set_description(""),
c07f9fc5 4116
d2e6a577
FG
4117 Option("journal_replay_from", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4118 .set_default(0)
4119 .set_description(""),
c07f9fc5 4120
3efd9988
FG
4121 Option("mgr_stats_threshold", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4122 .set_default((int64_t)PerfCountersBuilder::PRIO_USEFUL)
4123 .set_description("Lowest perfcounter priority collected by mgr")
4124 .set_long_description("Daemons only set perf counter data to the manager "
4125 "daemon if the counter has a priority higher than this.")
4126 .set_min_max((int64_t)PerfCountersBuilder::PRIO_DEBUGONLY,
4127 (int64_t)PerfCountersBuilder::PRIO_CRITICAL),
4128
d2e6a577
FG
4129 Option("journal_zero_on_create", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4130 .set_default(false)
4131 .set_description(""),
c07f9fc5 4132
d2e6a577
FG
4133 Option("journal_ignore_corruption", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4134 .set_default(false)
4135 .set_description(""),
c07f9fc5 4136
d2e6a577
FG
4137 Option("journal_discard", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4138 .set_default(false)
4139 .set_description(""),
c07f9fc5 4140
d2e6a577
FG
4141 Option("fio_dir", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4142 .set_default("/tmp/fio")
4143 .set_description(""),
c07f9fc5 4144
d2e6a577
FG
4145 Option("rados_mon_op_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
4146 .set_default(0)
4147 .set_description(""),
c07f9fc5 4148
d2e6a577
FG
4149 Option("rados_osd_op_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
4150 .set_default(0)
4151 .set_description(""),
c07f9fc5 4152
d2e6a577
FG
4153 Option("rados_tracing", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4154 .set_default(false)
4155 .set_description(""),
c07f9fc5 4156
d2e6a577
FG
4157 Option("nss_db_path", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4158 .set_default("")
4159 .set_description(""),
c07f9fc5 4160
d2e6a577
FG
4161 Option("mgr_module_path", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4162 .set_default(CEPH_PKGLIBDIR "/mgr")
3efd9988
FG
4163 .add_service("mgr")
4164 .set_description("Filesystem path to manager modules."),
c07f9fc5 4165
3efd9988
FG
4166 Option("mgr_initial_modules", Option::TYPE_STR, Option::LEVEL_BASIC)
4167 .set_default("restful status balancer")
4168 .add_service("mon")
4169 .set_description("List of manager modules to enable when the cluster is "
4170 "first started")
4171 .set_long_description("This list of module names is read by the monitor "
4172 "when the cluster is first started after installation, to populate "
4173 "the list of enabled manager modules. Subsequent updates are done using "
4174 "the 'mgr module [enable|disable]' commands. List may be comma "
4175 "or space separated."),
c07f9fc5 4176
d2e6a577
FG
4177 Option("mgr_data", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4178 .set_default("/var/lib/ceph/mgr/$cluster-$id")
3efd9988
FG
4179 .add_service("mgr")
4180 .set_description("Filesystem path to the ceph-mgr data directory, used to "
4181 "contain keyring."),
c07f9fc5 4182
d2e6a577
FG
4183 Option("mgr_tick_period", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4184 .set_default(2)
3efd9988
FG
4185 .add_service("mgr")
4186 .set_description("Period in seconds of beacon messages to monitor"),
c07f9fc5 4187
3efd9988 4188 Option("mgr_stats_period", Option::TYPE_INT, Option::LEVEL_BASIC)
d2e6a577 4189 .set_default(5)
3efd9988
FG
4190 .add_service("mgr")
4191 .set_description("Period in seconds of OSD/MDS stats reports to manager")
4192 .set_long_description("Use this setting to control the granularity of "
4193 "time series data collection from daemons. Adjust "
4194 "upwards if the manager CPU load is too high, or "
4195 "if you simply do not require the most up to date "
4196 "performance counter data."),
4197
4198 Option("mgr_client_bytes", Option::TYPE_UINT, Option::LEVEL_DEV)
b32b8144 4199 .set_default(128_M)
3efd9988 4200 .add_service("mgr"),
c07f9fc5 4201
3efd9988 4202 Option("mgr_client_messages", Option::TYPE_UINT, Option::LEVEL_DEV)
d2e6a577 4203 .set_default(512)
3efd9988 4204 .add_service("mgr"),
c07f9fc5 4205
3efd9988 4206 Option("mgr_osd_bytes", Option::TYPE_UINT, Option::LEVEL_DEV)
b32b8144 4207 .set_default(512_M)
3efd9988 4208 .add_service("mgr"),
c07f9fc5 4209
3efd9988 4210 Option("mgr_osd_messages", Option::TYPE_UINT, Option::LEVEL_DEV)
d2e6a577 4211 .set_default(8192)
3efd9988 4212 .add_service("mgr"),
c07f9fc5 4213
3efd9988 4214 Option("mgr_mds_bytes", Option::TYPE_UINT, Option::LEVEL_DEV)
b32b8144 4215 .set_default(128_M)
3efd9988 4216 .add_service("mgr"),
c07f9fc5 4217
3efd9988 4218 Option("mgr_mds_messages", Option::TYPE_UINT, Option::LEVEL_DEV)
d2e6a577 4219 .set_default(128)
3efd9988 4220 .add_service("mgr"),
c07f9fc5 4221
3efd9988 4222 Option("mgr_mon_bytes", Option::TYPE_UINT, Option::LEVEL_DEV)
b32b8144 4223 .set_default(128_M)
3efd9988 4224 .add_service("mgr"),
c07f9fc5 4225
3efd9988 4226 Option("mgr_mon_messages", Option::TYPE_UINT, Option::LEVEL_DEV)
d2e6a577 4227 .set_default(128)
3efd9988 4228 .add_service("mgr"),
c07f9fc5 4229
3efd9988 4230 Option("mgr_connect_retry_interval", Option::TYPE_FLOAT, Option::LEVEL_DEV)
d2e6a577 4231 .set_default(1.0)
3efd9988 4232 .add_service("common"),
c07f9fc5 4233
d2e6a577
FG
4234 Option("mgr_service_beacon_grace", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
4235 .set_default(60.0)
3efd9988
FG
4236 .add_service("mgr")
4237 .set_description("Period in seconds from last beacon to manager dropping "
4238 "state about a monitored service (RGW, rbd-mirror etc)"),
c07f9fc5 4239
3efd9988 4240 Option("mon_mgr_digest_period", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577 4241 .set_default(5)
3efd9988
FG
4242 .add_service("mon")
4243 .set_description("Period in seconds between monitor-to-manager "
4244 "health/status updates"),
c07f9fc5 4245
d2e6a577
FG
4246 Option("mon_mgr_beacon_grace", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4247 .set_default(30)
3efd9988
FG
4248 .add_service("mon")
4249 .set_description("Period in seconds from last beacon to monitor marking "
4250 "a manager daemon as failed"),
c07f9fc5 4251
d2e6a577
FG
4252 Option("mon_mgr_inactive_grace", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4253 .set_default(60)
3efd9988
FG
4254 .add_service("mon")
4255 .set_description("Period in seconds after cluster creation during which "
4256 "cluster may have no active manager")
4257 .set_long_description("This grace period enables the cluster to come "
4258 "up cleanly without raising spurious health check "
4259 "failures about managers that aren't online yet"),
c07f9fc5 4260
d2e6a577
FG
4261 Option("mon_mgr_mkfs_grace", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4262 .set_default(60)
3efd9988
FG
4263 .add_service("mon")
4264 .set_description("Period in seconds that the cluster may have no active "
4265 "manager before this is reported as an ERR rather than "
4266 "a WARN"),
c07f9fc5 4267
d2e6a577
FG
4268 Option("mutex_perf_counter", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4269 .set_default(false)
4270 .set_description(""),
c07f9fc5 4271
d2e6a577
FG
4272 Option("throttler_perf_counter", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4273 .set_default(true)
4274 .set_description(""),
c07f9fc5 4275
d2e6a577
FG
4276 Option("event_tracing", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4277 .set_default(false)
4278 .set_description(""),
c07f9fc5 4279
d2e6a577
FG
4280 Option("internal_safe_to_start_threads", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4281 .set_default(false)
4282 .set_description(""),
c07f9fc5 4283
d2e6a577
FG
4284 Option("debug_deliberately_leak_memory", Option::TYPE_BOOL, Option::LEVEL_DEV)
4285 .set_default(false)
4286 .set_description(""),
b32b8144
FG
4287
4288 Option("debug_asserts_on_shutdown", Option::TYPE_BOOL,Option::LEVEL_DEV)
4289 .set_default(false)
4290 .set_description("Enable certain asserts to check for refcounting bugs on shutdown; see http://tracker.ceph.com/issues/21738"),
d2e6a577
FG
4291 });
4292}
c07f9fc5 4293
d2e6a577
FG
4294std::vector<Option> get_rgw_options() {
4295 return std::vector<Option>({
4296 Option("rgw_acl_grants_max_num", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4297 .set_default(100)
b32b8144 4298 .set_description("Max number of ACL grants in a single request"),
c07f9fc5 4299
d2e6a577 4300 Option("rgw_max_chunk_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144
FG
4301 .set_default(4_M)
4302 .set_description("Set RGW max chunk size")
4303 .set_long_description(
4304 "The chunk size is the size of RADOS I/O requests that RGW sends when accessing "
4305 "data objects. RGW read and write operation will never request more than this amount "
4306 "in a single request. This also defines the rgw object head size, as head operations "
4307 "need to be atomic, and anything larger than this would require more than a single "
4308 "operation."),
c07f9fc5 4309
d2e6a577 4310 Option("rgw_put_obj_min_window_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144
FG
4311 .set_default(16_M)
4312 .set_description("The minimum RADOS write window size (in bytes).")
4313 .set_long_description(
4314 "The window size determines the total concurrent RADOS writes of a single rgw object. "
4315 "When writing an object RGW will send multiple chunks to RADOS. The total size of the "
4316 "writes does not exceed the window size. The window size can be automatically "
4317 "in order to better utilize the pipe.")
4318 .add_see_also({"rgw_put_obj_max_window_size", "rgw_max_chunk_size"}),
c07f9fc5 4319
d2e6a577 4320 Option("rgw_put_obj_max_window_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144
FG
4321 .set_default(64_M)
4322 .set_description("The maximum RADOS write window size (in bytes).")
4323 .set_long_description("The window size may be dynamically adjusted, but will not surpass this value.")
4324 .add_see_also({"rgw_put_obj_min_window_size", "rgw_max_chunk_size"}),
c07f9fc5 4325
d2e6a577 4326 Option("rgw_max_put_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144
FG
4327 .set_default(5_G)
4328 .set_description("Max size (in bytes) of regular (non multi-part) object upload.")
4329 .set_long_description(
4330 "Plain object upload is capped at this amount of data. In order to upload larger "
4331 "objects, a special upload mechanism is required. The S3 API provides the "
4332 "multi-part upload, and Swift provides DLO and SLO."),
c07f9fc5 4333
d2e6a577 4334 Option("rgw_max_put_param_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144
FG
4335 .set_default(1_M)
4336 .set_description("The maximum size (in bytes) of data input of certain RESTful requests."),
c07f9fc5 4337
3efd9988
FG
4338 Option("rgw_max_attr_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4339 .set_default(0)
4340 .set_description("The maximum length of metadata value. 0 skips the check"),
4341
4342 Option("rgw_max_attr_name_len", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4343 .set_default(0)
4344 .set_description("The maximum length of metadata name. 0 skips the check"),
4345
4346 Option("rgw_max_attrs_num_in_req", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4347 .set_default(0)
4348 .set_description("The maximum number of metadata items that can be put via single request"),
4349
b32b8144 4350 Option("rgw_override_bucket_index_max_shards", Option::TYPE_UINT, Option::LEVEL_DEV)
d2e6a577
FG
4351 .set_default(0)
4352 .set_description(""),
c07f9fc5 4353
d2e6a577
FG
4354 Option("rgw_bucket_index_max_aio", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4355 .set_default(8)
b32b8144 4356 .set_description("Max number of concurrent RADOS requests when handling bucket shards."),
c07f9fc5 4357
d2e6a577
FG
4358 Option("rgw_enable_quota_threads", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4359 .set_default(true)
b32b8144
FG
4360 .set_description("Enables the quota maintenance thread.")
4361 .set_long_description(
4362 "The quota maintenance thread is responsible for quota related maintenance work. "
4363 "The thread itself can be disabled, but in order for quota to work correctly, at "
4364 "least one RGW in each zone needs to have this thread running. Having the thread "
4365 "enabled on multiple RGW processes within the same zone can spread "
4366 "some of the maintenance work between them.")
4367 .add_see_also({"rgw_enable_gc_threads", "rgw_enable_lc_threads"}),
c07f9fc5 4368
d2e6a577
FG
4369 Option("rgw_enable_gc_threads", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4370 .set_default(true)
b32b8144
FG
4371 .set_description("Enables the garbage collection maintenance thread.")
4372 .set_long_description(
4373 "The garbage collection maintenance thread is responsible for garbage collector "
4374 "maintenance work. The thread itself can be disabled, but in order for garbage "
4375 "collection to work correctly, at least one RGW in each zone needs to have this "
4376 "thread running. Having the thread enabled on multiple RGW processes within the "
4377 "same zone can spread some of the maintenance work between them.")
4378 .add_see_also({"rgw_enable_quota_threads", "rgw_enable_lc_threads"}),
c07f9fc5 4379
d2e6a577
FG
4380 Option("rgw_enable_lc_threads", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4381 .set_default(true)
b32b8144
FG
4382 .set_description("Enables the lifecycle maintenance thread. This is required on at least on rgw for each zone.")
4383 .set_long_description(
4384 "The lifecycle maintenance thread is responsible for lifecycle related maintenance "
4385 "work. The thread itself can be disabled, but in order for lifecycle to work "
4386 "correctly, at least one RGW in each zone needs to have this thread running. Having"
4387 "the thread enabled on multiple RGW processes within the same zone can spread "
4388 "some of the maintenance work between them.")
4389 .add_see_also({"rgw_enable_gc_threads", "rgw_enable_quota_threads"}),
c07f9fc5 4390
d2e6a577
FG
4391 Option("rgw_data", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4392 .set_default("/var/lib/ceph/radosgw/$cluster-$id")
b32b8144
FG
4393 .set_description("Alternative location for RGW configuration.")
4394 .set_long_description(
4395 "If this is set, the different Ceph system configurables (such as the keyring file "
4396 "will be located in the path that is specified here. "),
c07f9fc5 4397
d2e6a577
FG
4398 Option("rgw_enable_apis", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4399 .set_default("s3, s3website, swift, swift_auth, admin")
b32b8144 4400 .set_description("A list of set of RESTful APIs that rgw handles."),
c07f9fc5 4401
d2e6a577
FG
4402 Option("rgw_cache_enabled", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4403 .set_default(true)
b32b8144
FG
4404 .set_description("Enable RGW metadata cache.")
4405 .set_long_description(
4406 "The metadata cache holds metadata entries that RGW requires for processing "
4407 "requests. Metadata entries can be user info, bucket info, and bucket instance "
4408 "info. If not found in the cache, entries will be fetched from the backing "
4409 "RADOS store.")
4410 .add_see_also("rgw_cache_lru_size"),
c07f9fc5 4411
d2e6a577
FG
4412 Option("rgw_cache_lru_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4413 .set_default(10000)
b32b8144
FG
4414 .set_description("Max number of items in RGW metadata cache.")
4415 .set_long_description(
4416 "When full, the RGW metadata cache evicts least recently used entries.")
4417 .add_see_also("rgw_cache_enabled"),
c07f9fc5 4418
d2e6a577
FG
4419 Option("rgw_socket_path", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4420 .set_default("")
b32b8144
FG
4421 .set_description("RGW FastCGI socket path (for FastCGI over Unix domain sockets).")
4422 .add_see_also("rgw_fcgi_socket_backlog"),
c07f9fc5 4423
d2e6a577
FG
4424 Option("rgw_host", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4425 .set_default("")
b32b8144
FG
4426 .set_description("RGW FastCGI host name (for FastCGI over TCP)")
4427 .add_see_also({"rgw_port", "rgw_fcgi_socket_backlog"}),
c07f9fc5 4428
b32b8144 4429 Option("rgw_port", Option::TYPE_STR, Option::LEVEL_BASIC)
d2e6a577 4430 .set_default("")
b32b8144
FG
4431 .set_description("RGW FastCGI port number (for FastCGI over TCP)")
4432 .add_see_also({"rgw_host", "rgw_fcgi_socket_backlog"}),
c07f9fc5 4433
d2e6a577
FG
4434 Option("rgw_dns_name", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4435 .set_default("")
b32b8144
FG
4436 .set_description("The host name that RGW uses.")
4437 .set_long_description(
4438 "This is Needed for virtual hosting of buckets to work properly, unless configured "
4439 "via zonegroup configuration."),
c07f9fc5 4440
d2e6a577
FG
4441 Option("rgw_dns_s3website_name", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4442 .set_default("")
b32b8144
FG
4443 .set_description("The host name that RGW uses for static websites (S3)")
4444 .set_long_description(
4445 "This is needed for virtual hosting of buckets, unless configured via zonegroup "
4446 "configuration."),
c07f9fc5 4447
d2e6a577
FG
4448 Option("rgw_content_length_compat", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4449 .set_default(false)
b32b8144
FG
4450 .set_description("Multiple content length headers compatibility")
4451 .set_long_description(
4452 "Try to handle requests with abiguous multiple content length headers "
4453 "(Content-Length, Http-Content-Length)."),
c07f9fc5 4454
d2e6a577
FG
4455 Option("rgw_lifecycle_work_time", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4456 .set_default("00:00-06:00")
b32b8144
FG
4457 .set_description("Lifecycle allowed work time")
4458 .set_long_description("Local time window in which the lifecycle maintenance thread can work."),
c07f9fc5 4459
b32b8144 4460 Option("rgw_lc_lock_max_time", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577
FG
4461 .set_default(60)
4462 .set_description(""),
c07f9fc5 4463
d2e6a577
FG
4464 Option("rgw_lc_max_objs", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4465 .set_default(32)
b32b8144
FG
4466 .set_description("Number of lifecycle data shards")
4467 .set_long_description(
4468 "Number of RADOS objects to use for storing lifecycle index. This can affect "
4469 "concurrency of lifecycle maintenance, but requires multiple RGW processes "
4470 "running on the zone to be utilized."),
c07f9fc5 4471
d2e6a577
FG
4472 Option("rgw_lc_debug_interval", Option::TYPE_INT, Option::LEVEL_DEV)
4473 .set_default(-1)
4474 .set_description(""),
c07f9fc5 4475
d2e6a577
FG
4476 Option("rgw_mp_lock_max_time", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4477 .set_default(600)
b32b8144
FG
4478 .set_description("Multipart upload max completion time")
4479 .set_long_description(
4480 "Time length to allow completion of a multipart upload operation. This is done "
4481 "to prevent concurrent completions on the same object with the same upload id."),
c07f9fc5 4482
b32b8144 4483 Option("rgw_script_uri", Option::TYPE_STR, Option::LEVEL_DEV)
d2e6a577
FG
4484 .set_default("")
4485 .set_description(""),
c07f9fc5 4486
b32b8144 4487 Option("rgw_request_uri", Option::TYPE_STR, Option::LEVEL_DEV)
d2e6a577
FG
4488 .set_default("")
4489 .set_description(""),
c07f9fc5 4490
d2e6a577
FG
4491 Option("rgw_swift_url", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4492 .set_default("")
b32b8144
FG
4493 .set_description("Swift-auth storage URL")
4494 .set_long_description(
4495 "Used in conjunction with rgw internal swift authentication. This affects the "
4496 "X-Storage-Url response header value.")
4497 .add_see_also("rgw_swift_auth_entry"),
c07f9fc5 4498
d2e6a577
FG
4499 Option("rgw_swift_url_prefix", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4500 .set_default("swift")
b32b8144
FG
4501 .set_description("Swift URL prefix")
4502 .set_long_description("The URL path prefix for swift requests."),
c07f9fc5 4503
d2e6a577
FG
4504 Option("rgw_swift_auth_url", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4505 .set_default("")
b32b8144
FG
4506 .set_description("Swift auth URL")
4507 .set_long_description(
4508 "Default url to which RGW connects and verifies tokens for v1 auth (if not using "
4509 "internal swift auth)."),
c07f9fc5 4510
d2e6a577
FG
4511 Option("rgw_swift_auth_entry", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4512 .set_default("auth")
b32b8144
FG
4513 .set_description("Swift auth URL prefix")
4514 .set_long_description("URL path prefix for internal swift auth requests.")
4515 .add_see_also("rgw_swift_url"),
c07f9fc5 4516
d2e6a577
FG
4517 Option("rgw_swift_tenant_name", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4518 .set_default("")
b32b8144
FG
4519 .set_description("Swift tenant name")
4520 .set_long_description("Tenant name that is used when constructing the swift path.")
4521 .add_see_also("rgw_swift_account_in_url"),
c07f9fc5 4522
d2e6a577
FG
4523 Option("rgw_swift_account_in_url", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4524 .set_default(false)
b32b8144
FG
4525 .set_description("Swift account encoded in URL")
4526 .set_long_description("Whether the swift account is encoded in the uri path (AUTH_<account>).")
4527 .add_see_also("rgw_swift_tenant_name"),
c07f9fc5 4528
d2e6a577
FG
4529 Option("rgw_swift_enforce_content_length", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4530 .set_default(false)
b32b8144
FG
4531 .set_description("Send content length when listing containers (Swift)")
4532 .set_long_description(
4533 "Whether content length header is needed when listing containers. When this is "
4534 "set to false, RGW will send extra info for each entry in the response."),
c07f9fc5 4535
b32b8144 4536 Option("rgw_keystone_url", Option::TYPE_STR, Option::LEVEL_BASIC)
d2e6a577 4537 .set_default("")
b32b8144 4538 .set_description("The URL to the Keystone server."),
c07f9fc5 4539
d2e6a577
FG
4540 Option("rgw_keystone_admin_token", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4541 .set_default("")
b32b8144 4542 .set_description("The admin token (shared secret) that is used for the Keystone requests."),
c07f9fc5 4543
d2e6a577
FG
4544 Option("rgw_keystone_admin_user", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4545 .set_default("")
b32b8144 4546 .set_description("Keystone admin user."),
c07f9fc5 4547
d2e6a577
FG
4548 Option("rgw_keystone_admin_password", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4549 .set_default("")
b32b8144 4550 .set_description("Keystone admin password."),
c07f9fc5 4551
d2e6a577
FG
4552 Option("rgw_keystone_admin_tenant", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4553 .set_default("")
b32b8144 4554 .set_description("Keystone admin user tenant."),
c07f9fc5 4555
d2e6a577
FG
4556 Option("rgw_keystone_admin_project", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4557 .set_default("")
b32b8144 4558 .set_description("Keystone admin user project (for Keystone v3)."),
c07f9fc5 4559
d2e6a577
FG
4560 Option("rgw_keystone_admin_domain", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4561 .set_default("")
b32b8144 4562 .set_description("Keystone admin user domain (for Keystone v3)."),
c07f9fc5 4563
d2e6a577
FG
4564 Option("rgw_keystone_barbican_user", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4565 .set_default("")
b32b8144 4566 .set_description("Keystone user to access barbican secrets."),
c07f9fc5 4567
d2e6a577
FG
4568 Option("rgw_keystone_barbican_password", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4569 .set_default("")
b32b8144 4570 .set_description("Keystone password for barbican user."),
c07f9fc5 4571
d2e6a577
FG
4572 Option("rgw_keystone_barbican_tenant", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4573 .set_default("")
b32b8144 4574 .set_description("Keystone barbican user tenant (Keystone v2.0)."),
c07f9fc5 4575
d2e6a577
FG
4576 Option("rgw_keystone_barbican_project", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4577 .set_default("")
b32b8144 4578 .set_description("Keystone barbican user project (Keystone v3)."),
c07f9fc5 4579
d2e6a577
FG
4580 Option("rgw_keystone_barbican_domain", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4581 .set_default("")
b32b8144 4582 .set_description("Keystone barbican user domain."),
c07f9fc5 4583
d2e6a577
FG
4584 Option("rgw_keystone_api_version", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4585 .set_default(2)
b32b8144 4586 .set_description("Version of Keystone API to use (2 or 3)."),
c07f9fc5 4587
d2e6a577
FG
4588 Option("rgw_keystone_accepted_roles", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4589 .set_default("Member, admin")
b32b8144 4590 .set_description("Only users with one of these roles will be served when doing Keystone authentication."),
c07f9fc5 4591
d2e6a577
FG
4592 Option("rgw_keystone_accepted_admin_roles", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4593 .set_default("")
b32b8144 4594 .set_description("List of roles allowing user to gain admin privileges (Keystone)."),
c07f9fc5 4595
d2e6a577
FG
4596 Option("rgw_keystone_token_cache_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4597 .set_default(10000)
b32b8144
FG
4598 .set_description("Keystone token cache size")
4599 .set_long_description(
4600 "Max number of Keystone tokens that will be cached. Token that is not cached "
4601 "requires RGW to access the Keystone server when authenticating."),
c07f9fc5 4602
d2e6a577 4603 Option("rgw_keystone_revocation_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144
FG
4604 .set_default(15_min)
4605 .set_description("Keystone cache revocation interval")
4606 .set_long_description(
4607 "Time (in seconds) that RGW waits between requests to Keystone for getting a list "
4608 "of revoked tokens. A revoked token might still be considered valid by RGW for "
4609 "this amount of time."),
c07f9fc5 4610
d2e6a577
FG
4611 Option("rgw_keystone_verify_ssl", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4612 .set_default(true)
b32b8144 4613 .set_description("Should RGW verify the Keystone server SSL certificate."),
c07f9fc5 4614
d2e6a577
FG
4615 Option("rgw_keystone_implicit_tenants", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4616 .set_default(false)
b32b8144
FG
4617 .set_description("RGW Keystone implicit tenants creation")
4618 .set_long_description(
4619 "Implicitly create new users in their own tenant with the same name when "
4620 "authenticating via Keystone."),
c07f9fc5 4621
d2e6a577
FG
4622 Option("rgw_cross_domain_policy", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4623 .set_default("<allow-access-from domain=\"*\" secure=\"false\" />")
b32b8144
FG
4624 .set_description("RGW handle cross domain policy")
4625 .set_long_description("Returned cross domain policy when accessing the crossdomain.xml "
4626 "resource (Swift compatiility)."),
c07f9fc5 4627
b32b8144 4628 Option("rgw_healthcheck_disabling_path", Option::TYPE_STR, Option::LEVEL_DEV)
d2e6a577 4629 .set_default("")
b32b8144 4630 .set_description("Swift health check api can be disabled if a file can be accessed in this path."),
c07f9fc5 4631
d2e6a577
FG
4632 Option("rgw_s3_auth_use_rados", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4633 .set_default(true)
b32b8144 4634 .set_description("Should S3 authentication use credentials stored in RADOS backend."),
c07f9fc5 4635
d2e6a577
FG
4636 Option("rgw_s3_auth_use_keystone", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4637 .set_default(false)
b32b8144 4638 .set_description("Should S3 authentication use Keystone."),
c07f9fc5 4639
d2e6a577
FG
4640 Option("rgw_barbican_url", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4641 .set_default("")
b32b8144 4642 .set_description("URL to barbican server."),
c07f9fc5 4643
d2e6a577
FG
4644 Option("rgw_ldap_uri", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4645 .set_default("ldaps://<ldap.your.domain>")
b32b8144 4646 .set_description("Space-separated list of LDAP servers in URI format."),
c07f9fc5 4647
d2e6a577
FG
4648 Option("rgw_ldap_binddn", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4649 .set_default("uid=admin,cn=users,dc=example,dc=com")
b32b8144 4650 .set_description("LDAP entry RGW will bind with (user match)."),
c07f9fc5 4651
d2e6a577
FG
4652 Option("rgw_ldap_searchdn", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4653 .set_default("cn=users,cn=accounts,dc=example,dc=com")
b32b8144 4654 .set_description("LDAP search base (basedn)."),
c07f9fc5 4655
d2e6a577
FG
4656 Option("rgw_ldap_dnattr", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4657 .set_default("uid")
b32b8144 4658 .set_description("LDAP attribute containing RGW user names (to form binddns)."),
c07f9fc5 4659
d2e6a577
FG
4660 Option("rgw_ldap_secret", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4661 .set_default("/etc/openldap/secret")
b32b8144 4662 .set_description("Path to file containing credentials for rgw_ldap_binddn."),
c07f9fc5 4663
d2e6a577
FG
4664 Option("rgw_s3_auth_use_ldap", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4665 .set_default(false)
b32b8144 4666 .set_description("Should S3 authentication use LDAP."),
c07f9fc5 4667
d2e6a577
FG
4668 Option("rgw_ldap_searchfilter", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4669 .set_default("")
b32b8144 4670 .set_description("LDAP search filter."),
c07f9fc5 4671
d2e6a577
FG
4672 Option("rgw_admin_entry", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4673 .set_default("admin")
b32b8144 4674 .set_description("Path prefix to be used for accessing RGW RESTful admin API."),
c07f9fc5 4675
d2e6a577
FG
4676 Option("rgw_enforce_swift_acls", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4677 .set_default(true)
b32b8144
FG
4678 .set_description("RGW enforce swift acls")
4679 .set_long_description(
4680 "Should RGW enforce special Swift-only ACLs. Swift has a special ACL that gives "
4681 "permission to access all objects in a container."),
c07f9fc5 4682
d2e6a577 4683 Option("rgw_swift_token_expiration", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144
FG
4684 .set_default(1_day)
4685 .set_description("Expiration time (in seconds) for token generated through RGW Swift auth."),
c07f9fc5 4686
d2e6a577
FG
4687 Option("rgw_print_continue", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4688 .set_default(true)
b32b8144
FG
4689 .set_description("RGW support of 100-continue")
4690 .set_long_description(
4691 "Should RGW explicitly send 100 (continue) responses. This is mainly relevant when "
4692 "using FastCGI, as some FastCGI modules do not fully support this feature."),
c07f9fc5 4693
d2e6a577
FG
4694 Option("rgw_print_prohibited_content_length", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4695 .set_default(false)
b32b8144
FG
4696 .set_description("RGW RFC-7230 compatibility")
4697 .set_long_description(
4698 "Specifies whether RGW violates RFC 7230 and sends Content-Length with 204 or 304 "
4699 "statuses."),
c07f9fc5 4700
d2e6a577
FG
4701 Option("rgw_remote_addr_param", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4702 .set_default("REMOTE_ADDR")
b32b8144
FG
4703 .set_description("HTTP header that holds the remote address in incoming requests.")
4704 .set_long_description(
4705 "RGW will use this header to extract requests origin. When RGW runs behind "
4706 "a reverse proxy, the remote address header will point at the proxy's address "
4707 "and not at the originator's address. Therefore it is sometimes possible to "
4708 "have the proxy add the originator's address in a separate HTTP header, which "
4709 "will allow RGW to log it correctly."
4710 )
4711 .add_see_also("rgw_enable_ops_log"),
c07f9fc5 4712
b32b8144 4713 Option("rgw_op_thread_timeout", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577 4714 .set_default(10*60)
b32b8144 4715 .set_description("Timeout for async rados coroutine operations."),
c07f9fc5 4716
b32b8144 4717 Option("rgw_op_thread_suicide_timeout", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577
FG
4718 .set_default(0)
4719 .set_description(""),
c07f9fc5 4720
b32b8144 4721 Option("rgw_thread_pool_size", Option::TYPE_INT, Option::LEVEL_BASIC)
d2e6a577 4722 .set_default(100)
b32b8144
FG
4723 .set_description("RGW requests handling thread pool size.")
4724 .set_long_description(
4725 "This parameter determines the number of concurrent requests RGW can process "
4726 "when using either the civetweb, or the fastcgi frontends. The higher this "
4727 "number is, RGW will be able to deal with more concurrent requests at the "
4728 "cost of more resource utilization."),
c07f9fc5 4729
d2e6a577
FG
4730 Option("rgw_num_control_oids", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4731 .set_default(8)
b32b8144
FG
4732 .set_description("Number of control objects used for cross-RGW communication.")
4733 .set_long_description(
4734 "RGW uses certain control objects to send messages between different RGW "
4735 "processes running on the same zone. These messages include metadata cache "
4736 "invalidation info that is being sent when metadata is modified (such as "
4737 "user or bucket information). A higher number of control objects allows "
4738 "better concurrency of these messages, at the cost of more resource "
4739 "utilization."),
c07f9fc5 4740
d2e6a577
FG
4741 Option("rgw_num_rados_handles", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4742 .set_default(1)
b32b8144
FG
4743 .set_description("Number of librados handles that RGW uses.")
4744 .set_long_description(
4745 "This param affects the number of separate librados handles it uses to "
4746 "connect to the RADOS backend, which directly affects the number of connections "
4747 "RGW will have to each OSD. A higher number affects resource utilization."),
c07f9fc5 4748
d2e6a577
FG
4749 Option("rgw_verify_ssl", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4750 .set_default(true)
b32b8144
FG
4751 .set_description("Should RGW verify SSL when connecing to a remote HTTP server")
4752 .set_long_description(
4753 "RGW can send requests to other RGW servers (e.g., in multi-site sync work). "
4754 "This configurable selects whether RGW should verify the certificate for "
4755 "the remote peer and host.")
4756 .add_see_also("rgw_keystone_verify_ssl"),
c07f9fc5 4757
d2e6a577
FG
4758 Option("rgw_nfs_lru_lanes", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4759 .set_default(5)
4760 .set_description(""),
c07f9fc5 4761
d2e6a577
FG
4762 Option("rgw_nfs_lru_lane_hiwat", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4763 .set_default(911)
4764 .set_description(""),
c07f9fc5 4765
d2e6a577
FG
4766 Option("rgw_nfs_fhcache_partitions", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4767 .set_default(3)
4768 .set_description(""),
c07f9fc5 4769
d2e6a577
FG
4770 Option("rgw_nfs_fhcache_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4771 .set_default(2017)
4772 .set_description(""),
c07f9fc5 4773
d2e6a577
FG
4774 Option("rgw_nfs_namespace_expire_secs", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4775 .set_default(300)
4776 .set_min(1)
4777 .set_description(""),
4778
4779 Option("rgw_nfs_max_gc", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4780 .set_default(300)
4781 .set_min(1)
4782 .set_description(""),
4783
4784 Option("rgw_nfs_write_completion_interval_s", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4785 .set_default(10)
4786 .set_description(""),
4787
4788 Option("rgw_zone", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4789 .set_default("")
b32b8144
FG
4790 .set_description("Zone name")
4791 .add_see_also({"rgw_zonegroup", "rgw_realm"}),
d2e6a577
FG
4792
4793 Option("rgw_zone_root_pool", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4794 .set_default(".rgw.root")
b32b8144
FG
4795 .set_description("Zone root pool name")
4796 .set_long_description(
4797 "The zone root pool, is the pool where the RGW zone configuration located."
4798 )
4799 .add_see_also({"rgw_zonegroup_root_pool", "rgw_realm_root_pool", "rgw_period_root_pool"}),
d2e6a577
FG
4800
4801 Option("rgw_default_zone_info_oid", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4802 .set_default("default.zone")
b32b8144
FG
4803 .set_description("Default zone info object id")
4804 .set_long_description(
4805 "Name of the RADOS object that holds the default zone information."
4806 ),
d2e6a577
FG
4807
4808 Option("rgw_region", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4809 .set_default("")
b32b8144
FG
4810 .set_description("Region name")
4811 .set_long_description(
4812 "Obsolete config option. The rgw_zonegroup option should be used instead.")
4813 .add_see_also("rgw_zonegroup"),
d2e6a577
FG
4814
4815 Option("rgw_region_root_pool", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4816 .set_default(".rgw.root")
b32b8144
FG
4817 .set_description("Region root pool")
4818 .set_long_description(
4819 "Obsolete config option. The rgw_zonegroup_root_pool should be used instead.")
4820 .add_see_also("rgw_zonegroup_root_pool"),
d2e6a577
FG
4821
4822 Option("rgw_default_region_info_oid", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4823 .set_default("default.region")
b32b8144
FG
4824 .set_description("Default region info object id")
4825 .set_long_description(
4826 "Obsolete config option. The rgw_default_zonegroup_info_oid should be used instead.")
4827 .add_see_also("rgw_default_zonegroup_info_oid"),
d2e6a577
FG
4828
4829 Option("rgw_zonegroup", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4830 .set_default("")
b32b8144
FG
4831 .set_description("Zonegroup name")
4832 .add_see_also({"rgw_zone", "rgw_realm"}),
d2e6a577
FG
4833
4834 Option("rgw_zonegroup_root_pool", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4835 .set_default(".rgw.root")
b32b8144
FG
4836 .set_description("Zonegroup root pool")
4837 .set_long_description(
4838 "The zonegroup root pool, is the pool where the RGW zonegroup configuration located."
4839 )
4840 .add_see_also({"rgw_zone_root_pool", "rgw_realm_root_pool", "rgw_period_root_pool"}),
d2e6a577
FG
4841
4842 Option("rgw_default_zonegroup_info_oid", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4843 .set_default("default.zonegroup")
4844 .set_description(""),
4845
4846 Option("rgw_realm", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4847 .set_default("")
4848 .set_description(""),
4849
4850 Option("rgw_realm_root_pool", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4851 .set_default(".rgw.root")
b32b8144
FG
4852 .set_description("Realm root pool")
4853 .set_long_description(
4854 "The realm root pool, is the pool where the RGW realm configuration located."
4855 )
4856 .add_see_also({"rgw_zonegroup_root_pool", "rgw_zone_root_pool", "rgw_period_root_pool"}),
d2e6a577
FG
4857
4858 Option("rgw_default_realm_info_oid", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4859 .set_default("default.realm")
4860 .set_description(""),
4861
4862 Option("rgw_period_root_pool", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4863 .set_default(".rgw.root")
b32b8144
FG
4864 .set_description("Period root pool")
4865 .set_long_description(
4866 "The realm root pool, is the pool where the RGW realm configuration located."
4867 )
4868 .add_see_also({"rgw_zonegroup_root_pool", "rgw_zone_root_pool", "rgw_realm_root_pool"}),
d2e6a577 4869
b32b8144 4870 Option("rgw_period_latest_epoch_info_oid", Option::TYPE_STR, Option::LEVEL_DEV)
d2e6a577
FG
4871 .set_default(".latest_epoch")
4872 .set_description(""),
4873
4874 Option("rgw_log_nonexistent_bucket", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4875 .set_default(false)
b32b8144
FG
4876 .set_description("Should RGW log operations on bucket that does not exist")
4877 .set_long_description(
4878 "This config option applies to the ops log. When this option is set, the ops log "
4879 "will log operations that are sent to non existing buckets. These operations "
4880 "inherently fail, and do not correspond to a specific user.")
4881 .add_see_also("rgw_enable_ops_log"),
d2e6a577
FG
4882
4883 Option("rgw_log_object_name", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4884 .set_default("%Y-%m-%d-%H-%i-%n")
b32b8144
FG
4885 .set_description("Ops log object name format")
4886 .set_long_description(
4887 "Defines the format of the RADOS objects names that ops log uses to store ops "
4888 "log data")
4889 .add_see_also("rgw_enable_ops_log"),
d2e6a577
FG
4890
4891 Option("rgw_log_object_name_utc", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4892 .set_default(false)
b32b8144
FG
4893 .set_description("Should ops log object name based on UTC")
4894 .set_long_description(
4895 "If set, the names of the RADOS objects that hold the ops log data will be based "
4896 "on UTC time zone. If not set, it will use the local time zone.")
4897 .add_see_also({"rgw_enable_ops_log", "rgw_log_object_name"}),
d2e6a577
FG
4898
4899 Option("rgw_usage_max_shards", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4900 .set_default(32)
b32b8144
FG
4901 .set_description("Number of shards for usage log.")
4902 .set_long_description(
4903 "The number of RADOS objects that RGW will use in order to store the usage log "
4904 "data.")
4905 .add_see_also("rgw_enable_usage_log"),
d2e6a577
FG
4906
4907 Option("rgw_usage_max_user_shards", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4908 .set_default(1)
4909 .set_min(1)
b32b8144
FG
4910 .set_description("Number of shards for single user in usage log")
4911 .set_long_description(
4912 "The number of shards that a single user will span over in the usage log.")
4913 .add_see_also("rgw_enable_usage_log"),
c07f9fc5 4914
d2e6a577
FG
4915 Option("rgw_enable_ops_log", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4916 .set_default(false)
b32b8144
FG
4917 .set_description("Enable ops log")
4918 .add_see_also({"rgw_log_nonexistent_bucket", "rgw_log_object_name", "rgw_ops_log_rados",
4919 "rgw_ops_log_socket_path"}),
c07f9fc5 4920
d2e6a577
FG
4921 Option("rgw_enable_usage_log", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4922 .set_default(false)
b32b8144
FG
4923 .set_description("Enable usage log")
4924 .add_see_also("rgw_usage_max_shards"),
c07f9fc5 4925
d2e6a577
FG
4926 Option("rgw_ops_log_rados", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4927 .set_default(true)
b32b8144
FG
4928 .set_description("Use RADOS for ops log")
4929 .set_long_description(
4930 "If set, RGW will store ops log information in RADOS.")
4931 .add_see_also({"rgw_enable_ops_log"}),
c07f9fc5 4932
d2e6a577
FG
4933 Option("rgw_ops_log_socket_path", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4934 .set_default("")
b32b8144
FG
4935 .set_description("Unix domain socket path for ops log.")
4936 .set_long_description(
4937 "Path to unix domain socket that RGW will listen for connection on. When connected, "
4938 "RGW will send ops log data through it.")
4939 .add_see_also({"rgw_enable_ops_log", "rgw_ops_log_data_backlog"}),
c07f9fc5 4940
d2e6a577
FG
4941 Option("rgw_ops_log_data_backlog", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4942 .set_default(5 << 20)
b32b8144
FG
4943 .set_description("Ops log socket backlog")
4944 .set_long_description(
4945 "Maximum amount of data backlog that RGW can keep when ops log is configured to "
4946 "send info through unix domain socket. When data backlog is higher than this, "
4947 "ops log entries will be lost. In order to avoid ops log information loss, the "
4948 "listener needs to clear data (by reading it) quickly enough.")
4949 .add_see_also({"rgw_enable_ops_log", "rgw_ops_log_socket_path"}),
c07f9fc5 4950
d2e6a577
FG
4951 Option("rgw_fcgi_socket_backlog", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4952 .set_default(1024)
b32b8144
FG
4953 .set_description("FastCGI socket connection backlog")
4954 .set_long_description(
4955 "Size of FastCGI connection backlog. This reflects the maximum number of new "
4956 "connection requests that RGW can handle concurrently without dropping any. ")
4957 .add_see_also({"rgw_host", "rgw_socket_path"}),
c07f9fc5 4958
d2e6a577
FG
4959 Option("rgw_usage_log_flush_threshold", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4960 .set_default(1024)
b32b8144
FG
4961 .set_description("Number of entries in usage log before flushing")
4962 .set_long_description(
4963 "This is the max number of entries that will be held in the usage log, before it "
4964 "will be flushed to the backend. Note that the usage log is periodically flushed, "
4965 "even if number of entries does not reach this threshold. A usage log entry "
4966 "corresponds to one or more operations on a single bucket.i")
4967 .add_see_also({"rgw_enable_usage_log", "rgw_usage_log_tick_interval"}),
c07f9fc5 4968
d2e6a577
FG
4969 Option("rgw_usage_log_tick_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4970 .set_default(30)
b32b8144
FG
4971 .set_description("Number of seconds between usage log flush cycles")
4972 .set_long_description(
4973 "The number of seconds between consecutive usage log flushes. The usage log will "
4974 "also flush itself to the backend if the number of pending entries reaches a "
4975 "certain threshold.")
4976 .add_see_also({"rgw_enable_usage_log", "rgw_usage_log_flush_threshold"}),
c07f9fc5 4977
b32b8144 4978 Option("rgw_init_timeout", Option::TYPE_INT, Option::LEVEL_BASIC)
d2e6a577 4979 .set_default(300)
b32b8144
FG
4980 .set_description("Initialization timeout")
4981 .set_long_description(
4982 "The time length (in seconds) that RGW will allow for its initialization. RGW "
4983 "process will give up and quit if initialization is not complete after this amount "
4984 "of time."),
c07f9fc5 4985
b32b8144 4986 Option("rgw_mime_types_file", Option::TYPE_STR, Option::LEVEL_BASIC)
d2e6a577 4987 .set_default("/etc/mime.types")
b32b8144
FG
4988 .set_description("Path to local mime types file")
4989 .set_long_description(
4990 "The mime types file is needed in Swift when uploading an object. If object's "
4991 "content type is not specified, RGW will use data from this file to assign "
4992 "a content type to the object."),
c07f9fc5 4993
d2e6a577
FG
4994 Option("rgw_gc_max_objs", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4995 .set_default(32)
b32b8144
FG
4996 .set_description("Number of shards for garbage collector data")
4997 .set_long_description(
4998 "The number of garbage collector data shards, is the number of RADOS objects that "
4999 "RGW will use to store the garbage collection information on.")
5000 .add_see_also({"rgw_gc_obj_min_wait", "rgw_gc_processor_max_time", "rgw_gc_processor_period"}),
c07f9fc5 5001
d2e6a577 5002 Option("rgw_gc_obj_min_wait", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144
FG
5003 .set_default(2_hr)
5004 .set_description("Garabge collection object expiration time")
5005 .set_long_description(
5006 "The length of time (in seconds) that the RGW collector will wait before purging "
5007 "a deleted object's data. RGW will not remove object immediately, as object could "
5008 "still have readers. A mechanism exists to increase the object's expiration time "
5009 "when it's being read.")
5010 .add_see_also({"rgw_gc_max_objs", "rgw_gc_processor_max_time", "rgw_gc_processor_period"}),
c07f9fc5 5011
d2e6a577 5012 Option("rgw_gc_processor_max_time", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144
FG
5013 .set_default(1_hr)
5014 .set_description("Length of time GC processor can lease shard")
5015 .set_long_description(
5016 "Garbage collection thread in RGW process holds a lease on its data shards. These "
5017 "objects contain the information about the objects that need to be removed. RGW "
5018 "takes a lease in order to prevent multiple RGW processes from handling the same "
5019 "objects concurrently. This time signifies that maximum amount of time that RGW "
5020 "is allowed to hold that lease. In the case where RGW goes down uncleanly, this "
5021 "is the amount of time where processing of that data shard will be blocked.")
5022 .add_see_also({"rgw_gc_max_objs", "rgw_gc_obj_min_wait", "rgw_gc_processor_period"}),
c07f9fc5 5023
d2e6a577 5024 Option("rgw_gc_processor_period", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144
FG
5025 .set_default(1_hr)
5026 .set_description("Garbage collector cycle run time")
5027 .set_long_description(
5028 "The amount of time between the start of consecutive runs of the garbage collector "
5029 "threads. If garbage collector runs takes more than this period, it will not wait "
5030 "before running again.")
5031 .add_see_also({"rgw_gc_max_objs", "rgw_gc_obj_min_wait", "rgw_gc_processor_max_time"}),
c07f9fc5 5032
d2e6a577
FG
5033 Option("rgw_s3_success_create_obj_status", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5034 .set_default(0)
b32b8144
FG
5035 .set_description("HTTP return code override for object creation")
5036 .set_long_description(
5037 "If not zero, this is the HTTP return code that will be returned on a succesful S3 "
5038 "object creation."),
c07f9fc5 5039
d2e6a577
FG
5040 Option("rgw_resolve_cname", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5041 .set_default(false)
b32b8144
FG
5042 .set_description("Support vanity domain names via CNAME")
5043 .set_long_description(
5044 "If true, RGW will query DNS when detecting that it's serving a request that was "
5045 "sent to a host in another domain. If a CNAME record is configured for that domain "
5046 "it will use it instead. This gives user to have the ability of creating a unique "
5047 "domain of their own to point at data in their bucket."),
c07f9fc5 5048
d2e6a577 5049 Option("rgw_obj_stripe_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144
FG
5050 .set_default(4_M)
5051 .set_description("RGW object stripe size")
5052 .set_long_description(
5053 "The size of an object stripe for RGW objects. This is the maximum size a backing "
5054 "RADOS object will have. RGW objects that are larger than this will span over "
5055 "multiple objects."),
c07f9fc5 5056
d2e6a577
FG
5057 Option("rgw_extended_http_attrs", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5058 .set_default("")
b32b8144
FG
5059 .set_description("RGW support extended HTTP attrs")
5060 .set_long_description(
5061 "Add new set of attributes that could be set on an object. These extra attributes "
5062 "can be set through HTTP header fields when putting the objects. If set, these "
5063 "attributes will return as HTTP fields when doing GET/HEAD on the object."),
c07f9fc5 5064
d2e6a577
FG
5065 Option("rgw_exit_timeout_secs", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5066 .set_default(120)
b32b8144
FG
5067 .set_description("RGW shutdown timeout")
5068 .set_long_description("Number of seconds to wait for a process before exiting unconditionally."),
c07f9fc5 5069
d2e6a577 5070 Option("rgw_get_obj_window_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144
FG
5071 .set_default(16_M)
5072 .set_description("RGW object read window size")
5073 .set_long_description("The window size in bytes for a single object read request"),
c07f9fc5 5074
d2e6a577 5075 Option("rgw_get_obj_max_req_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144
FG
5076 .set_default(4_M)
5077 .set_description("RGW object read chunk size")
5078 .set_long_description(
5079 "The maximum request size of a single object read operation sent to RADOS"),
c07f9fc5 5080
d2e6a577
FG
5081 Option("rgw_relaxed_s3_bucket_names", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5082 .set_default(false)
b32b8144
FG
5083 .set_description("RGW enable relaxed S3 bucket names")
5084 .set_long_description("RGW enable relaxed S3 bucket name rules for US region buckets."),
c07f9fc5 5085
d2e6a577
FG
5086 Option("rgw_defer_to_bucket_acls", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5087 .set_default("")
b32b8144
FG
5088 .set_description("Bucket ACLs override object ACLs")
5089 .set_long_description(
5090 "If not empty, a string that selects that mode of operation. 'recurse' will use "
5091 "bucket's ACL for the authorizaton. 'full-control' will allow users that users "
5092 "that have full control permission on the bucket have access to the object."),
c07f9fc5 5093
d2e6a577
FG
5094 Option("rgw_list_buckets_max_chunk", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5095 .set_default(1000)
b32b8144
FG
5096 .set_description("Max number of buckets to retrieve in a single listing operation")
5097 .set_long_description(
5098 "When RGW fetches lists of user's buckets from the backend, this is the max number "
5099 "of entries it will try to retrieve in a single operation. Note that the backend "
5100 "may choose to return a smaller number of entries."),
c07f9fc5 5101
d2e6a577
FG
5102 Option("rgw_md_log_max_shards", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5103 .set_default(64)
b32b8144
FG
5104 .set_description("RGW number of metadata log shards")
5105 .set_long_description(
5106 "The number of shards the RGW metadata log entries will reside in. This affects "
5107 "the metadata sync parallelism as a shard can only be processed by a single "
5108 "RGW at a time"),
c07f9fc5 5109
b32b8144 5110 Option("rgw_num_zone_opstate_shards", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577
FG
5111 .set_default(128)
5112 .set_description(""),
c07f9fc5 5113
b32b8144 5114 Option("rgw_opstate_ratelimit_sec", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577
FG
5115 .set_default(30)
5116 .set_description(""),
c07f9fc5 5117
b32b8144 5118 Option("rgw_curl_wait_timeout_ms", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577
FG
5119 .set_default(1000)
5120 .set_description(""),
c07f9fc5 5121
d2e6a577
FG
5122 Option("rgw_copy_obj_progress", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5123 .set_default(true)
b32b8144
FG
5124 .set_description("Send progress report through copy operation")
5125 .set_long_description(
5126 "If true, RGW will send progress information when copy operation is executed. "),
c07f9fc5 5127
d2e6a577 5128 Option("rgw_copy_obj_progress_every_bytes", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144
FG
5129 .set_default(1_M)
5130 .set_description("Send copy-object progress info after these many bytes"),
c07f9fc5 5131
d2e6a577
FG
5132 Option("rgw_obj_tombstone_cache_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5133 .set_default(1000)
b32b8144
FG
5134 .set_description("Max number of entries to keep in tombstone cache")
5135 .set_long_description(
5136 "The tombstone cache is used when doing a multi-zone data sync. RGW keeps "
5137 "there information about removed objects which is needed in order to prevent "
5138 "re-syncing of objects that were already removed."),
c07f9fc5 5139
d2e6a577
FG
5140 Option("rgw_data_log_window", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5141 .set_default(30)
b32b8144
FG
5142 .set_description("Data log time window")
5143 .set_long_description(
5144 "The data log keeps information about buckets that have objectst that were "
5145 "modified within a specific timeframe. The sync process then knows which buckets "
5146 "are needed to be scanned for data sync."),
c07f9fc5 5147
b32b8144 5148 Option("rgw_data_log_changes_size", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577 5149 .set_default(1000)
b32b8144
FG
5150 .set_description("Max size of pending changes in data log")
5151 .set_long_description(
5152 "RGW will trigger update to the data log if the number of pending entries reached "
5153 "this number."),
c07f9fc5 5154
d2e6a577
FG
5155 Option("rgw_data_log_num_shards", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5156 .set_default(128)
b32b8144
FG
5157 .set_description("Number of data log shards")
5158 .set_long_description(
5159 "The number of shards the RGW data log entries will reside in. This affects the "
5160 "data sync parallelism as a shard can only be processed by a single RGW at a time."),
c07f9fc5 5161
b32b8144 5162 Option("rgw_data_log_obj_prefix", Option::TYPE_STR, Option::LEVEL_DEV)
d2e6a577
FG
5163 .set_default("data_log")
5164 .set_description(""),
c07f9fc5 5165
b32b8144 5166 Option("rgw_replica_log_obj_prefix", Option::TYPE_STR, Option::LEVEL_DEV)
d2e6a577
FG
5167 .set_default("replica_log")
5168 .set_description(""),
c07f9fc5 5169
d2e6a577
FG
5170 Option("rgw_bucket_quota_ttl", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5171 .set_default(600)
b32b8144
FG
5172 .set_description("Bucket quota stats cache TTL")
5173 .set_long_description(
5174 "Length of time for bucket stats to be cached within RGW instance."),
c07f9fc5 5175
b32b8144 5176 Option("rgw_bucket_quota_soft_threshold", Option::TYPE_FLOAT, Option::LEVEL_BASIC)
d2e6a577 5177 .set_default(0.95)
b32b8144
FG
5178 .set_description("RGW quota soft threshold")
5179 .set_long_description(
5180 "Threshold from which RGW doesn't rely on cached info for quota "
5181 "decisions. This is done for higher accuracy of the quota mechanism at "
5182 "cost of performance, when getting close to the quota limit. The value "
5183 "configured here is the ratio between the data usage to the max usage "
5184 "as specified by the quota."),
c07f9fc5 5185
d2e6a577
FG
5186 Option("rgw_bucket_quota_cache_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5187 .set_default(10000)
b32b8144
FG
5188 .set_description("RGW quota stats cache size")
5189 .set_long_description(
5190 "Maximum number of entries in the quota stats cache."),
c07f9fc5 5191
b32b8144 5192 Option("rgw_bucket_default_quota_max_objects", Option::TYPE_INT, Option::LEVEL_BASIC)
d2e6a577 5193 .set_default(-1)
b32b8144
FG
5194 .set_description("Default quota for max objects in a bucket")
5195 .set_long_description(
5196 "The default quota configuration for max number of objects in a bucket. A "
5197 "negative number means 'unlimited'."),
c07f9fc5 5198
d2e6a577
FG
5199 Option("rgw_bucket_default_quota_max_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5200 .set_default(-1)
b32b8144
FG
5201 .set_description("Default quota for total size in a bucket")
5202 .set_long_description(
5203 "The default quota configuration for total size of objects in a bucket. A "
5204 "negative number means 'unlimited'."),
c07f9fc5 5205
d2e6a577
FG
5206 Option("rgw_expose_bucket", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5207 .set_default(false)
b32b8144
FG
5208 .set_description("Send Bucket HTTP header with the response")
5209 .set_long_description(
5210 "If true, RGW will send a Bucket HTTP header with the responses. The header will "
5211 "contain the name of the bucket the operation happened on."),
c07f9fc5 5212
b32b8144 5213 Option("rgw_frontends", Option::TYPE_STR, Option::LEVEL_BASIC)
d2e6a577 5214 .set_default("civetweb port=7480")
b32b8144
FG
5215 .set_description("RGW frontends configuration")
5216 .set_long_description(
5217 "A comma delimited list of frontends configuration. Each configuration contains "
5218 "the type of the frontend followed by an optional space delimited set of "
5219 "key=value config parameters."),
c07f9fc5 5220
d2e6a577
FG
5221 Option("rgw_user_quota_bucket_sync_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5222 .set_default(180)
b32b8144
FG
5223 .set_description("User quota bucket sync interval")
5224 .set_long_description(
5225 "Time period for accumulating modified buckets before syncing these stats."),
c07f9fc5 5226
d2e6a577 5227 Option("rgw_user_quota_sync_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144
FG
5228 .set_default(1_day)
5229 .set_description("User quota sync interval")
5230 .set_long_description(
5231 "Time period for accumulating modified buckets before syncing entire user stats."),
c07f9fc5 5232
d2e6a577
FG
5233 Option("rgw_user_quota_sync_idle_users", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5234 .set_default(false)
b32b8144
FG
5235 .set_description("Should sync idle users quota")
5236 .set_long_description(
5237 "Whether stats for idle users be fully synced."),
c07f9fc5 5238
d2e6a577 5239 Option("rgw_user_quota_sync_wait_time", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144
FG
5240 .set_default(1_day)
5241 .set_description("User quota full-sync wait time")
5242 .set_long_description(
5243 "Minimum time between two full stats sync for non-idle users."),
c07f9fc5 5244
b32b8144 5245 Option("rgw_user_default_quota_max_objects", Option::TYPE_INT, Option::LEVEL_BASIC)
d2e6a577 5246 .set_default(-1)
b32b8144
FG
5247 .set_description("User quota max objects")
5248 .set_long_description(
5249 "The default quota configuration for total number of objects for a single user. A "
5250 "negative number means 'unlimited'."),
c07f9fc5 5251
b32b8144 5252 Option("rgw_user_default_quota_max_size", Option::TYPE_INT, Option::LEVEL_BASIC)
d2e6a577 5253 .set_default(-1)
b32b8144
FG
5254 .set_description("User quota max size")
5255 .set_long_description(
5256 "The default quota configuration for total size of objects for a single user. A "
5257 "negative number means 'unlimited'."),
c07f9fc5 5258
d2e6a577 5259 Option("rgw_multipart_min_part_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144
FG
5260 .set_default(5_M)
5261 .set_description("Minimum S3 multipart-upload part size")
5262 .set_long_description(
5263 "When doing a multipart upload, each part (other than the last part) should be "
5264 "at least this size."),
c07f9fc5 5265
d2e6a577
FG
5266 Option("rgw_multipart_part_upload_limit", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5267 .set_default(10000)
b32b8144 5268 .set_description("Max number of parts in multipart upload"),
c07f9fc5 5269
d2e6a577
FG
5270 Option("rgw_max_slo_entries", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5271 .set_default(1000)
b32b8144 5272 .set_description("Max number of entries in Swift Static Large Object manifest"),
c07f9fc5 5273
b32b8144
FG
5274 Option("rgw_olh_pending_timeout_sec", Option::TYPE_INT, Option::LEVEL_DEV)
5275 .set_default(1_hr)
5276 .set_description("Max time for pending OLH change to complete")
5277 .set_long_description(
5278 "OLH is a versioned object's logical head. Operations on it are journaled and "
5279 "as pending before completion. If an operation doesn't complete with this amount "
5280 "of seconds, we remove the operation from the journal."),
c07f9fc5 5281
b32b8144 5282 Option("rgw_user_max_buckets", Option::TYPE_INT, Option::LEVEL_BASIC)
d2e6a577 5283 .set_default(1000)
b32b8144
FG
5284 .set_description("Max number of buckets per user")
5285 .set_long_description(
5286 "A user can create this many buckets. Zero means unlimmited, negative number means "
5287 "user cannot create any buckets (although user will retain buckets already created."),
c07f9fc5 5288
d2e6a577 5289 Option("rgw_objexp_gc_interval", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144
FG
5290 .set_default(10_min)
5291 .set_description("Swift objects expirer garbage collector interval"),
c07f9fc5 5292
d2e6a577
FG
5293 Option("rgw_objexp_hints_num_shards", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
5294 .set_default(127)
b32b8144
FG
5295 .set_description("Number of object expirer data shards")
5296 .set_long_description(
5297 "The number of shards the (Swift) object expirer will store its data on."),
c07f9fc5 5298
b32b8144 5299 Option("rgw_objexp_chunk_size", Option::TYPE_UINT, Option::LEVEL_DEV)
d2e6a577
FG
5300 .set_default(100)
5301 .set_description(""),
c07f9fc5 5302
b32b8144 5303 Option("rgw_enable_static_website", Option::TYPE_BOOL, Option::LEVEL_BASIC)
d2e6a577 5304 .set_default(false)
b32b8144
FG
5305 .set_description("Enable static website APIs")
5306 .set_long_description(
5307 "This configurable controls whether RGW handles the website control APIs. RGW can "
5308 "server static websites if s3website hostnames are configured, and unrelated to "
5309 "this configurable."),
c07f9fc5 5310
b32b8144 5311 Option("rgw_log_http_headers", Option::TYPE_STR, Option::LEVEL_BASIC)
d2e6a577 5312 .set_default("")
b32b8144
FG
5313 .set_description("List of HTTP headers to log")
5314 .set_long_description(
5315 "A comma delimited list of HTTP headers to log when seen, ignores case (e.g., "
5316 "http_x_forwarded_for)."),
c07f9fc5 5317
d2e6a577
FG
5318 Option("rgw_num_async_rados_threads", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5319 .set_default(32)
b32b8144
FG
5320 .set_description("Number of concurrent RADOS operations in multisite sync")
5321 .set_long_description(
5322 "The number of concurrent RADOS IO operations that will be triggered for handling "
5323 "multisite sync operations. This includes control related work, and not the actual "
5324 "sync operations."),
c07f9fc5 5325
d2e6a577
FG
5326 Option("rgw_md_notify_interval_msec", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5327 .set_default(200)
b32b8144
FG
5328 .set_description("Length of time to aggregate metadata changes")
5329 .set_long_description(
5330 "Length of time (in milliseconds) in which the master zone aggregates all the "
5331 "metadata changes that occured, before sending notifications to all the other "
5332 "zones."),
c07f9fc5 5333
d2e6a577
FG
5334 Option("rgw_run_sync_thread", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5335 .set_default(true)
b32b8144 5336 .set_description("Should run sync thread"),
c07f9fc5 5337
b32b8144 5338 Option("rgw_sync_lease_period", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577
FG
5339 .set_default(120)
5340 .set_description(""),
c07f9fc5 5341
d2e6a577
FG
5342 Option("rgw_sync_log_trim_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5343 .set_default(1200)
b32b8144
FG
5344 .set_description("Sync log trim interval")
5345 .set_long_description(
5346 "Time in seconds between attempts to trim sync logs."),
5347
5348 Option("rgw_sync_log_trim_max_buckets", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5349 .set_default(16)
5350 .set_description("Maximum number of buckets to trim per interval")
5351 .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.")
5352 .add_see_also("rgw_sync_log_trim_interval")
5353 .add_see_also("rgw_sync_log_trim_min_cold_buckets")
5354 .add_see_also("rgw_sync_log_trim_concurrent_buckets"),
5355
5356 Option("rgw_sync_log_trim_min_cold_buckets", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5357 .set_default(4)
5358 .set_description("Minimum number of cold buckets to trim per interval")
5359 .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.")
5360 .add_see_also("rgw_sync_log_trim_interval")
5361 .add_see_also("rgw_sync_log_trim_max_buckets")
5362 .add_see_also("rgw_sync_log_trim_concurrent_buckets"),
5363
5364 Option("rgw_sync_log_trim_concurrent_buckets", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5365 .set_default(4)
5366 .set_description("Maximum number of buckets to trim in parallel")
5367 .add_see_also("rgw_sync_log_trim_interval")
5368 .add_see_also("rgw_sync_log_trim_max_buckets")
5369 .add_see_also("rgw_sync_log_trim_min_cold_buckets"),
c07f9fc5 5370
d2e6a577
FG
5371 Option("rgw_sync_data_inject_err_probability", Option::TYPE_FLOAT, Option::LEVEL_DEV)
5372 .set_default(0)
5373 .set_description(""),
c07f9fc5 5374
d2e6a577
FG
5375 Option("rgw_sync_meta_inject_err_probability", Option::TYPE_FLOAT, Option::LEVEL_DEV)
5376 .set_default(0)
5377 .set_description(""),
c07f9fc5 5378
d2e6a577
FG
5379 Option("rgw_period_push_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5380 .set_default(2)
b32b8144
FG
5381 .set_description("Period push interval")
5382 .set_long_description(
5383 "Number of seconds to wait before retrying 'period push' operation."),
c07f9fc5 5384
d2e6a577
FG
5385 Option("rgw_period_push_interval_max", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5386 .set_default(30)
b32b8144
FG
5387 .set_description("Period push maximum interval")
5388 .set_long_description(
5389 "The max number of seconds to wait before retrying 'period push' after exponential "
5390 "backoff."),
c07f9fc5 5391
d2e6a577
FG
5392 Option("rgw_safe_max_objects_per_shard", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5393 .set_default(100*1024)
b32b8144
FG
5394 .set_description("Safe number of objects per shard")
5395 .set_long_description(
5396 "This is the max number of objects per bucket index shard that RGW considers "
5397 "safe. RGW will warn if it identifies a bucket where its per-shard count is "
5398 "higher than a percentage of this number.")
5399 .add_see_also("rgw_shard_warning_threshold"),
c07f9fc5 5400
d2e6a577
FG
5401 Option("rgw_shard_warning_threshold", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5402 .set_default(90)
b32b8144
FG
5403 .set_description("Warn about max objects per shard")
5404 .set_long_description(
5405 "Warn if number of objects per shard in a specific bucket passed this percentage "
5406 "of the safe number.")
5407 .add_see_also("rgw_safe_max_objects_per_shard"),
c07f9fc5 5408
d2e6a577
FG
5409 Option("rgw_swift_versioning_enabled", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5410 .set_default(false)
b32b8144 5411 .set_description("Enable Swift versioning"),
c07f9fc5 5412
d2e6a577
FG
5413 Option("rgw_swift_custom_header", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5414 .set_default("")
b32b8144
FG
5415 .set_description("Enable swift custom header")
5416 .set_long_description(
5417 "If not empty, specifies a name of HTTP header that can include custom data. When "
5418 "uploading an object, if this header is passed RGW will store this header info "
5419 "and it will be available when listing the bucket."),
c07f9fc5 5420
d2e6a577
FG
5421 Option("rgw_swift_need_stats", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5422 .set_default(true)
b32b8144 5423 .set_description("Enable stats on bucket listing in Swift"),
c07f9fc5 5424
b32b8144 5425 Option("rgw_reshard_num_logs", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577
FG
5426 .set_default(16)
5427 .set_description(""),
c07f9fc5 5428
b32b8144 5429 Option("rgw_reshard_bucket_lock_duration", Option::TYPE_INT, Option::LEVEL_DEV)
d2e6a577
FG
5430 .set_default(120)
5431 .set_description(""),
c07f9fc5 5432
d2e6a577
FG
5433 Option("rgw_crypt_require_ssl", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5434 .set_default(true)
b32b8144 5435 .set_description("Requests including encryption key headers must be sent over ssl"),
c07f9fc5 5436
b32b8144 5437 Option("rgw_crypt_default_encryption_key", Option::TYPE_STR, Option::LEVEL_DEV)
d2e6a577
FG
5438 .set_default("")
5439 .set_description(""),
5440
b32b8144 5441 Option("rgw_crypt_s3_kms_encryption_keys", Option::TYPE_STR, Option::LEVEL_DEV)
d2e6a577
FG
5442 .set_default("")
5443 .set_description(""),
5444
5445 Option("rgw_crypt_suppress_logs", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5446 .set_default(true)
b32b8144 5447 .set_description("Suppress logs that might print client key"),
d2e6a577
FG
5448
5449 Option("rgw_list_bucket_min_readahead", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5450 .set_default(1000)
b32b8144 5451 .set_description("Minimum number of entries to request from rados for bucket listing"),
c07f9fc5 5452
d2e6a577
FG
5453 Option("rgw_rest_getusage_op_compat", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5454 .set_default(false)
b32b8144 5455 .set_description("REST GetUsage request backward compatibility"),
c07f9fc5 5456
d2e6a577
FG
5457 Option("rgw_torrent_flag", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5458 .set_default(false)
b32b8144 5459 .set_description("Produce torrent function flag"),
c07f9fc5 5460
d2e6a577
FG
5461 Option("rgw_torrent_tracker", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5462 .set_default("")
b32b8144 5463 .set_description("Torrent field annouce and annouce list"),
c07f9fc5 5464
d2e6a577
FG
5465 Option("rgw_torrent_createby", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5466 .set_default("")
b32b8144 5467 .set_description("torrent field created by"),
c07f9fc5 5468
d2e6a577
FG
5469 Option("rgw_torrent_comment", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5470 .set_default("")
b32b8144 5471 .set_description("Torrent field comment"),
c07f9fc5 5472
d2e6a577
FG
5473 Option("rgw_torrent_encoding", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5474 .set_default("")
b32b8144 5475 .set_description("torrent field encoding"),
c07f9fc5 5476
d2e6a577
FG
5477 Option("rgw_data_notify_interval_msec", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5478 .set_default(200)
5479 .set_description("data changes notification interval to followers"),
c07f9fc5 5480
d2e6a577
FG
5481 Option("rgw_torrent_origin", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5482 .set_default("")
b32b8144 5483 .set_description("Torrent origin"),
c07f9fc5 5484
d2e6a577
FG
5485 Option("rgw_torrent_sha_unit", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5486 .set_default(512*1024)
5487 .set_description(""),
c07f9fc5 5488
b32b8144 5489 Option("rgw_dynamic_resharding", Option::TYPE_BOOL, Option::LEVEL_BASIC)
181888fb 5490 .set_default(true)
b32b8144
FG
5491 .set_description("Enable dynamic resharding")
5492 .set_long_description(
5493 "If true, RGW will dynamicall increase the number of shards in buckets that have "
5494 "a high number of objects per shard.")
5495 .add_see_also("rgw_max_objs_per_shard"),
c07f9fc5 5496
b32b8144 5497 Option("rgw_max_objs_per_shard", Option::TYPE_INT, Option::LEVEL_BASIC)
d2e6a577 5498 .set_default(100000)
b32b8144
FG
5499 .set_description("Max objects per shard for dynamic resharding")
5500 .set_long_description(
5501 "This is the max number of objects per bucket index shard that RGW will "
5502 "allow with dynamic resharding. RGW will trigger an automatic reshard operation "
5503 "on the bucket if it exceeds this number.")
5504 .add_see_also("rgw_dynamic_resharding"),
c07f9fc5 5505
d2e6a577 5506 Option("rgw_reshard_thread_interval", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 5507 .set_default(10_min)
d2e6a577 5508 .set_description(""),
b32b8144
FG
5509
5510 Option("rgw_cache_expiry_interval", Option::TYPE_UINT,
5511 Option::LEVEL_ADVANCED)
5512 .set_default(900)
5513 .set_description("Number of seconds before entries in the bucket info "
5514 "cache are assumed stale and re-fetched. Zero is never.")
5515 .add_tag("performance")
5516 .add_service("rgw")
5517 .set_long_description("The Rados Gateway stores metadata about buckets in "
5518 "an internal cache. This should be kept consistent "
5519 "by the OSD's relaying notify events between "
5520 "multiple watching RGW processes. In the event "
5521 "that this notification protocol fails, bounding "
5522 "the length of time that any data in the cache will "
5523 "be assumed valid will ensure that any RGW instance "
5524 "that falls out of sync will eventually recover. "
5525 "This seems to be an issue mostly for large numbers "
5526 "of RGW instances under heavy use. If you would like "
5527 "to turn off cache expiry, set this value to zero."),
5528
d2e6a577
FG
5529 });
5530}
c07f9fc5 5531
d2e6a577
FG
5532static std::vector<Option> get_rbd_options() {
5533 return std::vector<Option>({
5534 Option("rbd_default_pool", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5535 .set_default("rbd")
181888fb 5536 .set_description("default pool for storing new images")
d2e6a577
FG
5537 .set_validator([](std::string *value, std::string *error_message){
5538 boost::regex pattern("^[^@/]+$");
5539 if (!boost::regex_match (*value, pattern)) {
5540 *value = "rbd";
5541 *error_message = "invalid RBD default pool, resetting to 'rbd'";
5542 }
5543 return 0;
5544 }),
5545
5546 Option("rbd_default_data_pool", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5547 .set_default("")
181888fb 5548 .set_description("default pool for storing data blocks for new images")
d2e6a577
FG
5549 .set_validator([](std::string *value, std::string *error_message){
5550 boost::regex pattern("^[^@/]*$");
5551 if (!boost::regex_match (*value, pattern)) {
5552 *value = "";
5553 *error_message = "ignoring invalid RBD data pool";
5554 }
5555 return 0;
5556 }),
5557
5558 Option("rbd_default_features", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5559 .set_default("layering,exclusive-lock,object-map,fast-diff,deep-flatten")
181888fb
FG
5560 .set_description("default v2 image features for new images")
5561 .set_long_description(
5562 "RBD features are only applicable for v2 images. This setting accepts "
5563 "either an integer bitmask value or comma-delimited string of RBD "
5564 "feature names. This setting is always internally stored as an integer "
5565 "bitmask value. The mapping between feature bitmask value and feature "
5566 "name is as follows: +1 -> layering, +2 -> striping, "
5567 "+4 -> exclusive-lock, +8 -> object-map, +16 -> fast-diff, "
5568 "+32 -> deep-flatten, +64 -> journaling, +128 -> data-pool")
d2e6a577
FG
5569 .set_safe()
5570 .set_validator([](std::string *value, std::string *error_message){
5571 static const std::map<std::string, uint64_t> FEATURE_MAP = {
5572 {RBD_FEATURE_NAME_LAYERING, RBD_FEATURE_LAYERING},
5573 {RBD_FEATURE_NAME_STRIPINGV2, RBD_FEATURE_STRIPINGV2},
5574 {RBD_FEATURE_NAME_EXCLUSIVE_LOCK, RBD_FEATURE_EXCLUSIVE_LOCK},
5575 {RBD_FEATURE_NAME_OBJECT_MAP, RBD_FEATURE_OBJECT_MAP},
5576 {RBD_FEATURE_NAME_FAST_DIFF, RBD_FEATURE_FAST_DIFF},
5577 {RBD_FEATURE_NAME_DEEP_FLATTEN, RBD_FEATURE_DEEP_FLATTEN},
5578 {RBD_FEATURE_NAME_JOURNALING, RBD_FEATURE_JOURNALING},
5579 {RBD_FEATURE_NAME_DATA_POOL, RBD_FEATURE_DATA_POOL},
5580 };
5581 static_assert((RBD_FEATURE_DATA_POOL << 1) > RBD_FEATURES_ALL,
5582 "new RBD feature added");
5583
5584 // convert user-friendly comma delimited feature name list to a bitmask
5585 // that is used by the librbd API
5586 uint64_t features = 0;
5587 error_message->clear();
5588
5589 try {
5590 features = boost::lexical_cast<decltype(features)>(*value);
5591
5592 uint64_t unsupported_features = (features & ~RBD_FEATURES_ALL);
5593 if (unsupported_features != 0ull) {
5594 features &= RBD_FEATURES_ALL;
5595
5596 std::stringstream ss;
5597 ss << "ignoring unknown feature mask 0x"
5598 << std::hex << unsupported_features;
5599 *error_message = ss.str();
5600 }
5601 } catch (const boost::bad_lexical_cast& ) {
5602 int r = 0;
5603 std::vector<std::string> feature_names;
5604 boost::split(feature_names, *value, boost::is_any_of(","));
5605 for (auto feature_name: feature_names) {
5606 boost::trim(feature_name);
5607 auto feature_it = FEATURE_MAP.find(feature_name);
5608 if (feature_it != FEATURE_MAP.end()) {
5609 features += feature_it->second;
5610 } else {
5611 if (!error_message->empty()) {
5612 *error_message += ", ";
5613 }
5614 *error_message += "ignoring unknown feature " + feature_name;
5615 r = -EINVAL;
5616 }
5617 }
c07f9fc5 5618
d2e6a577
FG
5619 if (features == 0 && r == -EINVAL) {
5620 features = RBD_FEATURES_DEFAULT;
5621 }
5622 }
5623 *value = stringify(features);
5624 return 0;
5625 }),
5626
5627 Option("rbd_op_threads", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5628 .set_default(1)
181888fb 5629 .set_description("number of threads to utilize for internal processing"),
d2e6a577
FG
5630
5631 Option("rbd_op_thread_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5632 .set_default(60)
181888fb 5633 .set_description("time in seconds for detecting a hung thread"),
d2e6a577
FG
5634
5635 Option("rbd_non_blocking_aio", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5636 .set_default(true)
181888fb 5637 .set_description("process AIO ops from a dispatch thread to prevent blocking"),
d2e6a577
FG
5638
5639 Option("rbd_cache", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5640 .set_default(true)
181888fb 5641 .set_description("whether to enable caching (writeback unless rbd_cache_max_dirty is 0)"),
d2e6a577
FG
5642
5643 Option("rbd_cache_writethrough_until_flush", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5644 .set_default(true)
181888fb
FG
5645 .set_description("whether to make writeback caching writethrough until "
5646 "flush is called, to be sure the user of librbd will send "
5647 "flushes so that writeback is safe"),
d2e6a577
FG
5648
5649 Option("rbd_cache_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5650 .set_default(32<<20)
181888fb 5651 .set_description("cache size in bytes"),
d2e6a577
FG
5652
5653 Option("rbd_cache_max_dirty", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5654 .set_default(24<<20)
181888fb 5655 .set_description("dirty limit in bytes - set to 0 for write-through caching"),
d2e6a577
FG
5656
5657 Option("rbd_cache_target_dirty", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5658 .set_default(16<<20)
181888fb 5659 .set_description("target dirty limit in bytes"),
d2e6a577
FG
5660
5661 Option("rbd_cache_max_dirty_age", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5662 .set_default(1.0)
181888fb 5663 .set_description("seconds in cache before writeback starts"),
d2e6a577
FG
5664
5665 Option("rbd_cache_max_dirty_object", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5666 .set_default(0)
181888fb 5667 .set_description("dirty limit for objects - set to 0 for auto calculate from rbd_cache_size"),
d2e6a577
FG
5668
5669 Option("rbd_cache_block_writes_upfront", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5670 .set_default(false)
181888fb 5671 .set_description("whether to block writes to the cache before the aio_write call completes"),
d2e6a577
FG
5672
5673 Option("rbd_concurrent_management_ops", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5674 .set_default(10)
5675 .set_min(1)
181888fb 5676 .set_description("how many operations can be in flight for a management operation like deleting or resizing an image"),
c07f9fc5 5677
d2e6a577
FG
5678 Option("rbd_balance_snap_reads", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5679 .set_default(false)
181888fb 5680 .set_description("distribute snap read requests to random OSD"),
c07f9fc5 5681
d2e6a577
FG
5682 Option("rbd_localize_snap_reads", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5683 .set_default(false)
181888fb 5684 .set_description("localize snap read requests to closest OSD"),
c07f9fc5 5685
d2e6a577
FG
5686 Option("rbd_balance_parent_reads", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5687 .set_default(false)
181888fb 5688 .set_description("distribute parent read requests to random OSD"),
c07f9fc5 5689
d2e6a577
FG
5690 Option("rbd_localize_parent_reads", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5691 .set_default(false)
181888fb 5692 .set_description("localize parent requests to closest OSD"),
c07f9fc5 5693
b32b8144
FG
5694 Option("rbd_sparse_read_threshold_bytes", Option::TYPE_UINT,
5695 Option::LEVEL_ADVANCED)
5696 .set_default(64_K)
5697 .set_description("threshold for issuing a sparse-read")
5698 .set_long_description("minimum number of sequential bytes to read against "
5699 "an object before issuing a sparse-read request to "
5700 "the cluster. 0 implies it must be a full object read"
5701 "to issue a sparse-read, 1 implies always use "
5702 "sparse-read, and any value larger than the maximum "
5703 "object size will disable sparse-read for all "
5704 "requests"),
5705
d2e6a577
FG
5706 Option("rbd_readahead_trigger_requests", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5707 .set_default(10)
181888fb 5708 .set_description("number of sequential requests necessary to trigger readahead"),
c07f9fc5 5709
d2e6a577 5710 Option("rbd_readahead_max_bytes", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144 5711 .set_default(512_K)
181888fb 5712 .set_description("set to 0 to disable readahead"),
c07f9fc5 5713
d2e6a577 5714 Option("rbd_readahead_disable_after_bytes", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144 5715 .set_default(50_M)
181888fb 5716 .set_description("how many bytes are read in total before readahead is disabled"),
c07f9fc5 5717
d2e6a577
FG
5718 Option("rbd_clone_copy_on_read", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5719 .set_default(false)
181888fb 5720 .set_description("copy-up parent image blocks to clone upon read request"),
c07f9fc5 5721
d2e6a577
FG
5722 Option("rbd_blacklist_on_break_lock", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5723 .set_default(true)
181888fb 5724 .set_description("whether to blacklist clients whose lock was broken"),
c07f9fc5 5725
d2e6a577
FG
5726 Option("rbd_blacklist_expire_seconds", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5727 .set_default(0)
181888fb 5728 .set_description("number of seconds to blacklist - set to 0 for OSD default"),
c07f9fc5 5729
d2e6a577
FG
5730 Option("rbd_request_timed_out_seconds", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5731 .set_default(30)
181888fb 5732 .set_description("number of seconds before maintenance request times out"),
c07f9fc5 5733
d2e6a577
FG
5734 Option("rbd_skip_partial_discard", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5735 .set_default(false)
181888fb 5736 .set_description("when trying to discard a range inside an object, set to true to skip zeroing the range"),
c07f9fc5 5737
d2e6a577
FG
5738 Option("rbd_enable_alloc_hint", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5739 .set_default(true)
181888fb 5740 .set_description("when writing a object, it will issue a hint to osd backend to indicate the expected size object need"),
c07f9fc5 5741
d2e6a577
FG
5742 Option("rbd_tracing", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5743 .set_default(false)
181888fb 5744 .set_description("true if LTTng-UST tracepoints should be enabled"),
c07f9fc5 5745
d2e6a577
FG
5746 Option("rbd_blkin_trace_all", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5747 .set_default(false)
181888fb 5748 .set_description("create a blkin trace for all RBD requests"),
c07f9fc5 5749
d2e6a577
FG
5750 Option("rbd_validate_pool", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5751 .set_default(true)
181888fb 5752 .set_description("validate empty pools for RBD compatibility"),
c07f9fc5 5753
d2e6a577
FG
5754 Option("rbd_validate_names", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5755 .set_default(true)
181888fb 5756 .set_description("validate new image names for RBD compatibility"),
d2e6a577
FG
5757
5758 Option("rbd_auto_exclusive_lock_until_manual_request", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5759 .set_default(true)
181888fb 5760 .set_description("automatically acquire/release exclusive lock until it is explicitly requested"),
d2e6a577
FG
5761
5762 Option("rbd_mirroring_resync_after_disconnect", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5763 .set_default(false)
181888fb 5764 .set_description("automatically start image resync after mirroring is disconnected due to being laggy"),
d2e6a577
FG
5765
5766 Option("rbd_mirroring_replay_delay", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5767 .set_default(0)
181888fb 5768 .set_description("time-delay in seconds for rbd-mirror asynchronous replication"),
d2e6a577
FG
5769
5770 Option("rbd_default_format", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5771 .set_default(2)
181888fb 5772 .set_description("default image format for new images"),
d2e6a577
FG
5773
5774 Option("rbd_default_order", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5775 .set_default(22)
181888fb 5776 .set_description("default order (data block object size) for new images"),
d2e6a577
FG
5777
5778 Option("rbd_default_stripe_count", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
5779 .set_default(0)
181888fb 5780 .set_description("default stripe count for new images"),
d2e6a577
FG
5781
5782 Option("rbd_default_stripe_unit", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
5783 .set_default(0)
181888fb 5784 .set_description("default stripe width for new images"),
d2e6a577
FG
5785
5786 Option("rbd_default_map_options", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5787 .set_default("")
181888fb 5788 .set_description("default krbd map options"),
c07f9fc5 5789
d2e6a577 5790 Option("rbd_journal_order", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
181888fb 5791 .set_min(12)
d2e6a577 5792 .set_default(24)
181888fb 5793 .set_description("default order (object size) for journal data objects"),
c07f9fc5 5794
d2e6a577
FG
5795 Option("rbd_journal_splay_width", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
5796 .set_default(4)
181888fb 5797 .set_description("number of active journal objects"),
c07f9fc5 5798
d2e6a577
FG
5799 Option("rbd_journal_commit_age", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5800 .set_default(5)
181888fb 5801 .set_description("commit time interval, seconds"),
c07f9fc5 5802
d2e6a577
FG
5803 Option("rbd_journal_object_flush_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5804 .set_default(0)
181888fb 5805 .set_description("maximum number of pending commits per journal object"),
c07f9fc5 5806
d2e6a577
FG
5807 Option("rbd_journal_object_flush_bytes", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5808 .set_default(0)
181888fb 5809 .set_description("maximum number of pending bytes per journal object"),
c07f9fc5 5810
d2e6a577
FG
5811 Option("rbd_journal_object_flush_age", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5812 .set_default(0)
181888fb 5813 .set_description("maximum age (in seconds) for pending commits"),
c07f9fc5 5814
d2e6a577
FG
5815 Option("rbd_journal_pool", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5816 .set_default("")
181888fb 5817 .set_description("pool for journal objects"),
c07f9fc5 5818
d2e6a577
FG
5819 Option("rbd_journal_max_payload_bytes", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
5820 .set_default(16384)
181888fb 5821 .set_description("maximum journal payload size before splitting"),
c07f9fc5 5822
d2e6a577
FG
5823 Option("rbd_journal_max_concurrent_object_sets", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5824 .set_default(0)
181888fb
FG
5825 .set_description("maximum number of object sets a journal client can be behind before it is automatically unregistered"),
5826 });
5827}
c07f9fc5 5828
181888fb
FG
5829static std::vector<Option> get_rbd_mirror_options() {
5830 return std::vector<Option>({
d2e6a577
FG
5831 Option("rbd_mirror_journal_commit_age", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5832 .set_default(5)
181888fb 5833 .set_description("commit time interval, seconds"),
c07f9fc5 5834
d2e6a577
FG
5835 Option("rbd_mirror_journal_poll_age", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5836 .set_default(5)
181888fb 5837 .set_description("maximum age (in seconds) between successive journal polls"),
c07f9fc5 5838
d2e6a577
FG
5839 Option("rbd_mirror_journal_max_fetch_bytes", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
5840 .set_default(32768)
181888fb 5841 .set_description("maximum bytes to read from each journal data object per fetch"),
c07f9fc5 5842
d2e6a577
FG
5843 Option("rbd_mirror_sync_point_update_age", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5844 .set_default(30)
181888fb 5845 .set_description("number of seconds between each update of the image sync point object number"),
c07f9fc5 5846
d2e6a577
FG
5847 Option("rbd_mirror_concurrent_image_syncs", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
5848 .set_default(5)
181888fb 5849 .set_description("maximum number of image syncs in parallel"),
c07f9fc5 5850
d2e6a577
FG
5851 Option("rbd_mirror_pool_replayers_refresh_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5852 .set_default(30)
181888fb 5853 .set_description("interval to refresh peers in rbd-mirror daemon"),
c07f9fc5 5854
d2e6a577
FG
5855 Option("rbd_mirror_delete_retry_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5856 .set_default(30)
181888fb 5857 .set_description("interval to check and retry the failed requests in deleter"),
c07f9fc5 5858
d2e6a577
FG
5859 Option("rbd_mirror_image_state_check_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5860 .set_default(30)
5861 .set_min(1)
181888fb 5862 .set_description("interval to get images from pool watcher and set sources in replayer"),
d2e6a577
FG
5863
5864 Option("rbd_mirror_leader_heartbeat_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5865 .set_default(5)
5866 .set_min(1)
181888fb 5867 .set_description("interval (in seconds) between mirror leader heartbeats"),
d2e6a577
FG
5868
5869 Option("rbd_mirror_leader_max_missed_heartbeats", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5870 .set_default(2)
181888fb 5871 .set_description("number of missed heartbeats for non-lock owner to attempt to acquire lock"),
d2e6a577
FG
5872
5873 Option("rbd_mirror_leader_max_acquire_attempts_before_break", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5874 .set_default(3)
181888fb 5875 .set_description("number of failed attempts to acquire lock after missing heartbeats before breaking lock"),
d2e6a577
FG
5876 });
5877}
5878
5879std::vector<Option> get_mds_options() {
5880 return std::vector<Option>({
5881 Option("mds_data", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5882 .set_default("/var/lib/ceph/mds/$cluster-$id")
5883 .set_description(""),
c07f9fc5 5884
d2e6a577
FG
5885 Option("mds_max_file_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
5886 .set_default(1ULL << 40)
5887 .set_description(""),
c07f9fc5 5888
d2e6a577
FG
5889 Option("mds_max_xattr_pairs_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
5890 .set_default(64 << 10)
5891 .set_description(""),
c07f9fc5 5892
d2e6a577 5893 Option("mds_cache_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
181888fb
FG
5894 .set_default(0)
5895 .set_description("maximum number of inodes in MDS cache (<=0 is unlimited)")
5896 .set_long_description("This tunable is no longer recommended. Use mds_cache_memory_limit."),
5897
5898 Option("mds_cache_memory_limit", Option::TYPE_UINT, Option::LEVEL_BASIC)
5899 .set_default(1*(1LL<<30))
5900 .set_description("target maximum memory usage of MDS cache")
5901 .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."),
5902
5903 Option("mds_cache_reservation", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5904 .set_default(.05)
5905 .set_description("amount of memory to reserve"),
5906
5907 Option("mds_health_cache_threshold", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5908 .set_default(1.5)
5909 .set_description("threshold for cache size to generate health warning"),
c07f9fc5 5910
d2e6a577
FG
5911 Option("mds_cache_mid", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5912 .set_default(.7)
5913 .set_description(""),
c07f9fc5 5914
d2e6a577
FG
5915 Option("mds_max_file_recover", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
5916 .set_default(32)
5917 .set_description(""),
c07f9fc5 5918
d2e6a577
FG
5919 Option("mds_dir_max_commit_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5920 .set_default(10)
5921 .set_description(""),
c07f9fc5 5922
d2e6a577
FG
5923 Option("mds_dir_keys_per_op", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5924 .set_default(16384)
5925 .set_description(""),
c07f9fc5 5926
d2e6a577
FG
5927 Option("mds_decay_halflife", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5928 .set_default(5)
5929 .set_description(""),
c07f9fc5 5930
d2e6a577
FG
5931 Option("mds_beacon_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5932 .set_default(4)
5933 .set_description(""),
c07f9fc5 5934
d2e6a577
FG
5935 Option("mds_beacon_grace", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5936 .set_default(15)
5937 .set_description(""),
c07f9fc5 5938
d2e6a577
FG
5939 Option("mds_enforce_unique_name", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5940 .set_default(true)
5941 .set_description(""),
c07f9fc5 5942
d2e6a577
FG
5943 Option("mds_session_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5944 .set_default(60)
5945 .set_description(""),
c07f9fc5 5946
d2e6a577
FG
5947 Option("mds_session_blacklist_on_timeout", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5948 .set_default(true)
5949 .set_description(""),
c07f9fc5 5950
d2e6a577
FG
5951 Option("mds_session_blacklist_on_evict", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5952 .set_default(true)
5953 .set_description(""),
c07f9fc5 5954
d2e6a577
FG
5955 Option("mds_sessionmap_keys_per_op", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
5956 .set_default(1024)
5957 .set_description(""),
c07f9fc5 5958
d2e6a577
FG
5959 Option("mds_recall_state_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5960 .set_default(60)
5961 .set_description(""),
c07f9fc5 5962
d2e6a577
FG
5963 Option("mds_freeze_tree_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5964 .set_default(30)
5965 .set_description(""),
c07f9fc5 5966
d2e6a577
FG
5967 Option("mds_session_autoclose", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5968 .set_default(300)
5969 .set_description(""),
c07f9fc5 5970
d2e6a577
FG
5971 Option("mds_health_summarize_threshold", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5972 .set_default(10)
5973 .set_description(""),
c07f9fc5 5974
d2e6a577
FG
5975 Option("mds_reconnect_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5976 .set_default(45)
5977 .set_description(""),
c07f9fc5 5978
d2e6a577
FG
5979 Option("mds_tick_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5980 .set_default(5)
5981 .set_description(""),
c07f9fc5 5982
d2e6a577
FG
5983 Option("mds_dirstat_min_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5984 .set_default(1)
5985 .set_description(""),
c07f9fc5 5986
d2e6a577
FG
5987 Option("mds_scatter_nudge_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5988 .set_default(5)
5989 .set_description(""),
c07f9fc5 5990
d2e6a577
FG
5991 Option("mds_client_prealloc_inos", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5992 .set_default(1000)
5993 .set_description(""),
c07f9fc5 5994
d2e6a577
FG
5995 Option("mds_early_reply", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5996 .set_default(true)
5997 .set_description(""),
c07f9fc5 5998
d2e6a577
FG
5999 Option("mds_default_dir_hash", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6000 .set_default(CEPH_STR_HASH_RJENKINS)
6001 .set_description(""),
c07f9fc5 6002
d2e6a577
FG
6003 Option("mds_log_pause", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6004 .set_default(false)
6005 .set_description(""),
c07f9fc5 6006
d2e6a577
FG
6007 Option("mds_log_skip_corrupt_events", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6008 .set_default(false)
6009 .set_description(""),
c07f9fc5 6010
d2e6a577
FG
6011 Option("mds_log_max_events", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6012 .set_default(-1)
6013 .set_description(""),
c07f9fc5 6014
d2e6a577
FG
6015 Option("mds_log_events_per_segment", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6016 .set_default(1024)
6017 .set_description(""),
c07f9fc5 6018
d2e6a577
FG
6019 Option("mds_log_segment_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6020 .set_default(0)
6021 .set_description(""),
c07f9fc5 6022
d2e6a577 6023 Option("mds_log_max_segments", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
94b18763 6024 .set_default(128)
d2e6a577 6025 .set_description(""),
c07f9fc5 6026
d2e6a577
FG
6027 Option("mds_bal_export_pin", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6028 .set_default(true)
6029 .set_description(""),
c07f9fc5 6030
d2e6a577
FG
6031 Option("mds_bal_sample_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6032 .set_default(3.0)
6033 .set_description(""),
c07f9fc5 6034
d2e6a577
FG
6035 Option("mds_bal_replicate_threshold", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6036 .set_default(8000)
6037 .set_description(""),
c07f9fc5 6038
d2e6a577
FG
6039 Option("mds_bal_unreplicate_threshold", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6040 .set_default(0)
6041 .set_description(""),
c07f9fc5 6042
d2e6a577
FG
6043 Option("mds_bal_frag", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6044 .set_default(true)
6045 .set_description(""),
c07f9fc5 6046
d2e6a577
FG
6047 Option("mds_bal_split_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6048 .set_default(10000)
6049 .set_description(""),
c07f9fc5 6050
d2e6a577
FG
6051 Option("mds_bal_split_rd", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6052 .set_default(25000)
6053 .set_description(""),
c07f9fc5 6054
d2e6a577
FG
6055 Option("mds_bal_split_wr", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6056 .set_default(10000)
6057 .set_description(""),
c07f9fc5 6058
d2e6a577
FG
6059 Option("mds_bal_split_bits", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6060 .set_default(3)
6061 .set_description(""),
c07f9fc5 6062
d2e6a577
FG
6063 Option("mds_bal_merge_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6064 .set_default(50)
6065 .set_description(""),
c07f9fc5 6066
d2e6a577
FG
6067 Option("mds_bal_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6068 .set_default(10)
6069 .set_description(""),
c07f9fc5 6070
d2e6a577
FG
6071 Option("mds_bal_fragment_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6072 .set_default(5)
6073 .set_description(""),
c07f9fc5 6074
d2e6a577
FG
6075 Option("mds_bal_fragment_size_max", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6076 .set_default(10000*10)
6077 .set_description(""),
c07f9fc5 6078
d2e6a577
FG
6079 Option("mds_bal_fragment_fast_factor", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6080 .set_default(1.5)
6081 .set_description(""),
c07f9fc5 6082
d2e6a577
FG
6083 Option("mds_bal_idle_threshold", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6084 .set_default(0)
6085 .set_description(""),
c07f9fc5 6086
d2e6a577
FG
6087 Option("mds_bal_max", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6088 .set_default(-1)
6089 .set_description(""),
c07f9fc5 6090
d2e6a577
FG
6091 Option("mds_bal_max_until", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6092 .set_default(-1)
6093 .set_description(""),
c07f9fc5 6094
d2e6a577
FG
6095 Option("mds_bal_mode", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6096 .set_default(0)
6097 .set_description(""),
c07f9fc5 6098
d2e6a577
FG
6099 Option("mds_bal_min_rebalance", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6100 .set_default(.1)
6101 .set_description(""),
c07f9fc5 6102
d2e6a577
FG
6103 Option("mds_bal_min_start", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6104 .set_default(.2)
6105 .set_description(""),
c07f9fc5 6106
d2e6a577
FG
6107 Option("mds_bal_need_min", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6108 .set_default(.8)
6109 .set_description(""),
c07f9fc5 6110
d2e6a577
FG
6111 Option("mds_bal_need_max", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6112 .set_default(1.2)
6113 .set_description(""),
c07f9fc5 6114
d2e6a577
FG
6115 Option("mds_bal_midchunk", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6116 .set_default(.3)
6117 .set_description(""),
c07f9fc5 6118
d2e6a577
FG
6119 Option("mds_bal_minchunk", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6120 .set_default(.001)
6121 .set_description(""),
c07f9fc5 6122
d2e6a577
FG
6123 Option("mds_bal_target_decay", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6124 .set_default(10.0)
6125 .set_description(""),
c07f9fc5 6126
d2e6a577
FG
6127 Option("mds_replay_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6128 .set_default(1.0)
6129 .set_description(""),
c07f9fc5 6130
d2e6a577
FG
6131 Option("mds_shutdown_check", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6132 .set_default(0)
6133 .set_description(""),
c07f9fc5 6134
d2e6a577
FG
6135 Option("mds_thrash_exports", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6136 .set_default(0)
6137 .set_description(""),
c07f9fc5 6138
d2e6a577
FG
6139 Option("mds_thrash_fragments", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6140 .set_default(0)
6141 .set_description(""),
c07f9fc5 6142
d2e6a577
FG
6143 Option("mds_dump_cache_on_map", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6144 .set_default(false)
6145 .set_description(""),
c07f9fc5 6146
d2e6a577
FG
6147 Option("mds_dump_cache_after_rejoin", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6148 .set_default(false)
6149 .set_description(""),
c07f9fc5 6150
d2e6a577
FG
6151 Option("mds_verify_scatter", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6152 .set_default(false)
6153 .set_description(""),
c07f9fc5 6154
d2e6a577
FG
6155 Option("mds_debug_scatterstat", Option::TYPE_BOOL, Option::LEVEL_DEV)
6156 .set_default(false)
6157 .set_description(""),
c07f9fc5 6158
d2e6a577
FG
6159 Option("mds_debug_frag", Option::TYPE_BOOL, Option::LEVEL_DEV)
6160 .set_default(false)
6161 .set_description(""),
c07f9fc5 6162
d2e6a577
FG
6163 Option("mds_debug_auth_pins", Option::TYPE_BOOL, Option::LEVEL_DEV)
6164 .set_default(false)
6165 .set_description(""),
c07f9fc5 6166
d2e6a577
FG
6167 Option("mds_debug_subtrees", Option::TYPE_BOOL, Option::LEVEL_DEV)
6168 .set_default(false)
6169 .set_description(""),
c07f9fc5 6170
d2e6a577
FG
6171 Option("mds_kill_mdstable_at", Option::TYPE_INT, Option::LEVEL_DEV)
6172 .set_default(0)
6173 .set_description(""),
c07f9fc5 6174
b32b8144
FG
6175 Option("mds_max_export_size", Option::TYPE_UINT, Option::LEVEL_DEV)
6176 .set_default(1_G)
6177 .set_description(""),
6178
d2e6a577
FG
6179 Option("mds_kill_export_at", Option::TYPE_INT, Option::LEVEL_DEV)
6180 .set_default(0)
6181 .set_description(""),
c07f9fc5 6182
d2e6a577
FG
6183 Option("mds_kill_import_at", Option::TYPE_INT, Option::LEVEL_DEV)
6184 .set_default(0)
6185 .set_description(""),
c07f9fc5 6186
d2e6a577
FG
6187 Option("mds_kill_link_at", Option::TYPE_INT, Option::LEVEL_DEV)
6188 .set_default(0)
6189 .set_description(""),
c07f9fc5 6190
d2e6a577
FG
6191 Option("mds_kill_rename_at", Option::TYPE_INT, Option::LEVEL_DEV)
6192 .set_default(0)
6193 .set_description(""),
c07f9fc5 6194
d2e6a577
FG
6195 Option("mds_kill_openc_at", Option::TYPE_INT, Option::LEVEL_DEV)
6196 .set_default(0)
6197 .set_description(""),
c07f9fc5 6198
d2e6a577
FG
6199 Option("mds_kill_journal_at", Option::TYPE_INT, Option::LEVEL_DEV)
6200 .set_default(0)
6201 .set_description(""),
c07f9fc5 6202
d2e6a577
FG
6203 Option("mds_kill_journal_expire_at", Option::TYPE_INT, Option::LEVEL_DEV)
6204 .set_default(0)
6205 .set_description(""),
c07f9fc5 6206
d2e6a577
FG
6207 Option("mds_kill_journal_replay_at", Option::TYPE_INT, Option::LEVEL_DEV)
6208 .set_default(0)
6209 .set_description(""),
c07f9fc5 6210
d2e6a577
FG
6211 Option("mds_journal_format", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
6212 .set_default(1)
6213 .set_description(""),
c07f9fc5 6214
d2e6a577
FG
6215 Option("mds_kill_create_at", Option::TYPE_INT, Option::LEVEL_DEV)
6216 .set_default(0)
6217 .set_description(""),
c07f9fc5 6218
d2e6a577
FG
6219 Option("mds_inject_traceless_reply_probability", Option::TYPE_FLOAT, Option::LEVEL_DEV)
6220 .set_default(0)
6221 .set_description(""),
c07f9fc5 6222
d2e6a577
FG
6223 Option("mds_wipe_sessions", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6224 .set_default(0)
6225 .set_description(""),
c07f9fc5 6226
d2e6a577
FG
6227 Option("mds_wipe_ino_prealloc", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6228 .set_default(0)
6229 .set_description(""),
c07f9fc5 6230
d2e6a577
FG
6231 Option("mds_skip_ino", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6232 .set_default(0)
6233 .set_description(""),
c07f9fc5 6234
d2e6a577
FG
6235 Option("mds_standby_for_name", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6236 .set_default("")
6237 .set_description(""),
c07f9fc5 6238
d2e6a577
FG
6239 Option("mds_standby_for_rank", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6240 .set_default(-1)
6241 .set_description(""),
c07f9fc5 6242
d2e6a577
FG
6243 Option("mds_standby_for_fscid", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6244 .set_default(-1)
6245 .set_description(""),
c07f9fc5 6246
d2e6a577
FG
6247 Option("mds_standby_replay", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6248 .set_default(false)
6249 .set_description(""),
c07f9fc5 6250
d2e6a577
FG
6251 Option("mds_enable_op_tracker", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6252 .set_default(true)
6253 .set_description(""),
c07f9fc5 6254
d2e6a577
FG
6255 Option("mds_op_history_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
6256 .set_default(20)
6257 .set_description(""),
c07f9fc5 6258
d2e6a577
FG
6259 Option("mds_op_history_duration", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
6260 .set_default(600)
6261 .set_description(""),
c07f9fc5 6262
d2e6a577
FG
6263 Option("mds_op_complaint_time", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6264 .set_default(30)
6265 .set_description(""),
c07f9fc5 6266
d2e6a577
FG
6267 Option("mds_op_log_threshold", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6268 .set_default(5)
6269 .set_description(""),
c07f9fc5 6270
d2e6a577
FG
6271 Option("mds_snap_min_uid", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
6272 .set_default(0)
6273 .set_description(""),
c07f9fc5 6274
d2e6a577
FG
6275 Option("mds_snap_max_uid", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
6276 .set_default(4294967294)
6277 .set_description(""),
c07f9fc5 6278
d2e6a577
FG
6279 Option("mds_snap_rstat", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6280 .set_default(false)
6281 .set_description(""),
c07f9fc5 6282
d2e6a577
FG
6283 Option("mds_verify_backtrace", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
6284 .set_default(1)
6285 .set_description(""),
c07f9fc5 6286
d2e6a577
FG
6287 Option("mds_max_completed_flushes", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
6288 .set_default(100000)
6289 .set_description(""),
c07f9fc5 6290
d2e6a577
FG
6291 Option("mds_max_completed_requests", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
6292 .set_default(100000)
6293 .set_description(""),
c07f9fc5 6294
d2e6a577
FG
6295 Option("mds_action_on_write_error", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
6296 .set_default(1)
6297 .set_description(""),
c07f9fc5 6298
d2e6a577
FG
6299 Option("mds_mon_shutdown_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6300 .set_default(5)
6301 .set_description(""),
c07f9fc5 6302
d2e6a577
FG
6303 Option("mds_max_purge_files", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
6304 .set_default(64)
6305 .set_description(""),
c07f9fc5 6306
d2e6a577
FG
6307 Option("mds_max_purge_ops", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
6308 .set_default(8192)
6309 .set_description(""),
c07f9fc5 6310
d2e6a577
FG
6311 Option("mds_max_purge_ops_per_pg", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6312 .set_default(0.5)
6313 .set_description(""),
c07f9fc5 6314
d2e6a577
FG
6315 Option("mds_purge_queue_busy_flush_period", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6316 .set_default(1.0)
6317 .set_description(""),
c07f9fc5 6318
d2e6a577
FG
6319 Option("mds_root_ino_uid", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6320 .set_default(0)
6321 .set_description(""),
c07f9fc5 6322
d2e6a577
FG
6323 Option("mds_root_ino_gid", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6324 .set_default(0)
6325 .set_description(""),
c07f9fc5 6326
d2e6a577
FG
6327 Option("mds_max_scrub_ops_in_progress", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6328 .set_default(5)
6329 .set_description(""),
c07f9fc5 6330
d2e6a577
FG
6331 Option("mds_damage_table_max_entries", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6332 .set_default(10000)
6333 .set_description(""),
6334
6335 Option("mds_client_writeable_range_max_inc_objs", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
6336 .set_default(1024)
6337 .set_description(""),
3efd9988
FG
6338
6339 Option("mds_min_caps_per_client", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
6340 .set_default(100)
6341 .set_description("minimum number of capabilities a client may hold"),
6342
94b18763 6343 Option("mds_max_ratio_caps_per_client", Option::TYPE_FLOAT, Option::LEVEL_DEV)
3efd9988
FG
6344 .set_default(.8)
6345 .set_description("maximum ratio of current caps that may be recalled during MDS cache pressure"),
94b18763
FG
6346 Option("mds_hack_allow_loading_invalid_metadata", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6347 .set_default(0)
6348 .set_description("INTENTIONALLY CAUSE DATA LOSS by bypasing checks for invalid metadata on disk. Allows testing repair tools."),
d2e6a577
FG
6349 });
6350}
c07f9fc5 6351
d2e6a577
FG
6352std::vector<Option> get_mds_client_options() {
6353 return std::vector<Option>({
6354 Option("client_cache_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6355 .set_default(16384)
6356 .set_description(""),
c07f9fc5 6357
d2e6a577
FG
6358 Option("client_cache_mid", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6359 .set_default(.75)
6360 .set_description(""),
c07f9fc5 6361
d2e6a577
FG
6362 Option("client_use_random_mds", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6363 .set_default(false)
6364 .set_description(""),
c07f9fc5 6365
d2e6a577
FG
6366 Option("client_mount_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6367 .set_default(300.0)
6368 .set_description(""),
c07f9fc5 6369
d2e6a577
FG
6370 Option("client_tick_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6371 .set_default(1.0)
6372 .set_description(""),
c07f9fc5 6373
d2e6a577
FG
6374 Option("client_trace", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6375 .set_default("")
6376 .set_description(""),
c07f9fc5 6377
d2e6a577
FG
6378 Option("client_readahead_min", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6379 .set_default(128*1024)
6380 .set_description(""),
c07f9fc5 6381
d2e6a577
FG
6382 Option("client_readahead_max_bytes", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6383 .set_default(0)
6384 .set_description(""),
c07f9fc5 6385
d2e6a577
FG
6386 Option("client_readahead_max_periods", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6387 .set_default(4)
6388 .set_description(""),
c07f9fc5 6389
d2e6a577
FG
6390 Option("client_reconnect_stale", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6391 .set_default(false)
6392 .set_description(""),
c07f9fc5 6393
d2e6a577
FG
6394 Option("client_snapdir", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6395 .set_default(".snap")
6396 .set_description(""),
c07f9fc5 6397
d2e6a577
FG
6398 Option("client_mountpoint", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6399 .set_default("/")
6400 .set_description(""),
c07f9fc5 6401
d2e6a577
FG
6402 Option("client_mount_uid", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6403 .set_default(-1)
6404 .set_description(""),
c07f9fc5 6405
d2e6a577
FG
6406 Option("client_mount_gid", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6407 .set_default(-1)
6408 .set_description(""),
c07f9fc5 6409
d2e6a577
FG
6410 Option("client_notify_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6411 .set_default(10)
6412 .set_description(""),
c07f9fc5 6413
d2e6a577
FG
6414 Option("osd_client_watch_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6415 .set_default(30)
6416 .set_description(""),
c07f9fc5 6417
d2e6a577
FG
6418 Option("client_caps_release_delay", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6419 .set_default(5)
6420 .set_description(""),
c07f9fc5 6421
d2e6a577
FG
6422 Option("client_quota_df", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6423 .set_default(true)
6424 .set_description(""),
c07f9fc5 6425
d2e6a577
FG
6426 Option("client_oc", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6427 .set_default(true)
6428 .set_description(""),
c07f9fc5 6429
d2e6a577 6430 Option("client_oc_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144 6431 .set_default(200_M)
d2e6a577 6432 .set_description(""),
c07f9fc5 6433
d2e6a577 6434 Option("client_oc_max_dirty", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144 6435 .set_default(100_M)
d2e6a577 6436 .set_description(""),
c07f9fc5 6437
d2e6a577 6438 Option("client_oc_target_dirty", Option::TYPE_INT, Option::LEVEL_ADVANCED)
b32b8144 6439 .set_default(8_M)
d2e6a577 6440 .set_description(""),
c07f9fc5 6441
d2e6a577
FG
6442 Option("client_oc_max_dirty_age", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6443 .set_default(5.0)
6444 .set_description(""),
c07f9fc5 6445
d2e6a577
FG
6446 Option("client_oc_max_objects", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6447 .set_default(1000)
6448 .set_description(""),
c07f9fc5 6449
d2e6a577
FG
6450 Option("client_debug_getattr_caps", Option::TYPE_BOOL, Option::LEVEL_DEV)
6451 .set_default(false)
6452 .set_description(""),
6453
6454 Option("client_debug_force_sync_read", Option::TYPE_BOOL, Option::LEVEL_DEV)
6455 .set_default(false)
6456 .set_description(""),
c07f9fc5 6457
d2e6a577
FG
6458 Option("client_debug_inject_tick_delay", Option::TYPE_INT, Option::LEVEL_DEV)
6459 .set_default(0)
6460 .set_description(""),
c07f9fc5 6461
d2e6a577 6462 Option("client_max_inline_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
b32b8144 6463 .set_default(4_K)
d2e6a577 6464 .set_description(""),
c07f9fc5 6465
d2e6a577
FG
6466 Option("client_inject_release_failure", Option::TYPE_BOOL, Option::LEVEL_DEV)
6467 .set_default(false)
6468 .set_description(""),
c07f9fc5 6469
d2e6a577
FG
6470 Option("client_inject_fixed_oldest_tid", Option::TYPE_BOOL, Option::LEVEL_DEV)
6471 .set_default(false)
6472 .set_description(""),
c07f9fc5 6473
d2e6a577
FG
6474 Option("client_metadata", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6475 .set_default("")
6476 .set_description(""),
c07f9fc5 6477
d2e6a577
FG
6478 Option("client_acl_type", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6479 .set_default("")
6480 .set_description(""),
c07f9fc5 6481
d2e6a577
FG
6482 Option("client_permissions", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6483 .set_default(true)
6484 .set_description(""),
c07f9fc5 6485
d2e6a577
FG
6486 Option("client_dirsize_rbytes", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6487 .set_default(true)
6488 .set_description(""),
c07f9fc5 6489
d2e6a577
FG
6490 Option("fuse_use_invalidate_cb", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6491 .set_default(true)
6492 .set_description(""),
c07f9fc5 6493
d2e6a577
FG
6494 Option("fuse_disable_pagecache", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6495 .set_default(false)
6496 .set_description(""),
c07f9fc5 6497
d2e6a577
FG
6498 Option("fuse_allow_other", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6499 .set_default(true)
6500 .set_description(""),
c07f9fc5 6501
d2e6a577
FG
6502 Option("fuse_default_permissions", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6503 .set_default(false)
6504 .set_description(""),
c07f9fc5 6505
d2e6a577
FG
6506 Option("fuse_big_writes", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6507 .set_default(true)
6508 .set_description(""),
c07f9fc5 6509
d2e6a577
FG
6510 Option("fuse_atomic_o_trunc", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6511 .set_default(true)
6512 .set_description(""),
c07f9fc5 6513
d2e6a577
FG
6514 Option("fuse_debug", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6515 .set_default(false)
6516 .set_description(""),
c07f9fc5 6517
d2e6a577
FG
6518 Option("fuse_multithreaded", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6519 .set_default(true)
6520 .set_description(""),
c07f9fc5 6521
d2e6a577
FG
6522 Option("fuse_require_active_mds", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6523 .set_default(true)
6524 .set_description(""),
c07f9fc5 6525
d2e6a577
FG
6526 Option("fuse_syncfs_on_mksnap", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6527 .set_default(true)
6528 .set_description(""),
c07f9fc5 6529
d2e6a577 6530 Option("fuse_set_user_groups", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
181888fb
FG
6531 .set_default(true)
6532 .set_description("check for ceph-fuse to consider supplementary groups for permissions"),
c07f9fc5 6533
d2e6a577 6534 Option("client_try_dentry_invalidate", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
181888fb 6535 .set_default(false)
d2e6a577 6536 .set_description(""),
c07f9fc5 6537
b32b8144
FG
6538 Option("client_die_on_failed_remount", Option::TYPE_BOOL, Option::LEVEL_DEV)
6539 .set_default(false)
d2e6a577 6540 .set_description(""),
c07f9fc5 6541
b32b8144
FG
6542 Option("client_die_on_failed_dentry_invalidate", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6543 .set_default(true)
6544 .set_description("kill the client when no dentry invalidation options are available")
6545 .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."),
6546
d2e6a577
FG
6547 Option("client_check_pool_perm", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6548 .set_default(true)
6549 .set_description(""),
6550
6551 Option("client_use_faked_inos", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6552 .set_default(false)
6553 .set_description(""),
6554
6555 Option("client_mds_namespace", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6556 .set_default("")
6557 .set_description(""),
6558 });
6559}
c07f9fc5
FG
6560
6561
6562static std::vector<Option> build_options()
6563{
d2e6a577 6564 std::vector<Option> result = get_global_options();
c07f9fc5 6565
d2e6a577 6566 auto ingest = [&result](std::vector<Option>&& options, const char* svc) {
c07f9fc5
FG
6567 for (const auto &o_in : options) {
6568 Option o(o_in);
6569 o.add_service(svc);
6570 result.push_back(o);
6571 }
6572 };
6573
d2e6a577
FG
6574 ingest(get_rgw_options(), "rgw");
6575 ingest(get_rbd_options(), "rbd");
181888fb 6576 ingest(get_rbd_mirror_options(), "rbd-mirror");
d2e6a577
FG
6577 ingest(get_mds_options(), "mds");
6578 ingest(get_mds_client_options(), "mds_client");
c07f9fc5
FG
6579
6580 return result;
6581}
6582
6583const std::vector<Option> ceph_options = build_options();