]> git.proxmox.com Git - ceph.git/blob - ceph/src/common/options.cc
3ea0af62af4e63dbff2065437d4e1599ab79b167
[ceph.git] / ceph / src / common / options.cc
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
14 // Definitions for enums
15 #include "common/perf_counters.h"
16
17
18 void 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
39 int 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
48 int 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
88 void 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));
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
135 constexpr unsigned long long operator"" _min (unsigned long long min) {
136 return min * 60;
137 }
138 constexpr unsigned long long operator"" _hr (unsigned long long hr) {
139 return hr * 60 * 60;
140 }
141 constexpr unsigned long long operator"" _day (unsigned long long day) {
142 return day * 60 * 60 * 24;
143 }
144 constexpr unsigned long long operator"" _K (unsigned long long n) {
145 return n << 10;
146 }
147 constexpr unsigned long long operator"" _M (unsigned long long n) {
148 return n << 20;
149 }
150 constexpr unsigned long long operator"" _G (unsigned long long n) {
151 return n << 30;
152 }
153
154 std::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")
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"),
191
192 Option("cluster_network", Option::TYPE_STR, Option::LEVEL_ADVANCED)
193 .add_service("osd")
194 .add_tag("network")
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"),
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)
219 .set_default("ceph-mon")
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
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
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
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
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(""),
498
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("")
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"),
569
570 Option("keyfile", Option::TYPE_STR, Option::LEVEL_ADVANCED)
571 .set_default("")
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"),
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 )
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"),
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)
629 .set_default(4_K)
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)
707 .set_default(1_M)
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)
780 .set_default(128_K)
781 .set_description(""),
782
783 Option("ms_async_rdma_send_buffers", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
784 .set_default(1_K)
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(),
850
851 Option("ms_dpdk_lro", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
852 .set_default(true)
853 .set_description(""),
854
855 Option("ms_dpdk_hw_flow_control", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
856 .set_default(true)
857 .set_description(""),
858
859 Option("ms_dpdk_hw_queue_weight", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
860 .set_default(1)
861 .set_description(""),
862
863 Option("ms_dpdk_debug_allow_loopback", Option::TYPE_BOOL, Option::LEVEL_DEV)
864 .set_default(false)
865 .set_description(""),
866
867 Option("ms_dpdk_rx_buffer_count_per_core", Option::TYPE_INT, Option::LEVEL_ADVANCED)
868 .set_default(8192)
869 .set_description(""),
870
871 Option("inject_early_sigterm", Option::TYPE_BOOL, Option::LEVEL_DEV)
872 .set_default(false)
873 .set_description(""),
874
875 Option("mon_data", Option::TYPE_STR, Option::LEVEL_ADVANCED)
876 .set_default("/var/lib/ceph/mon/$cluster-$id")
877 .set_description(""),
878
879 Option("mon_initial_members", Option::TYPE_STR, Option::LEVEL_ADVANCED)
880 .set_default("")
881 .set_description(""),
882
883 Option("mon_compact_on_start", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
884 .set_default(false)
885 .set_description(""),
886
887 Option("mon_compact_on_bootstrap", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
888 .set_default(false)
889 .set_description(""),
890
891 Option("mon_compact_on_trim", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
892 .set_default(true)
893 .set_description(""),
894
895 Option("mon_osd_cache_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
896 .set_default(10)
897 .set_description(""),
898
899 Option("mon_cpu_threads", Option::TYPE_INT, Option::LEVEL_ADVANCED)
900 .set_default(4)
901 .set_description(""),
902
903 Option("mon_osd_mapping_pgs_per_chunk", Option::TYPE_INT, Option::LEVEL_ADVANCED)
904 .set_default(4096)
905 .set_description(""),
906
907 Option("mon_osd_max_creating_pgs", Option::TYPE_INT, Option::LEVEL_ADVANCED)
908 .set_default(1024)
909 .set_description(""),
910
911 Option("mon_tick_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
912 .set_default(5)
913 .set_description(""),
914
915 Option("mon_session_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
916 .set_default(300)
917 .set_description(""),
918
919 Option("mon_subscribe_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
920 .set_default(1_day)
921 .set_description(""),
922
923 Option("mon_delta_reset_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
924 .set_default(10)
925 .set_description(""),
926
927 Option("mon_osd_laggy_halflife", Option::TYPE_INT, Option::LEVEL_ADVANCED)
928 .set_default(1_hr)
929 .set_description(""),
930
931 Option("mon_osd_laggy_weight", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
932 .set_default(.3)
933 .set_description(""),
934
935 Option("mon_osd_laggy_max_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
936 .set_default(300)
937 .set_description(""),
938
939 Option("mon_osd_adjust_heartbeat_grace", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
940 .set_default(true)
941 .set_description(""),
942
943 Option("mon_osd_adjust_down_out_interval", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
944 .set_default(true)
945 .set_description(""),
946
947 Option("mon_osd_auto_mark_in", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
948 .set_default(false)
949 .set_description(""),
950
951 Option("mon_osd_auto_mark_auto_out_in", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
952 .set_default(true)
953 .set_description(""),
954
955 Option("mon_osd_auto_mark_new_in", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
956 .set_default(true)
957 .set_description(""),
958
959 Option("mon_osd_destroyed_out_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
960 .set_default(600)
961 .set_description(""),
962
963 Option("mon_osd_down_out_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
964 .set_default(600)
965 .set_description(""),
966
967 Option("mon_osd_down_out_subtree_limit", Option::TYPE_STR, Option::LEVEL_ADVANCED)
968 .set_default("rack")
969 .set_description(""),
970
971 Option("mon_osd_min_up_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
972 .set_default(.3)
973 .set_description(""),
974
975 Option("mon_osd_min_in_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
976 .set_default(.75)
977 .set_description(""),
978
979 Option("mon_osd_warn_op_age", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
980 .set_default(32)
981 .set_description(""),
982
983 Option("mon_osd_err_op_age_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
984 .set_default(128)
985 .set_description(""),
986
987 Option("mon_osd_max_split_count", Option::TYPE_INT, Option::LEVEL_ADVANCED)
988 .set_default(32)
989 .set_description(""),
990
991 Option("mon_osd_allow_primary_temp", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
992 .set_default(false)
993 .set_description(""),
994
995 Option("mon_osd_allow_primary_affinity", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
996 .set_default(false)
997 .set_description(""),
998
999 Option("mon_osd_prime_pg_temp", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1000 .set_default(true)
1001 .set_description(""),
1002
1003 Option("mon_osd_prime_pg_temp_max_time", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1004 .set_default(.5)
1005 .set_description(""),
1006
1007 Option("mon_osd_prime_pg_temp_max_estimate", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1008 .set_default(.25)
1009 .set_description(""),
1010
1011 Option("mon_osd_pool_ec_fast_read", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1012 .set_default(false)
1013 .set_description(""),
1014
1015 Option("mon_stat_smooth_intervals", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1016 .set_default(6)
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"),
1020
1021 Option("mon_election_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1022 .set_default(5)
1023 .set_description(""),
1024
1025 Option("mon_lease", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1026 .set_default(5)
1027 .set_description(""),
1028
1029 Option("mon_lease_renew_interval_factor", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1030 .set_default(.6)
1031 .set_description(""),
1032
1033 Option("mon_lease_ack_timeout_factor", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1034 .set_default(2.0)
1035 .set_description(""),
1036
1037 Option("mon_accept_timeout_factor", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1038 .set_default(2.0)
1039 .set_description(""),
1040
1041 Option("mon_clock_drift_allowed", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1042 .set_default(.050)
1043 .set_description(""),
1044
1045 Option("mon_clock_drift_warn_backoff", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1046 .set_default(5)
1047 .set_description(""),
1048
1049 Option("mon_timecheck_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1050 .set_default(300.0)
1051 .set_description(""),
1052
1053 Option("mon_timecheck_skew_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1054 .set_default(30.0)
1055 .set_description(""),
1056
1057 Option("mon_pg_stuck_threshold", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1058 .set_default(60)
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"),
1062
1063 Option("mon_pg_min_inactive", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1064 .set_default(1)
1065 .set_description(""),
1066
1067 Option("mon_pg_warn_min_per_osd", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1068 .set_default(30)
1069 .set_description("minimal number PGs per (in) osd before we warn the admin"),
1070
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"),
1074
1075 Option("mon_pg_warn_max_object_skew", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1076 .set_default(10.0)
1077 .set_description("max skew few average in objects per pg")
1078 .add_service("mgr"),
1079
1080 Option("mon_pg_warn_min_objects", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1081 .set_default(10000)
1082 .set_description("do not warn below this object #")
1083 .add_service("mgr"),
1084
1085 Option("mon_pg_warn_min_pool_objects", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1086 .set_default(1000)
1087 .set_description("do not warn on pools below this object #")
1088 .add_service("mgr"),
1089
1090 Option("mon_pg_check_down_all_threshold", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1091 .set_default(.5)
1092 .set_description("threshold of down osds after which we check all pgs")
1093 .add_service("mgr"),
1094
1095 Option("mon_cache_target_full_warn_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1096 .set_default(.66)
1097 .set_description(""),
1098
1099 Option("mon_osd_full_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1100 .set_default(.95)
1101 .set_description(""),
1102
1103 Option("mon_osd_backfillfull_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1104 .set_default(.90)
1105 .set_description(""),
1106
1107 Option("mon_osd_nearfull_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1108 .set_default(.85)
1109 .set_description(""),
1110
1111 Option("mon_osd_initial_require_min_compat_client", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1112 .set_default("jewel")
1113 .set_description(""),
1114
1115 Option("mon_allow_pool_delete", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1116 .set_default(false)
1117 .set_description(""),
1118
1119 Option("mon_fake_pool_delete", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1120 .set_default(false)
1121 .set_description(""),
1122
1123 Option("mon_globalid_prealloc", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1124 .set_default(10000)
1125 .set_description(""),
1126
1127 Option("mon_osd_report_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1128 .set_default(900)
1129 .set_description(""),
1130
1131 Option("mon_force_standby_active", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1132 .set_default(true)
1133 .set_description(""),
1134
1135 Option("mon_warn_on_legacy_crush_tunables", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1136 .set_default(true)
1137 .set_description(""),
1138
1139 Option("mon_crush_min_required_version", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1140 .set_default("firefly")
1141 .set_description(""),
1142
1143 Option("mon_warn_on_crush_straw_calc_version_zero", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1144 .set_default(true)
1145 .set_description(""),
1146
1147 Option("mon_warn_on_osd_down_out_interval_zero", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1148 .set_default(true)
1149 .set_description(""),
1150
1151 Option("mon_warn_on_cache_pools_without_hit_sets", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1152 .set_default(true)
1153 .set_description(""),
1154
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"),
1158
1159 Option("mon_min_osdmap_epochs", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1160 .set_default(500)
1161 .set_description(""),
1162
1163 Option("mon_max_pgmap_epochs", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1164 .set_default(500)
1165 .set_description(""),
1166
1167 Option("mon_max_log_epochs", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1168 .set_default(500)
1169 .set_description(""),
1170
1171 Option("mon_max_mdsmap_epochs", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1172 .set_default(500)
1173 .set_description(""),
1174
1175 Option("mon_max_mgrmap_epochs", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1176 .set_default(500)
1177 .set_description(""),
1178
1179 Option("mon_max_osd", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1180 .set_default(10000)
1181 .set_description(""),
1182
1183 Option("mon_probe_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1184 .set_default(2.0)
1185 .set_description(""),
1186
1187 Option("mon_client_bytes", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1188 .set_default(100ul << 20)
1189 .set_description(""),
1190
1191 Option("mon_mgr_proxy_client_bytes_ratio", Option::TYPE_FLOAT, Option::LEVEL_DEV)
1192 .set_default(.3)
1193 .set_description("ratio of mon_client_bytes that can be consumed by "
1194 "proxied mgr commands before we error out to client"),
1195
1196 Option("mon_log_max_summary", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1197 .set_default(50)
1198 .set_description(""),
1199
1200 Option("mon_daemon_bytes", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1201 .set_default(400ul << 20)
1202 .set_description(""),
1203
1204 Option("mon_max_log_entries_per_event", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1205 .set_default(4096)
1206 .set_description(""),
1207
1208 Option("mon_reweight_min_pgs_per_osd", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1209 .set_default(10)
1210 .set_description(""),
1211
1212 Option("mon_reweight_min_bytes_per_osd", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1213 .set_default(100_M)
1214 .set_description(""),
1215
1216 Option("mon_reweight_max_osds", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1217 .set_default(4)
1218 .set_description(""),
1219
1220 Option("mon_reweight_max_change", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1221 .set_default(0.05)
1222 .set_description(""),
1223
1224 Option("mon_health_data_update_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1225 .set_default(60.0)
1226 .set_description(""),
1227
1228 Option("mon_health_to_clog", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1229 .set_default(true)
1230 .set_description(""),
1231
1232 Option("mon_health_to_clog_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1233 .set_default(1_hr)
1234 .set_description(""),
1235
1236 Option("mon_health_to_clog_tick_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1237 .set_default(60.0)
1238 .set_description(""),
1239
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"),
1243
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"),
1247
1248 Option("mon_health_max_detail", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1249 .set_default(50)
1250 .set_description("max detailed pgs to report in health detail"),
1251
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
1258 Option("mon_data_avail_crit", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1259 .set_default(5)
1260 .set_description(""),
1261
1262 Option("mon_data_avail_warn", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1263 .set_default(30)
1264 .set_description(""),
1265
1266 Option("mon_data_size_warn", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1267 .set_default(15_G)
1268 .set_description(""),
1269
1270 Option("mon_warn_not_scrubbed", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1271 .set_default(0)
1272 .set_description(""),
1273
1274 Option("mon_warn_not_deep_scrubbed", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1275 .set_default(0)
1276 .set_description(""),
1277
1278 Option("mon_scrub_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1279 .set_default(1_day)
1280 .set_description(""),
1281
1282 Option("mon_scrub_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1283 .set_default(5_min)
1284 .set_description(""),
1285
1286 Option("mon_scrub_max_keys", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1287 .set_default(100)
1288 .set_description(""),
1289
1290 Option("mon_scrub_inject_crc_mismatch", Option::TYPE_FLOAT, Option::LEVEL_DEV)
1291 .set_default(0.0)
1292 .set_description(""),
1293
1294 Option("mon_scrub_inject_missing_keys", Option::TYPE_FLOAT, Option::LEVEL_DEV)
1295 .set_default(0.0)
1296 .set_description(""),
1297
1298 Option("mon_config_key_max_entry_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1299 .set_default(4_K)
1300 .set_description(""),
1301
1302 Option("mon_sync_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1303 .set_default(60.0)
1304 .set_description(""),
1305
1306 Option("mon_sync_max_payload_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1307 .set_default(1_M)
1308 .set_description(""),
1309
1310 Option("mon_sync_debug", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1311 .set_default(false)
1312 .set_description(""),
1313
1314 Option("mon_inject_sync_get_chunk_delay", Option::TYPE_FLOAT, Option::LEVEL_DEV)
1315 .set_default(0)
1316 .set_description(""),
1317
1318 Option("mon_osd_min_down_reporters", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1319 .set_default(2)
1320 .set_description(""),
1321
1322 Option("mon_osd_reporter_subtree_level", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1323 .set_default("host")
1324 .set_description(""),
1325
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
1331 Option("mon_osd_force_trim_to", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1332 .set_default(0)
1333 .set_description(""),
1334
1335 Option("mon_mds_force_trim_to", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1336 .set_default(0)
1337 .set_description(""),
1338
1339 Option("mon_mds_skip_sanity", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1340 .set_default(false)
1341 .set_description(""),
1342
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
1347 Option("mon_debug_deprecated_as_obsolete", Option::TYPE_BOOL, Option::LEVEL_DEV)
1348 .set_default(false)
1349 .set_description(""),
1350
1351 Option("mon_debug_dump_transactions", Option::TYPE_BOOL, Option::LEVEL_DEV)
1352 .set_default(false)
1353 .set_description(""),
1354
1355 Option("mon_debug_dump_json", Option::TYPE_BOOL, Option::LEVEL_DEV)
1356 .set_default(false)
1357 .set_description(""),
1358
1359 Option("mon_debug_dump_location", Option::TYPE_STR, Option::LEVEL_DEV)
1360 .set_default("/var/log/ceph/$cluster-$name.tdump")
1361 .set_description(""),
1362
1363 Option("mon_debug_no_require_luminous", Option::TYPE_BOOL, Option::LEVEL_DEV)
1364 .set_default(false)
1365 .set_description(""),
1366
1367 Option("mon_debug_no_require_bluestore_for_ec_overwrites", Option::TYPE_BOOL, Option::LEVEL_DEV)
1368 .set_default(false)
1369 .set_description(""),
1370
1371 Option("mon_debug_no_initial_persistent_features", Option::TYPE_BOOL, Option::LEVEL_DEV)
1372 .set_default(false)
1373 .set_description(""),
1374
1375 Option("mon_inject_transaction_delay_max", Option::TYPE_FLOAT, Option::LEVEL_DEV)
1376 .set_default(10.0)
1377 .set_description(""),
1378
1379 Option("mon_inject_transaction_delay_probability", Option::TYPE_FLOAT, Option::LEVEL_DEV)
1380 .set_default(0)
1381 .set_description(""),
1382
1383 Option("mon_sync_provider_kill_at", Option::TYPE_INT, Option::LEVEL_DEV)
1384 .set_default(0)
1385 .set_description(""),
1386
1387 Option("mon_sync_requester_kill_at", Option::TYPE_INT, Option::LEVEL_DEV)
1388 .set_default(0)
1389 .set_description(""),
1390
1391 Option("mon_force_quorum_join", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1392 .set_default(false)
1393 .set_description(""),
1394
1395 Option("mon_keyvaluedb", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1396 .set_default("rocksdb")
1397 .set_description(""),
1398
1399 Option("mon_debug_unsafe_allow_tier_with_nonempty_snaps", Option::TYPE_BOOL, Option::LEVEL_DEV)
1400 .set_default(false)
1401 .set_description(""),
1402
1403 Option("mon_osd_blacklist_default_expire", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
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"),
1413
1414 Option("mon_osd_crush_smoke_test", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1415 .set_default(true)
1416 .set_description(""),
1417
1418 Option("paxos_stash_full_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1419 .set_default(25)
1420 .set_description(""),
1421
1422 Option("paxos_max_join_drift", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1423 .set_default(10)
1424 .set_description(""),
1425
1426 Option("paxos_propose_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1427 .set_default(1.0)
1428 .set_description(""),
1429
1430 Option("paxos_min_wait", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1431 .set_default(0.05)
1432 .set_description(""),
1433
1434 Option("paxos_min", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1435 .set_default(500)
1436 .set_description(""),
1437
1438 Option("paxos_trim_min", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1439 .set_default(250)
1440 .set_description(""),
1441
1442 Option("paxos_trim_max", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1443 .set_default(500)
1444 .set_description(""),
1445
1446 Option("paxos_service_trim_min", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1447 .set_default(250)
1448 .set_description(""),
1449
1450 Option("paxos_service_trim_max", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1451 .set_default(500)
1452 .set_description(""),
1453
1454 Option("paxos_kill_at", Option::TYPE_INT, Option::LEVEL_DEV)
1455 .set_default(0)
1456 .set_description(""),
1457
1458 Option("auth_cluster_required", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1459 .set_default("cephx")
1460 .set_description(""),
1461
1462 Option("auth_service_required", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1463 .set_default("cephx")
1464 .set_description(""),
1465
1466 Option("auth_client_required", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1467 .set_default("cephx, none")
1468 .set_description(""),
1469
1470 Option("auth_supported", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1471 .set_default("")
1472 .set_description(""),
1473
1474 Option("max_rotating_auth_attempts", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1475 .set_default(10)
1476 .set_description(""),
1477
1478 Option("cephx_require_signatures", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1479 .set_default(false)
1480 .set_description(""),
1481
1482 Option("cephx_cluster_require_signatures", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1483 .set_default(false)
1484 .set_description(""),
1485
1486 Option("cephx_service_require_signatures", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1487 .set_default(false)
1488 .set_description(""),
1489
1490 Option("cephx_sign_messages", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1491 .set_default(true)
1492 .set_description(""),
1493
1494 Option("auth_mon_ticket_ttl", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1495 .set_default(12_hr)
1496 .set_description(""),
1497
1498 Option("auth_service_ticket_ttl", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1499 .set_default(1_hr)
1500 .set_description(""),
1501
1502 Option("auth_debug", Option::TYPE_BOOL, Option::LEVEL_DEV)
1503 .set_default(false)
1504 .set_description(""),
1505
1506 Option("mon_client_hunt_parallel", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1507 .set_default(2)
1508 .set_description(""),
1509
1510 Option("mon_client_hunt_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1511 .set_default(3.0)
1512 .set_description(""),
1513
1514 Option("mon_client_ping_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1515 .set_default(10.0)
1516 .set_description(""),
1517
1518 Option("mon_client_ping_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1519 .set_default(30.0)
1520 .set_description(""),
1521
1522 Option("mon_client_hunt_interval_backoff", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1523 .set_default(2.0)
1524 .set_description(""),
1525
1526 Option("mon_client_hunt_interval_min_multiple", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1527 .set_default(1.0)
1528 .set_description(""),
1529
1530 Option("mon_client_hunt_interval_max_multiple", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1531 .set_default(10.0)
1532 .set_description(""),
1533
1534 Option("mon_client_max_log_entries_per_message", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1535 .set_default(1000)
1536 .set_description(""),
1537
1538 Option("mon_max_pool_pg_num", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1539 .set_default(65536)
1540 .set_description(""),
1541
1542 Option("mon_pool_quota_warn_threshold", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1543 .set_default(0)
1544 .set_description("percent of quota at which to issue warnings")
1545 .add_service("mgr"),
1546
1547 Option("mon_pool_quota_crit_threshold", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1548 .set_default(0)
1549 .set_description("percent of quota at which to issue errors")
1550 .add_service("mgr"),
1551
1552 Option("crush_location", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1553 .set_default("")
1554 .set_description(""),
1555
1556 Option("crush_location_hook", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1557 .set_default("")
1558 .set_description(""),
1559
1560 Option("crush_location_hook_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1561 .set_default(10)
1562 .set_description(""),
1563
1564 Option("objecter_tick_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1565 .set_default(5.0)
1566 .set_description(""),
1567
1568 Option("objecter_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1569 .set_default(10.0)
1570 .set_description(""),
1571
1572 Option("objecter_inflight_op_bytes", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1573 .set_default(100_M)
1574 .set_description(""),
1575
1576 Option("objecter_inflight_ops", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1577 .set_default(1024)
1578 .set_description(""),
1579
1580 Option("objecter_completion_locks_per_session", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1581 .set_default(32)
1582 .set_description(""),
1583
1584 Option("objecter_inject_no_watch_ping", Option::TYPE_BOOL, Option::LEVEL_DEV)
1585 .set_default(false)
1586 .set_description(""),
1587
1588 Option("objecter_retry_writes_after_first_reply", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1589 .set_default(false)
1590 .set_description(""),
1591
1592 Option("objecter_debug_inject_relock_delay", Option::TYPE_BOOL, Option::LEVEL_DEV)
1593 .set_default(false)
1594 .set_description(""),
1595
1596 Option("filer_max_purge_ops", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1597 .set_default(10)
1598 .set_description(""),
1599
1600 Option("filer_max_truncate_ops", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1601 .set_default(128)
1602 .set_description(""),
1603
1604 Option("journaler_write_head_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1605 .set_default(15)
1606 .set_description(""),
1607
1608 Option("journaler_prefetch_periods", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1609 .set_default(10)
1610 .set_description(""),
1611
1612 Option("journaler_prezero_periods", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1613 .set_default(5)
1614 .set_description(""),
1615
1616 Option("osd_check_max_object_name_len_on_startup", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1617 .set_default(true)
1618 .set_description(""),
1619
1620 Option("osd_max_backfills", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1621 .set_default(1)
1622 .set_description(""),
1623
1624 Option("osd_min_recovery_priority", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1625 .set_default(0)
1626 .set_description(""),
1627
1628 Option("osd_backfill_retry_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1629 .set_default(30.0)
1630 .set_description(""),
1631
1632 Option("osd_recovery_retry_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1633 .set_default(30.0)
1634 .set_description(""),
1635
1636 Option("osd_agent_max_ops", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1637 .set_default(4)
1638 .set_description(""),
1639
1640 Option("osd_agent_max_low_ops", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1641 .set_default(2)
1642 .set_description(""),
1643
1644 Option("osd_agent_min_evict_effort", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1645 .set_default(.1)
1646 .set_description(""),
1647
1648 Option("osd_agent_quantize_effort", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1649 .set_default(.1)
1650 .set_description(""),
1651
1652 Option("osd_agent_delay_time", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1653 .set_default(5.0)
1654 .set_description(""),
1655
1656 Option("osd_find_best_info_ignore_history_les", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1657 .set_default(false)
1658 .set_description(""),
1659
1660 Option("osd_agent_hist_halflife", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1661 .set_default(1000)
1662 .set_description(""),
1663
1664 Option("osd_agent_slop", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1665 .set_default(.02)
1666 .set_description(""),
1667
1668 Option("osd_uuid", Option::TYPE_UUID, Option::LEVEL_ADVANCED)
1669 .set_default(uuid_d())
1670 .set_description(""),
1671
1672 Option("osd_data", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1673 .set_default("/var/lib/ceph/osd/$cluster-$id")
1674 .set_description(""),
1675
1676 Option("osd_journal", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1677 .set_default("/var/lib/ceph/osd/$cluster-$id/journal")
1678 .set_description(""),
1679
1680 Option("osd_journal_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1681 .set_default(5120)
1682 .set_description(""),
1683
1684 Option("osd_journal_flush_on_shutdown", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1685 .set_default(true)
1686 .set_description(""),
1687
1688 Option("osd_os_flags", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1689 .set_default(0)
1690 .set_description(""),
1691
1692 Option("osd_max_write_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1693 .set_default(90)
1694 .set_description(""),
1695
1696 Option("osd_max_pgls", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1697 .set_default(1024)
1698 .set_description(""),
1699
1700 Option("osd_client_message_size_cap", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1701 .set_default(500_M)
1702 .set_description(""),
1703
1704 Option("osd_client_message_cap", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1705 .set_default(100)
1706 .set_description(""),
1707
1708 Option("osd_pg_bits", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1709 .set_default(6)
1710 .set_description(""),
1711
1712 Option("osd_pgp_bits", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1713 .set_default(6)
1714 .set_description(""),
1715
1716 Option("osd_crush_update_weight_set", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1717 .set_default(true)
1718 .set_description(""),
1719
1720 Option("osd_crush_chooseleaf_type", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1721 .set_default(1)
1722 .set_description(""),
1723
1724 Option("osd_pool_use_gmt_hitset", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1725 .set_default(true)
1726 .set_description(""),
1727
1728 Option("osd_crush_update_on_start", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1729 .set_default(true)
1730 .set_description(""),
1731
1732 Option("osd_class_update_on_start", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1733 .set_default(true)
1734 .set_description(""),
1735
1736 Option("osd_crush_initial_weight", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1737 .set_default(-1)
1738 .set_description(""),
1739
1740 Option("osd_pool_default_crush_rule", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1741 .set_default(-1)
1742 .set_description(""),
1743
1744 Option("osd_pool_erasure_code_stripe_unit", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1745 .set_default(4_K)
1746 .set_description(""),
1747
1748 Option("osd_pool_default_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1749 .set_default(3)
1750 .set_description(""),
1751
1752 Option("osd_pool_default_min_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1753 .set_default(0)
1754 .set_description(""),
1755
1756 Option("osd_pool_default_pg_num", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1757 .set_default(8)
1758 .set_description(""),
1759
1760 Option("osd_pool_default_pgp_num", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1761 .set_default(8)
1762 .set_description(""),
1763
1764 Option("osd_pool_default_type", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1765 .set_default("replicated")
1766 .set_description(""),
1767
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(""),
1771
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(""),
1779
1780 Option("osd_allow_recovery_below_min_size", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1781 .set_default(true)
1782 .set_description(""),
1783
1784 Option("osd_pool_default_flags", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1785 .set_default(0)
1786 .set_description(""),
1787
1788 Option("osd_pool_default_flag_hashpspool", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1789 .set_default(true)
1790 .set_description(""),
1791
1792 Option("osd_pool_default_flag_nodelete", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1793 .set_default(false)
1794 .set_description(""),
1795
1796 Option("osd_pool_default_flag_nopgchange", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1797 .set_default(false)
1798 .set_description(""),
1799
1800 Option("osd_pool_default_flag_nosizechange", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
1801 .set_default(false)
1802 .set_description(""),
1803
1804 Option("osd_pool_default_hit_set_bloom_fpp", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1805 .set_default(.05)
1806 .set_description(""),
1807
1808 Option("osd_pool_default_cache_target_dirty_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1809 .set_default(.4)
1810 .set_description(""),
1811
1812 Option("osd_pool_default_cache_target_dirty_high_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1813 .set_default(.6)
1814 .set_description(""),
1815
1816 Option("osd_pool_default_cache_target_full_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
1817 .set_default(.8)
1818 .set_description(""),
1819
1820 Option("osd_pool_default_cache_min_flush_age", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1821 .set_default(0)
1822 .set_description(""),
1823
1824 Option("osd_pool_default_cache_min_evict_age", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1825 .set_default(0)
1826 .set_description(""),
1827
1828 Option("osd_pool_default_cache_max_evict_check_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1829 .set_default(10)
1830 .set_description(""),
1831
1832 Option("osd_hit_set_min_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1833 .set_default(1000)
1834 .set_description(""),
1835
1836 Option("osd_hit_set_max_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1837 .set_default(100000)
1838 .set_description(""),
1839
1840 Option("osd_hit_set_namespace", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1841 .set_default(".ceph-internal")
1842 .set_description(""),
1843
1844 Option("osd_tier_promote_max_objects_sec", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1845 .set_default(25)
1846 .set_description(""),
1847
1848 Option("osd_tier_promote_max_bytes_sec", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
1849 .set_default(5_M)
1850 .set_description(""),
1851
1852 Option("osd_tier_default_cache_mode", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1853 .set_default("writeback")
1854 .set_description(""),
1855
1856 Option("osd_tier_default_cache_hit_set_count", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1857 .set_default(4)
1858 .set_description(""),
1859
1860 Option("osd_tier_default_cache_hit_set_period", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1861 .set_default(1200)
1862 .set_description(""),
1863
1864 Option("osd_tier_default_cache_hit_set_type", Option::TYPE_STR, Option::LEVEL_ADVANCED)
1865 .set_default("bloom")
1866 .set_description(""),
1867
1868 Option("osd_tier_default_cache_min_read_recency_for_promote", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1869 .set_default(1)
1870 .set_description(""),
1871
1872 Option("osd_tier_default_cache_min_write_recency_for_promote", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1873 .set_default(1)
1874 .set_description(""),
1875
1876 Option("osd_tier_default_cache_hit_set_grade_decay_rate", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1877 .set_default(20)
1878 .set_description(""),
1879
1880 Option("osd_tier_default_cache_hit_set_search_last_n", Option::TYPE_INT, Option::LEVEL_ADVANCED)
1881 .set_default(1)
1882 .set_description(""),
1883
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)
2351 .set_default(1_hr)
2352 .set_description(""),
2353
2354 Option("osd_remove_thread_suicide_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2355 .set_default(10_hr)
2356 .set_description(""),
2357
2358 Option("osd_command_thread_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2359 .set_default(10_min)
2360 .set_description(""),
2361
2362 Option("osd_command_thread_suicide_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2363 .set_default(15_min)
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(""),
2385
2386 Option("osd_heartbeat_min_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2387 .set_default(2000)
2388 .set_description(""),
2389
2390 Option("osd_pg_max_concurrent_snap_trims", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2391 .set_default(2)
2392 .set_description(""),
2393
2394 Option("osd_max_trimming_pgs", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2395 .set_default(2)
2396 .set_description(""),
2397
2398 Option("osd_heartbeat_min_healthy_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2399 .set_default(.33)
2400 .set_description(""),
2401
2402 Option("osd_mon_heartbeat_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2403 .set_default(30)
2404 .set_description(""),
2405
2406 Option("osd_mon_report_interval_max", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2407 .set_default(600)
2408 .set_description(""),
2409
2410 Option("osd_mon_report_interval_min", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2411 .set_default(5)
2412 .set_description(""),
2413
2414 Option("osd_mon_report_max_in_flight", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2415 .set_default(2)
2416 .set_description(""),
2417
2418 Option("osd_beacon_report_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2419 .set_default(300)
2420 .set_description(""),
2421
2422 Option("osd_pg_stat_report_interval_max", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2423 .set_default(500)
2424 .set_description(""),
2425
2426 Option("osd_mon_ack_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2427 .set_default(30.0)
2428 .set_description(""),
2429
2430 Option("osd_stats_ack_timeout_factor", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2431 .set_default(2.0)
2432 .set_description(""),
2433
2434 Option("osd_stats_ack_timeout_decay", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2435 .set_default(.9)
2436 .set_description(""),
2437
2438 Option("osd_default_data_pool_replay_window", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2439 .set_default(45)
2440 .set_description(""),
2441
2442 Option("osd_auto_mark_unfound_lost", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2443 .set_default(false)
2444 .set_description(""),
2445
2446 Option("osd_recovery_delay_start", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2447 .set_default(0)
2448 .set_description(""),
2449
2450 Option("osd_recovery_max_active", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2451 .set_default(3)
2452 .set_description(""),
2453
2454 Option("osd_recovery_max_single_start", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2455 .set_default(1)
2456 .set_description(""),
2457
2458 Option("osd_recovery_max_chunk", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2459 .set_default(8<<20)
2460 .set_description(""),
2461
2462 Option("osd_recovery_max_omap_entries_per_chunk", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2463 .set_default(8096)
2464 .set_description(""),
2465
2466 Option("osd_copyfrom_max_chunk", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2467 .set_default(8<<20)
2468 .set_description(""),
2469
2470 Option("osd_push_per_object_cost", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2471 .set_default(1000)
2472 .set_description(""),
2473
2474 Option("osd_max_push_cost", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2475 .set_default(8<<20)
2476 .set_description(""),
2477
2478 Option("osd_max_push_objects", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2479 .set_default(10)
2480 .set_description(""),
2481
2482 Option("osd_recovery_forget_lost_objects", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2483 .set_default(false)
2484 .set_description(""),
2485
2486 Option("osd_max_scrubs", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2487 .set_default(1)
2488 .set_description(""),
2489
2490 Option("osd_scrub_during_recovery", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2491 .set_default(false)
2492 .set_description(""),
2493
2494 Option("osd_scrub_begin_hour", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2495 .set_default(0)
2496 .set_description(""),
2497
2498 Option("osd_scrub_end_hour", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2499 .set_default(24)
2500 .set_description(""),
2501
2502 Option("osd_scrub_load_threshold", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2503 .set_default(0.5)
2504 .set_description(""),
2505
2506 Option("osd_scrub_min_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2507 .set_default(1_day)
2508 .set_description(""),
2509
2510 Option("osd_scrub_max_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2511 .set_default(7_day)
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)
2543 .set_default(7_day)
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)
2555 .set_default(2_hr)
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)
2599 .set_default(1500)
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
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
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
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
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
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
2713 Option("osd_debug_verify_snaps", Option::TYPE_BOOL, Option::LEVEL_DEV)
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(""),
2728
2729 Option("osd_debug_inject_copyfrom_error", Option::TYPE_BOOL, Option::LEVEL_DEV)
2730 .set_default(false)
2731 .set_description(""),
2732
2733 Option("osd_debug_misdirected_ops", Option::TYPE_BOOL, Option::LEVEL_DEV)
2734 .set_default(false)
2735 .set_description(""),
2736
2737 Option("osd_debug_skip_full_check_in_recovery", Option::TYPE_BOOL, Option::LEVEL_DEV)
2738 .set_default(false)
2739 .set_description(""),
2740
2741 Option("osd_debug_random_push_read_error", Option::TYPE_FLOAT, Option::LEVEL_DEV)
2742 .set_default(0)
2743 .set_description(""),
2744
2745 Option("osd_debug_verify_cached_snaps", Option::TYPE_BOOL, Option::LEVEL_DEV)
2746 .set_default(false)
2747 .set_description(""),
2748
2749 Option("osd_enable_op_tracker", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2750 .set_default(true)
2751 .set_description(""),
2752
2753 Option("osd_num_op_tracker_shard", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2754 .set_default(32)
2755 .set_description(""),
2756
2757 Option("osd_op_history_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2758 .set_default(20)
2759 .set_description(""),
2760
2761 Option("osd_op_history_duration", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2762 .set_default(600)
2763 .set_description(""),
2764
2765 Option("osd_op_history_slow_op_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2766 .set_default(20)
2767 .set_description(""),
2768
2769 Option("osd_op_history_slow_op_threshold", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2770 .set_default(10.0)
2771 .set_description(""),
2772
2773 Option("osd_target_transaction_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2774 .set_default(30)
2775 .set_description(""),
2776
2777 Option("osd_failsafe_full_ratio", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
2778 .set_default(.97)
2779 .set_description(""),
2780
2781 Option("osd_fast_fail_on_connection_refused", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2782 .set_default(true)
2783 .set_description(""),
2784
2785 Option("osd_pg_object_context_cache_count", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2786 .set_default(64)
2787 .set_description(""),
2788
2789 Option("osd_tracing", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2790 .set_default(false)
2791 .set_description(""),
2792
2793 Option("osd_function_tracing", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2794 .set_default(false)
2795 .set_description(""),
2796
2797 Option("osd_fast_info", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2798 .set_default(true)
2799 .set_description(""),
2800
2801 Option("osd_debug_pg_log_writeout", Option::TYPE_BOOL, Option::LEVEL_DEV)
2802 .set_default(false)
2803 .set_description(""),
2804
2805 Option("osd_loop_before_reset_tphandle", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2806 .set_default(64)
2807 .set_description(""),
2808
2809 Option("threadpool_default_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2810 .set_default(60)
2811 .set_description(""),
2812
2813 Option("threadpool_empty_queue_max_wait", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2814 .set_default(2)
2815 .set_description(""),
2816
2817 Option("leveldb_log_to_ceph_log", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2818 .set_default(true)
2819 .set_description(""),
2820
2821 Option("leveldb_write_buffer_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2822 .set_default(8_M)
2823 .set_description(""),
2824
2825 Option("leveldb_cache_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2826 .set_default(128_M)
2827 .set_description(""),
2828
2829 Option("leveldb_block_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
2830 .set_default(0)
2831 .set_description(""),
2832
2833 Option("leveldb_bloom_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2834 .set_default(0)
2835 .set_description(""),
2836
2837 Option("leveldb_max_open_files", Option::TYPE_INT, Option::LEVEL_ADVANCED)
2838 .set_default(0)
2839 .set_description(""),
2840
2841 Option("leveldb_compression", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
2842 .set_default(true)
2843 .set_description(""),
2844
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)
2891 .set_default(128_M)
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)
2907 .set_default(4_K)
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)
2961 .set_default(4_K)
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)
3017 .set_default(128_M)
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(""),
3039
3040 Option("osd_max_omap_bytes_per_request", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3041 .set_default(1<<30)
3042 .set_description(""),
3043
3044 Option("osd_objectstore", Option::TYPE_STR, Option::LEVEL_ADVANCED)
3045 .set_default("filestore")
3046 .set_description(""),
3047
3048 Option("osd_objectstore_tracing", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3049 .set_default(false)
3050 .set_description(""),
3051
3052 Option("osd_objectstore_fuse", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3053 .set_default(false)
3054 .set_description(""),
3055
3056 Option("osd_bench_small_size_max_iops", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3057 .set_default(100)
3058 .set_description(""),
3059
3060 Option("osd_bench_large_size_max_throughput", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3061 .set_default(100 << 20)
3062 .set_description(""),
3063
3064 Option("osd_bench_max_block_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3065 .set_default(64 << 20)
3066 .set_description(""),
3067
3068 Option("osd_bench_duration", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3069 .set_default(30)
3070 .set_description(""),
3071
3072 Option("osd_blkin_trace_all", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3073 .set_default(false)
3074 .set_description(""),
3075
3076 Option("osdc_blkin_trace_all", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3077 .set_default(false)
3078 .set_description(""),
3079
3080 Option("osd_discard_disconnected_ops", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3081 .set_default(true)
3082 .set_description(""),
3083
3084 Option("memstore_device_bytes", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3085 .set_default(1_G)
3086 .set_description(""),
3087
3088 Option("memstore_page_set", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3089 .set_default(false)
3090 .set_description(""),
3091
3092 Option("memstore_page_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3093 .set_default(64_K)
3094 .set_description(""),
3095
3096 Option("objectstore_blackhole", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3097 .set_default(false)
3098 .set_description(""),
3099
3100 // --------------------------
3101 // bluestore
3102
3103 Option("bdev_inject_bad_size", Option::TYPE_BOOL, Option::LEVEL_DEV)
3104 .set_default(false)
3105 .set_description(""),
3106
3107 Option("bdev_debug_inflight_ios", Option::TYPE_BOOL, Option::LEVEL_DEV)
3108 .set_default(false)
3109 .set_description(""),
3110
3111 Option("bdev_inject_crash", Option::TYPE_INT, Option::LEVEL_DEV)
3112 .set_default(0)
3113 .set_description(""),
3114
3115 Option("bdev_inject_crash_flush_delay", Option::TYPE_INT, Option::LEVEL_DEV)
3116 .set_default(2)
3117 .set_description(""),
3118
3119 Option("bdev_aio", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3120 .set_default(true)
3121 .set_description(""),
3122
3123 Option("bdev_aio_poll_ms", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3124 .set_default(250)
3125 .set_description(""),
3126
3127 Option("bdev_aio_max_queue_depth", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3128 .set_default(1024)
3129 .set_description(""),
3130
3131 Option("bdev_aio_reap_max", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3132 .set_default(16)
3133 .set_description(""),
3134
3135 Option("bdev_block_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3136 .set_default(4_K)
3137 .set_description(""),
3138
3139 Option("bdev_debug_aio", Option::TYPE_BOOL, Option::LEVEL_DEV)
3140 .set_default(false)
3141 .set_description(""),
3142
3143 Option("bdev_debug_aio_suicide_timeout", Option::TYPE_FLOAT, Option::LEVEL_DEV)
3144 .set_default(60.0)
3145 .set_description(""),
3146
3147 Option("bdev_nvme_unbind_from_kernel", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3148 .set_default(false)
3149 .set_description(""),
3150
3151 Option("bdev_nvme_retry_count", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3152 .set_default(-1)
3153 .set_description(""),
3154
3155 Option("bluefs_alloc_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3156 .set_default(1_M)
3157 .set_description(""),
3158
3159 Option("bluefs_max_prefetch", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3160 .set_default(1_M)
3161 .set_description(""),
3162
3163 Option("bluefs_min_log_runway", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3164 .set_default(1_M)
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)
3176 .set_default(16_M)
3177 .set_description(""),
3178
3179 Option("bluefs_min_flush_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3180 .set_default(512_K)
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)
3196 .set_default("stupid")
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)
3215 .set_default(1_G)
3216 .set_description("minimum disk space allocated to BlueFS (e.g., at mkfs)"),
3217
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
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)
3260 .set_default(10_G)
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)
3293 .set_default(96_M)
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)
3324 .set_default(64_K)
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)
3336 .set_default(64_K)
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)
3341 .set_default(16_K)
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)
3385 .set_default(128_K)
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)
3390 .set_default(8_K)
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)
3400 .set_default(512_K)
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)
3405 .set_default(64_K)
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)
3425 .set_default(512_K)
3426 .set_safe()
3427 .set_description(""),
3428
3429 Option("bluestore_max_blob_size_ssd", Option::TYPE_UINT, Option::LEVEL_DEV)
3430 .set_default(64_K)
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)
3461 .set_default(.05)
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)
3487 .set_default(1_G)
3488 .set_description("Default bluestore_cache_size for rotational media"),
3489
3490 Option("bluestore_cache_size_ssd", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3491 .set_default(3_G)
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
3502 Option("bluestore_cache_kv_max", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3503 .set_default(512_M)
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."),
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)
3515 .set_default("stupid")
3516 .set_enum_allowed({"bitmap", "stupid"})
3517 .set_description("Allocator policy"),
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)
3568 .set_default(64_M)
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)
3573 .set_default(128_M)
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)
3652 .set_default(1_M)
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(""),
3686
3687 // -----------------------------------------
3688 // kstore
3689
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)
3695 .set_default(64_M)
3696 .set_description(""),
3697
3698 Option("kstore_backend", Option::TYPE_STR, Option::LEVEL_ADVANCED)
3699 .set_default("rocksdb")
3700 .set_description(""),
3701
3702 Option("kstore_rocksdb_options", Option::TYPE_STR, Option::LEVEL_ADVANCED)
3703 .set_default("compression=kNoCompression")
3704 .set_description(""),
3705
3706 Option("kstore_fsck_on_mount", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3707 .set_default(false)
3708 .set_description(""),
3709
3710 Option("kstore_fsck_on_mount_deep", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3711 .set_default(true)
3712 .set_description(""),
3713
3714 Option("kstore_nid_prealloc", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3715 .set_default(1024)
3716 .set_description(""),
3717
3718 Option("kstore_sync_transaction", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3719 .set_default(false)
3720 .set_description(""),
3721
3722 Option("kstore_sync_submit_transaction", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3723 .set_default(false)
3724 .set_description(""),
3725
3726 Option("kstore_onode_map_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3727 .set_default(1024)
3728 .set_description(""),
3729
3730 Option("kstore_default_stripe_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3731 .set_default(65536)
3732 .set_description(""),
3733
3734 // ---------------------
3735 // filestore
3736
3737 Option("filestore_rocksdb_options", Option::TYPE_STR, Option::LEVEL_ADVANCED)
3738 .set_default("max_background_compactions=8,compaction_readahead_size=2097152,compression=kNoCompression")
3739 .set_description(""),
3740
3741 Option("filestore_omap_backend", Option::TYPE_STR, Option::LEVEL_ADVANCED)
3742 .set_default("rocksdb")
3743 .set_description(""),
3744
3745 Option("filestore_omap_backend_path", Option::TYPE_STR, Option::LEVEL_ADVANCED)
3746 .set_default("")
3747 .set_description(""),
3748
3749 Option("filestore_wbthrottle_enable", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3750 .set_default(true)
3751 .set_description(""),
3752
3753 Option("filestore_wbthrottle_btrfs_bytes_start_flusher", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3754 .set_default(41943040)
3755 .set_description(""),
3756
3757 Option("filestore_wbthrottle_btrfs_bytes_hard_limit", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3758 .set_default(419430400)
3759 .set_description(""),
3760
3761 Option("filestore_wbthrottle_btrfs_ios_start_flusher", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3762 .set_default(500)
3763 .set_description(""),
3764
3765 Option("filestore_wbthrottle_btrfs_ios_hard_limit", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3766 .set_default(5000)
3767 .set_description(""),
3768
3769 Option("filestore_wbthrottle_btrfs_inodes_start_flusher", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3770 .set_default(500)
3771 .set_description(""),
3772
3773 Option("filestore_wbthrottle_xfs_bytes_start_flusher", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3774 .set_default(41943040)
3775 .set_description(""),
3776
3777 Option("filestore_wbthrottle_xfs_bytes_hard_limit", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3778 .set_default(419430400)
3779 .set_description(""),
3780
3781 Option("filestore_wbthrottle_xfs_ios_start_flusher", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3782 .set_default(500)
3783 .set_description(""),
3784
3785 Option("filestore_wbthrottle_xfs_ios_hard_limit", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3786 .set_default(5000)
3787 .set_description(""),
3788
3789 Option("filestore_wbthrottle_xfs_inodes_start_flusher", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3790 .set_default(500)
3791 .set_description(""),
3792
3793 Option("filestore_wbthrottle_btrfs_inodes_hard_limit", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3794 .set_default(5000)
3795 .set_description(""),
3796
3797 Option("filestore_wbthrottle_xfs_inodes_hard_limit", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3798 .set_default(5000)
3799 .set_description(""),
3800
3801 Option("filestore_odsync_write", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3802 .set_default(false)
3803 .set_description(""),
3804
3805 Option("filestore_index_retry_probability", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3806 .set_default(0)
3807 .set_description(""),
3808
3809 Option("filestore_debug_inject_read_err", Option::TYPE_BOOL, Option::LEVEL_DEV)
3810 .set_default(false)
3811 .set_description(""),
3812
3813 Option("filestore_debug_random_read_err", Option::TYPE_FLOAT, Option::LEVEL_DEV)
3814 .set_default(0)
3815 .set_description(""),
3816
3817 Option("filestore_debug_omap_check", Option::TYPE_BOOL, Option::LEVEL_DEV)
3818 .set_default(false)
3819 .set_description(""),
3820
3821 Option("filestore_omap_header_cache_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3822 .set_default(1024)
3823 .set_description(""),
3824
3825 Option("filestore_max_inline_xattr_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3826 .set_default(0)
3827 .set_description(""),
3828
3829 Option("filestore_max_inline_xattr_size_xfs", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3830 .set_default(65536)
3831 .set_description(""),
3832
3833 Option("filestore_max_inline_xattr_size_btrfs", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3834 .set_default(2048)
3835 .set_description(""),
3836
3837 Option("filestore_max_inline_xattr_size_other", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3838 .set_default(512)
3839 .set_description(""),
3840
3841 Option("filestore_max_inline_xattrs", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3842 .set_default(0)
3843 .set_description(""),
3844
3845 Option("filestore_max_inline_xattrs_xfs", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3846 .set_default(10)
3847 .set_description(""),
3848
3849 Option("filestore_max_inline_xattrs_btrfs", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3850 .set_default(10)
3851 .set_description(""),
3852
3853 Option("filestore_max_inline_xattrs_other", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3854 .set_default(2)
3855 .set_description(""),
3856
3857 Option("filestore_max_xattr_value_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3858 .set_default(0)
3859 .set_description(""),
3860
3861 Option("filestore_max_xattr_value_size_xfs", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3862 .set_default(64<<10)
3863 .set_description(""),
3864
3865 Option("filestore_max_xattr_value_size_btrfs", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3866 .set_default(64<<10)
3867 .set_description(""),
3868
3869 Option("filestore_max_xattr_value_size_other", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3870 .set_default(1<<10)
3871 .set_description(""),
3872
3873 Option("filestore_sloppy_crc", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3874 .set_default(false)
3875 .set_description(""),
3876
3877 Option("filestore_sloppy_crc_block_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3878 .set_default(65536)
3879 .set_description(""),
3880
3881 Option("filestore_max_alloc_hint_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3882 .set_default(1ULL << 20)
3883 .set_description(""),
3884
3885 Option("filestore_max_sync_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3886 .set_default(5)
3887 .set_description(""),
3888
3889 Option("filestore_min_sync_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3890 .set_default(.01)
3891 .set_description(""),
3892
3893 Option("filestore_btrfs_snap", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3894 .set_default(true)
3895 .set_description(""),
3896
3897 Option("filestore_btrfs_clone_range", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3898 .set_default(true)
3899 .set_description(""),
3900
3901 Option("filestore_zfs_snap", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3902 .set_default(false)
3903 .set_description(""),
3904
3905 Option("filestore_fsync_flushes_journal_data", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3906 .set_default(false)
3907 .set_description(""),
3908
3909 Option("filestore_fiemap", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3910 .set_default(false)
3911 .set_description(""),
3912
3913 Option("filestore_punch_hole", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3914 .set_default(false)
3915 .set_description(""),
3916
3917 Option("filestore_seek_data_hole", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3918 .set_default(false)
3919 .set_description(""),
3920
3921 Option("filestore_splice", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3922 .set_default(false)
3923 .set_description(""),
3924
3925 Option("filestore_fadvise", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3926 .set_default(true)
3927 .set_description(""),
3928
3929 Option("filestore_collect_device_partition_information", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3930 .set_default(true)
3931 .set_description(""),
3932
3933 Option("filestore_xfs_extsize", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3934 .set_default(false)
3935 .set_description(""),
3936
3937 Option("filestore_journal_parallel", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3938 .set_default(false)
3939 .set_description(""),
3940
3941 Option("filestore_journal_writeahead", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3942 .set_default(false)
3943 .set_description(""),
3944
3945 Option("filestore_journal_trailing", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
3946 .set_default(false)
3947 .set_description(""),
3948
3949 Option("filestore_queue_max_ops", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3950 .set_default(50)
3951 .set_description(""),
3952
3953 Option("filestore_queue_max_bytes", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
3954 .set_default(100 << 20)
3955 .set_description(""),
3956
3957 Option("filestore_caller_concurrency", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3958 .set_default(10)
3959 .set_description(""),
3960
3961 Option("filestore_expected_throughput_bytes", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3962 .set_default(200 << 20)
3963 .set_description(""),
3964
3965 Option("filestore_expected_throughput_ops", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3966 .set_default(200)
3967 .set_description(""),
3968
3969 Option("filestore_queue_max_delay_multiple", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3970 .set_default(0)
3971 .set_description(""),
3972
3973 Option("filestore_queue_high_delay_multiple", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3974 .set_default(0)
3975 .set_description(""),
3976
3977 Option("filestore_queue_low_threshhold", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3978 .set_default(0.3)
3979 .set_description(""),
3980
3981 Option("filestore_queue_high_threshhold", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3982 .set_default(0.9)
3983 .set_description(""),
3984
3985 Option("filestore_op_threads", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3986 .set_default(2)
3987 .set_description(""),
3988
3989 Option("filestore_op_thread_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3990 .set_default(60)
3991 .set_description(""),
3992
3993 Option("filestore_op_thread_suicide_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
3994 .set_default(180)
3995 .set_description(""),
3996
3997 Option("filestore_commit_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
3998 .set_default(600)
3999 .set_description(""),
4000
4001 Option("filestore_fiemap_threshold", Option::TYPE_INT, Option::LEVEL_DEV)
4002 .set_default(4_K)
4003 .set_description(""),
4004
4005 Option("filestore_merge_threshold", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4006 .set_default(10)
4007 .set_description(""),
4008
4009 Option("filestore_split_multiple", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4010 .set_default(2)
4011 .set_description(""),
4012
4013 Option("filestore_split_rand_factor", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4014 .set_default(20)
4015 .set_description(""),
4016
4017 Option("filestore_update_to", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4018 .set_default(1000)
4019 .set_description(""),
4020
4021 Option("filestore_blackhole", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4022 .set_default(false)
4023 .set_description(""),
4024
4025 Option("filestore_fd_cache_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4026 .set_default(128)
4027 .set_description(""),
4028
4029 Option("filestore_fd_cache_shards", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4030 .set_default(16)
4031 .set_description(""),
4032
4033 Option("filestore_ondisk_finisher_threads", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4034 .set_default(1)
4035 .set_description(""),
4036
4037 Option("filestore_apply_finisher_threads", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4038 .set_default(1)
4039 .set_description(""),
4040
4041 Option("filestore_dump_file", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4042 .set_default("")
4043 .set_description(""),
4044
4045 Option("filestore_kill_at", Option::TYPE_INT, Option::LEVEL_DEV)
4046 .set_default(0)
4047 .set_description(""),
4048
4049 Option("filestore_inject_stall", Option::TYPE_INT, Option::LEVEL_DEV)
4050 .set_default(0)
4051 .set_description(""),
4052
4053 Option("filestore_fail_eio", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4054 .set_default(true)
4055 .set_description(""),
4056
4057 Option("filestore_debug_verify_split", Option::TYPE_BOOL, Option::LEVEL_DEV)
4058 .set_default(false)
4059 .set_description(""),
4060
4061 Option("journal_dio", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4062 .set_default(true)
4063 .set_description(""),
4064
4065 Option("journal_aio", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4066 .set_default(true)
4067 .set_description(""),
4068
4069 Option("journal_force_aio", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4070 .set_default(false)
4071 .set_description(""),
4072
4073 Option("journal_block_size", Option::TYPE_INT, Option::LEVEL_DEV)
4074 .set_default(4_K)
4075 .set_description(""),
4076
4077 Option("journal_max_corrupt_search", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4078 .set_default(10<<20)
4079 .set_description(""),
4080
4081 Option("journal_block_align", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4082 .set_default(true)
4083 .set_description(""),
4084
4085 Option("journal_write_header_frequency", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4086 .set_default(0)
4087 .set_description(""),
4088
4089 Option("journal_max_write_bytes", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4090 .set_default(10 << 20)
4091 .set_description(""),
4092
4093 Option("journal_max_write_entries", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4094 .set_default(100)
4095 .set_description(""),
4096
4097 Option("journal_throttle_low_threshhold", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
4098 .set_default(0.6)
4099 .set_description(""),
4100
4101 Option("journal_throttle_high_threshhold", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
4102 .set_default(0.9)
4103 .set_description(""),
4104
4105 Option("journal_throttle_high_multiple", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
4106 .set_default(0)
4107 .set_description(""),
4108
4109 Option("journal_throttle_max_multiple", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
4110 .set_default(0)
4111 .set_description(""),
4112
4113 Option("journal_align_min_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4114 .set_default(64 << 10)
4115 .set_description(""),
4116
4117 Option("journal_replay_from", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4118 .set_default(0)
4119 .set_description(""),
4120
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
4129 Option("journal_zero_on_create", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4130 .set_default(false)
4131 .set_description(""),
4132
4133 Option("journal_ignore_corruption", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4134 .set_default(false)
4135 .set_description(""),
4136
4137 Option("journal_discard", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4138 .set_default(false)
4139 .set_description(""),
4140
4141 Option("fio_dir", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4142 .set_default("/tmp/fio")
4143 .set_description(""),
4144
4145 Option("rados_mon_op_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
4146 .set_default(0)
4147 .set_description(""),
4148
4149 Option("rados_osd_op_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
4150 .set_default(0)
4151 .set_description(""),
4152
4153 Option("rados_tracing", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4154 .set_default(false)
4155 .set_description(""),
4156
4157 Option("nss_db_path", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4158 .set_default("")
4159 .set_description(""),
4160
4161 Option("mgr_module_path", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4162 .set_default(CEPH_PKGLIBDIR "/mgr")
4163 .add_service("mgr")
4164 .set_description("Filesystem path to manager modules."),
4165
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."),
4176
4177 Option("mgr_data", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4178 .set_default("/var/lib/ceph/mgr/$cluster-$id")
4179 .add_service("mgr")
4180 .set_description("Filesystem path to the ceph-mgr data directory, used to "
4181 "contain keyring."),
4182
4183 Option("mgr_tick_period", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4184 .set_default(2)
4185 .add_service("mgr")
4186 .set_description("Period in seconds of beacon messages to monitor"),
4187
4188 Option("mgr_stats_period", Option::TYPE_INT, Option::LEVEL_BASIC)
4189 .set_default(5)
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)
4199 .set_default(128_M)
4200 .add_service("mgr"),
4201
4202 Option("mgr_client_messages", Option::TYPE_UINT, Option::LEVEL_DEV)
4203 .set_default(512)
4204 .add_service("mgr"),
4205
4206 Option("mgr_osd_bytes", Option::TYPE_UINT, Option::LEVEL_DEV)
4207 .set_default(512_M)
4208 .add_service("mgr"),
4209
4210 Option("mgr_osd_messages", Option::TYPE_UINT, Option::LEVEL_DEV)
4211 .set_default(8192)
4212 .add_service("mgr"),
4213
4214 Option("mgr_mds_bytes", Option::TYPE_UINT, Option::LEVEL_DEV)
4215 .set_default(128_M)
4216 .add_service("mgr"),
4217
4218 Option("mgr_mds_messages", Option::TYPE_UINT, Option::LEVEL_DEV)
4219 .set_default(128)
4220 .add_service("mgr"),
4221
4222 Option("mgr_mon_bytes", Option::TYPE_UINT, Option::LEVEL_DEV)
4223 .set_default(128_M)
4224 .add_service("mgr"),
4225
4226 Option("mgr_mon_messages", Option::TYPE_UINT, Option::LEVEL_DEV)
4227 .set_default(128)
4228 .add_service("mgr"),
4229
4230 Option("mgr_connect_retry_interval", Option::TYPE_FLOAT, Option::LEVEL_DEV)
4231 .set_default(1.0)
4232 .add_service("common"),
4233
4234 Option("mgr_service_beacon_grace", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
4235 .set_default(60.0)
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)"),
4239
4240 Option("mon_mgr_digest_period", Option::TYPE_INT, Option::LEVEL_DEV)
4241 .set_default(5)
4242 .add_service("mon")
4243 .set_description("Period in seconds between monitor-to-manager "
4244 "health/status updates"),
4245
4246 Option("mon_mgr_beacon_grace", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4247 .set_default(30)
4248 .add_service("mon")
4249 .set_description("Period in seconds from last beacon to monitor marking "
4250 "a manager daemon as failed"),
4251
4252 Option("mon_mgr_inactive_grace", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4253 .set_default(60)
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"),
4260
4261 Option("mon_mgr_mkfs_grace", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4262 .set_default(60)
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"),
4267
4268 Option("mutex_perf_counter", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4269 .set_default(false)
4270 .set_description(""),
4271
4272 Option("throttler_perf_counter", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4273 .set_default(true)
4274 .set_description(""),
4275
4276 Option("event_tracing", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4277 .set_default(false)
4278 .set_description(""),
4279
4280 Option("internal_safe_to_start_threads", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4281 .set_default(false)
4282 .set_description(""),
4283
4284 Option("debug_deliberately_leak_memory", Option::TYPE_BOOL, Option::LEVEL_DEV)
4285 .set_default(false)
4286 .set_description(""),
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"),
4291 });
4292 }
4293
4294 std::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)
4298 .set_description("Max number of ACL grants in a single request"),
4299
4300 Option("rgw_max_chunk_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
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."),
4309
4310 Option("rgw_put_obj_min_window_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
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"}),
4319
4320 Option("rgw_put_obj_max_window_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
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"}),
4325
4326 Option("rgw_max_put_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
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."),
4333
4334 Option("rgw_max_put_param_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4335 .set_default(1_M)
4336 .set_description("The maximum size (in bytes) of data input of certain RESTful requests."),
4337
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
4350 Option("rgw_override_bucket_index_max_shards", Option::TYPE_UINT, Option::LEVEL_DEV)
4351 .set_default(0)
4352 .set_description(""),
4353
4354 Option("rgw_bucket_index_max_aio", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4355 .set_default(8)
4356 .set_description("Max number of concurrent RADOS requests when handling bucket shards."),
4357
4358 Option("rgw_enable_quota_threads", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4359 .set_default(true)
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"}),
4368
4369 Option("rgw_enable_gc_threads", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4370 .set_default(true)
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"}),
4379
4380 Option("rgw_enable_lc_threads", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4381 .set_default(true)
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"}),
4390
4391 Option("rgw_data", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4392 .set_default("/var/lib/ceph/radosgw/$cluster-$id")
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. "),
4397
4398 Option("rgw_enable_apis", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4399 .set_default("s3, s3website, swift, swift_auth, admin")
4400 .set_description("A list of set of RESTful APIs that rgw handles."),
4401
4402 Option("rgw_cache_enabled", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4403 .set_default(true)
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"),
4411
4412 Option("rgw_cache_lru_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4413 .set_default(10000)
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"),
4418
4419 Option("rgw_socket_path", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4420 .set_default("")
4421 .set_description("RGW FastCGI socket path (for FastCGI over Unix domain sockets).")
4422 .add_see_also("rgw_fcgi_socket_backlog"),
4423
4424 Option("rgw_host", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4425 .set_default("")
4426 .set_description("RGW FastCGI host name (for FastCGI over TCP)")
4427 .add_see_also({"rgw_port", "rgw_fcgi_socket_backlog"}),
4428
4429 Option("rgw_port", Option::TYPE_STR, Option::LEVEL_BASIC)
4430 .set_default("")
4431 .set_description("RGW FastCGI port number (for FastCGI over TCP)")
4432 .add_see_also({"rgw_host", "rgw_fcgi_socket_backlog"}),
4433
4434 Option("rgw_dns_name", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4435 .set_default("")
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."),
4440
4441 Option("rgw_dns_s3website_name", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4442 .set_default("")
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."),
4447
4448 Option("rgw_content_length_compat", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4449 .set_default(false)
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)."),
4454
4455 Option("rgw_lifecycle_work_time", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4456 .set_default("00:00-06:00")
4457 .set_description("Lifecycle allowed work time")
4458 .set_long_description("Local time window in which the lifecycle maintenance thread can work."),
4459
4460 Option("rgw_lc_lock_max_time", Option::TYPE_INT, Option::LEVEL_DEV)
4461 .set_default(60)
4462 .set_description(""),
4463
4464 Option("rgw_lc_max_objs", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4465 .set_default(32)
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."),
4471
4472 Option("rgw_lc_debug_interval", Option::TYPE_INT, Option::LEVEL_DEV)
4473 .set_default(-1)
4474 .set_description(""),
4475
4476 Option("rgw_mp_lock_max_time", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4477 .set_default(600)
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."),
4482
4483 Option("rgw_script_uri", Option::TYPE_STR, Option::LEVEL_DEV)
4484 .set_default("")
4485 .set_description(""),
4486
4487 Option("rgw_request_uri", Option::TYPE_STR, Option::LEVEL_DEV)
4488 .set_default("")
4489 .set_description(""),
4490
4491 Option("rgw_swift_url", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4492 .set_default("")
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"),
4498
4499 Option("rgw_swift_url_prefix", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4500 .set_default("swift")
4501 .set_description("Swift URL prefix")
4502 .set_long_description("The URL path prefix for swift requests."),
4503
4504 Option("rgw_swift_auth_url", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4505 .set_default("")
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)."),
4510
4511 Option("rgw_swift_auth_entry", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4512 .set_default("auth")
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"),
4516
4517 Option("rgw_swift_tenant_name", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4518 .set_default("")
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"),
4522
4523 Option("rgw_swift_account_in_url", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4524 .set_default(false)
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"),
4528
4529 Option("rgw_swift_enforce_content_length", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4530 .set_default(false)
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."),
4535
4536 Option("rgw_keystone_url", Option::TYPE_STR, Option::LEVEL_BASIC)
4537 .set_default("")
4538 .set_description("The URL to the Keystone server."),
4539
4540 Option("rgw_keystone_admin_token", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4541 .set_default("")
4542 .set_description("The admin token (shared secret) that is used for the Keystone requests."),
4543
4544 Option("rgw_keystone_admin_user", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4545 .set_default("")
4546 .set_description("Keystone admin user."),
4547
4548 Option("rgw_keystone_admin_password", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4549 .set_default("")
4550 .set_description("Keystone admin password."),
4551
4552 Option("rgw_keystone_admin_tenant", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4553 .set_default("")
4554 .set_description("Keystone admin user tenant."),
4555
4556 Option("rgw_keystone_admin_project", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4557 .set_default("")
4558 .set_description("Keystone admin user project (for Keystone v3)."),
4559
4560 Option("rgw_keystone_admin_domain", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4561 .set_default("")
4562 .set_description("Keystone admin user domain (for Keystone v3)."),
4563
4564 Option("rgw_keystone_barbican_user", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4565 .set_default("")
4566 .set_description("Keystone user to access barbican secrets."),
4567
4568 Option("rgw_keystone_barbican_password", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4569 .set_default("")
4570 .set_description("Keystone password for barbican user."),
4571
4572 Option("rgw_keystone_barbican_tenant", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4573 .set_default("")
4574 .set_description("Keystone barbican user tenant (Keystone v2.0)."),
4575
4576 Option("rgw_keystone_barbican_project", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4577 .set_default("")
4578 .set_description("Keystone barbican user project (Keystone v3)."),
4579
4580 Option("rgw_keystone_barbican_domain", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4581 .set_default("")
4582 .set_description("Keystone barbican user domain."),
4583
4584 Option("rgw_keystone_api_version", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4585 .set_default(2)
4586 .set_description("Version of Keystone API to use (2 or 3)."),
4587
4588 Option("rgw_keystone_accepted_roles", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4589 .set_default("Member, admin")
4590 .set_description("Only users with one of these roles will be served when doing Keystone authentication."),
4591
4592 Option("rgw_keystone_accepted_admin_roles", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4593 .set_default("")
4594 .set_description("List of roles allowing user to gain admin privileges (Keystone)."),
4595
4596 Option("rgw_keystone_token_cache_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4597 .set_default(10000)
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."),
4602
4603 Option("rgw_keystone_revocation_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
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."),
4610
4611 Option("rgw_keystone_verify_ssl", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4612 .set_default(true)
4613 .set_description("Should RGW verify the Keystone server SSL certificate."),
4614
4615 Option("rgw_keystone_implicit_tenants", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4616 .set_default(false)
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."),
4621
4622 Option("rgw_cross_domain_policy", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4623 .set_default("<allow-access-from domain=\"*\" secure=\"false\" />")
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)."),
4627
4628 Option("rgw_healthcheck_disabling_path", Option::TYPE_STR, Option::LEVEL_DEV)
4629 .set_default("")
4630 .set_description("Swift health check api can be disabled if a file can be accessed in this path."),
4631
4632 Option("rgw_s3_auth_use_rados", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4633 .set_default(true)
4634 .set_description("Should S3 authentication use credentials stored in RADOS backend."),
4635
4636 Option("rgw_s3_auth_use_keystone", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4637 .set_default(false)
4638 .set_description("Should S3 authentication use Keystone."),
4639
4640 Option("rgw_barbican_url", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4641 .set_default("")
4642 .set_description("URL to barbican server."),
4643
4644 Option("rgw_ldap_uri", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4645 .set_default("ldaps://<ldap.your.domain>")
4646 .set_description("Space-separated list of LDAP servers in URI format."),
4647
4648 Option("rgw_ldap_binddn", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4649 .set_default("uid=admin,cn=users,dc=example,dc=com")
4650 .set_description("LDAP entry RGW will bind with (user match)."),
4651
4652 Option("rgw_ldap_searchdn", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4653 .set_default("cn=users,cn=accounts,dc=example,dc=com")
4654 .set_description("LDAP search base (basedn)."),
4655
4656 Option("rgw_ldap_dnattr", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4657 .set_default("uid")
4658 .set_description("LDAP attribute containing RGW user names (to form binddns)."),
4659
4660 Option("rgw_ldap_secret", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4661 .set_default("/etc/openldap/secret")
4662 .set_description("Path to file containing credentials for rgw_ldap_binddn."),
4663
4664 Option("rgw_s3_auth_use_ldap", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4665 .set_default(false)
4666 .set_description("Should S3 authentication use LDAP."),
4667
4668 Option("rgw_ldap_searchfilter", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4669 .set_default("")
4670 .set_description("LDAP search filter."),
4671
4672 Option("rgw_admin_entry", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4673 .set_default("admin")
4674 .set_description("Path prefix to be used for accessing RGW RESTful admin API."),
4675
4676 Option("rgw_enforce_swift_acls", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4677 .set_default(true)
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."),
4682
4683 Option("rgw_swift_token_expiration", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4684 .set_default(1_day)
4685 .set_description("Expiration time (in seconds) for token generated through RGW Swift auth."),
4686
4687 Option("rgw_print_continue", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4688 .set_default(true)
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."),
4693
4694 Option("rgw_print_prohibited_content_length", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4695 .set_default(false)
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."),
4700
4701 Option("rgw_remote_addr_param", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4702 .set_default("REMOTE_ADDR")
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"),
4712
4713 Option("rgw_op_thread_timeout", Option::TYPE_INT, Option::LEVEL_DEV)
4714 .set_default(10*60)
4715 .set_description("Timeout for async rados coroutine operations."),
4716
4717 Option("rgw_op_thread_suicide_timeout", Option::TYPE_INT, Option::LEVEL_DEV)
4718 .set_default(0)
4719 .set_description(""),
4720
4721 Option("rgw_thread_pool_size", Option::TYPE_INT, Option::LEVEL_BASIC)
4722 .set_default(100)
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."),
4729
4730 Option("rgw_num_control_oids", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4731 .set_default(8)
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."),
4740
4741 Option("rgw_num_rados_handles", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
4742 .set_default(1)
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."),
4748
4749 Option("rgw_verify_ssl", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4750 .set_default(true)
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"),
4757
4758 Option("rgw_nfs_lru_lanes", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4759 .set_default(5)
4760 .set_description(""),
4761
4762 Option("rgw_nfs_lru_lane_hiwat", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4763 .set_default(911)
4764 .set_description(""),
4765
4766 Option("rgw_nfs_fhcache_partitions", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4767 .set_default(3)
4768 .set_description(""),
4769
4770 Option("rgw_nfs_fhcache_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4771 .set_default(2017)
4772 .set_description(""),
4773
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("")
4790 .set_description("Zone name")
4791 .add_see_also({"rgw_zonegroup", "rgw_realm"}),
4792
4793 Option("rgw_zone_root_pool", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4794 .set_default(".rgw.root")
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"}),
4800
4801 Option("rgw_default_zone_info_oid", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4802 .set_default("default.zone")
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 ),
4807
4808 Option("rgw_region", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4809 .set_default("")
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"),
4814
4815 Option("rgw_region_root_pool", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4816 .set_default(".rgw.root")
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"),
4821
4822 Option("rgw_default_region_info_oid", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4823 .set_default("default.region")
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"),
4828
4829 Option("rgw_zonegroup", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4830 .set_default("")
4831 .set_description("Zonegroup name")
4832 .add_see_also({"rgw_zone", "rgw_realm"}),
4833
4834 Option("rgw_zonegroup_root_pool", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4835 .set_default(".rgw.root")
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"}),
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")
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"}),
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")
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"}),
4869
4870 Option("rgw_period_latest_epoch_info_oid", Option::TYPE_STR, Option::LEVEL_DEV)
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)
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"),
4882
4883 Option("rgw_log_object_name", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4884 .set_default("%Y-%m-%d-%H-%i-%n")
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"),
4890
4891 Option("rgw_log_object_name_utc", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4892 .set_default(false)
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"}),
4898
4899 Option("rgw_usage_max_shards", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4900 .set_default(32)
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"),
4906
4907 Option("rgw_usage_max_user_shards", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4908 .set_default(1)
4909 .set_min(1)
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"),
4914
4915 Option("rgw_enable_ops_log", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4916 .set_default(false)
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"}),
4920
4921 Option("rgw_enable_usage_log", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4922 .set_default(false)
4923 .set_description("Enable usage log")
4924 .add_see_also("rgw_usage_max_shards"),
4925
4926 Option("rgw_ops_log_rados", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
4927 .set_default(true)
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"}),
4932
4933 Option("rgw_ops_log_socket_path", Option::TYPE_STR, Option::LEVEL_ADVANCED)
4934 .set_default("")
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"}),
4940
4941 Option("rgw_ops_log_data_backlog", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4942 .set_default(5 << 20)
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"}),
4950
4951 Option("rgw_fcgi_socket_backlog", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4952 .set_default(1024)
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"}),
4958
4959 Option("rgw_usage_log_flush_threshold", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4960 .set_default(1024)
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"}),
4968
4969 Option("rgw_usage_log_tick_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4970 .set_default(30)
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"}),
4977
4978 Option("rgw_init_timeout", Option::TYPE_INT, Option::LEVEL_BASIC)
4979 .set_default(300)
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."),
4985
4986 Option("rgw_mime_types_file", Option::TYPE_STR, Option::LEVEL_BASIC)
4987 .set_default("/etc/mime.types")
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."),
4993
4994 Option("rgw_gc_max_objs", Option::TYPE_INT, Option::LEVEL_ADVANCED)
4995 .set_default(32)
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"}),
5001
5002 Option("rgw_gc_obj_min_wait", Option::TYPE_INT, Option::LEVEL_ADVANCED)
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"}),
5011
5012 Option("rgw_gc_processor_max_time", Option::TYPE_INT, Option::LEVEL_ADVANCED)
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"}),
5023
5024 Option("rgw_gc_processor_period", Option::TYPE_INT, Option::LEVEL_ADVANCED)
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"}),
5032
5033 Option("rgw_s3_success_create_obj_status", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5034 .set_default(0)
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."),
5039
5040 Option("rgw_resolve_cname", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5041 .set_default(false)
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."),
5048
5049 Option("rgw_obj_stripe_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
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."),
5056
5057 Option("rgw_extended_http_attrs", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5058 .set_default("")
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."),
5064
5065 Option("rgw_exit_timeout_secs", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5066 .set_default(120)
5067 .set_description("RGW shutdown timeout")
5068 .set_long_description("Number of seconds to wait for a process before exiting unconditionally."),
5069
5070 Option("rgw_get_obj_window_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
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"),
5074
5075 Option("rgw_get_obj_max_req_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
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"),
5080
5081 Option("rgw_relaxed_s3_bucket_names", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5082 .set_default(false)
5083 .set_description("RGW enable relaxed S3 bucket names")
5084 .set_long_description("RGW enable relaxed S3 bucket name rules for US region buckets."),
5085
5086 Option("rgw_defer_to_bucket_acls", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5087 .set_default("")
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."),
5093
5094 Option("rgw_list_buckets_max_chunk", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5095 .set_default(1000)
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."),
5101
5102 Option("rgw_md_log_max_shards", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5103 .set_default(64)
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"),
5109
5110 Option("rgw_num_zone_opstate_shards", Option::TYPE_INT, Option::LEVEL_DEV)
5111 .set_default(128)
5112 .set_description(""),
5113
5114 Option("rgw_opstate_ratelimit_sec", Option::TYPE_INT, Option::LEVEL_DEV)
5115 .set_default(30)
5116 .set_description(""),
5117
5118 Option("rgw_curl_wait_timeout_ms", Option::TYPE_INT, Option::LEVEL_DEV)
5119 .set_default(1000)
5120 .set_description(""),
5121
5122 Option("rgw_copy_obj_progress", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5123 .set_default(true)
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. "),
5127
5128 Option("rgw_copy_obj_progress_every_bytes", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5129 .set_default(1_M)
5130 .set_description("Send copy-object progress info after these many bytes"),
5131
5132 Option("rgw_obj_tombstone_cache_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5133 .set_default(1000)
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."),
5139
5140 Option("rgw_data_log_window", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5141 .set_default(30)
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."),
5147
5148 Option("rgw_data_log_changes_size", Option::TYPE_INT, Option::LEVEL_DEV)
5149 .set_default(1000)
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."),
5154
5155 Option("rgw_data_log_num_shards", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5156 .set_default(128)
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."),
5161
5162 Option("rgw_data_log_obj_prefix", Option::TYPE_STR, Option::LEVEL_DEV)
5163 .set_default("data_log")
5164 .set_description(""),
5165
5166 Option("rgw_replica_log_obj_prefix", Option::TYPE_STR, Option::LEVEL_DEV)
5167 .set_default("replica_log")
5168 .set_description(""),
5169
5170 Option("rgw_bucket_quota_ttl", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5171 .set_default(600)
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."),
5175
5176 Option("rgw_bucket_quota_soft_threshold", Option::TYPE_FLOAT, Option::LEVEL_BASIC)
5177 .set_default(0.95)
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."),
5185
5186 Option("rgw_bucket_quota_cache_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5187 .set_default(10000)
5188 .set_description("RGW quota stats cache size")
5189 .set_long_description(
5190 "Maximum number of entries in the quota stats cache."),
5191
5192 Option("rgw_bucket_default_quota_max_objects", Option::TYPE_INT, Option::LEVEL_BASIC)
5193 .set_default(-1)
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'."),
5198
5199 Option("rgw_bucket_default_quota_max_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5200 .set_default(-1)
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'."),
5205
5206 Option("rgw_expose_bucket", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5207 .set_default(false)
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."),
5212
5213 Option("rgw_frontends", Option::TYPE_STR, Option::LEVEL_BASIC)
5214 .set_default("civetweb port=7480")
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."),
5220
5221 Option("rgw_user_quota_bucket_sync_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5222 .set_default(180)
5223 .set_description("User quota bucket sync interval")
5224 .set_long_description(
5225 "Time period for accumulating modified buckets before syncing these stats."),
5226
5227 Option("rgw_user_quota_sync_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
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."),
5232
5233 Option("rgw_user_quota_sync_idle_users", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5234 .set_default(false)
5235 .set_description("Should sync idle users quota")
5236 .set_long_description(
5237 "Whether stats for idle users be fully synced."),
5238
5239 Option("rgw_user_quota_sync_wait_time", Option::TYPE_INT, Option::LEVEL_ADVANCED)
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."),
5244
5245 Option("rgw_user_default_quota_max_objects", Option::TYPE_INT, Option::LEVEL_BASIC)
5246 .set_default(-1)
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'."),
5251
5252 Option("rgw_user_default_quota_max_size", Option::TYPE_INT, Option::LEVEL_BASIC)
5253 .set_default(-1)
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'."),
5258
5259 Option("rgw_multipart_min_part_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
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."),
5265
5266 Option("rgw_multipart_part_upload_limit", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5267 .set_default(10000)
5268 .set_description("Max number of parts in multipart upload"),
5269
5270 Option("rgw_max_slo_entries", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5271 .set_default(1000)
5272 .set_description("Max number of entries in Swift Static Large Object manifest"),
5273
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."),
5281
5282 Option("rgw_user_max_buckets", Option::TYPE_INT, Option::LEVEL_BASIC)
5283 .set_default(1000)
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."),
5288
5289 Option("rgw_objexp_gc_interval", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
5290 .set_default(10_min)
5291 .set_description("Swift objects expirer garbage collector interval"),
5292
5293 Option("rgw_objexp_hints_num_shards", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
5294 .set_default(127)
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."),
5298
5299 Option("rgw_objexp_chunk_size", Option::TYPE_UINT, Option::LEVEL_DEV)
5300 .set_default(100)
5301 .set_description(""),
5302
5303 Option("rgw_enable_static_website", Option::TYPE_BOOL, Option::LEVEL_BASIC)
5304 .set_default(false)
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."),
5310
5311 Option("rgw_log_http_headers", Option::TYPE_STR, Option::LEVEL_BASIC)
5312 .set_default("")
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)."),
5317
5318 Option("rgw_num_async_rados_threads", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5319 .set_default(32)
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."),
5325
5326 Option("rgw_md_notify_interval_msec", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5327 .set_default(200)
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."),
5333
5334 Option("rgw_run_sync_thread", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5335 .set_default(true)
5336 .set_description("Should run sync thread"),
5337
5338 Option("rgw_sync_lease_period", Option::TYPE_INT, Option::LEVEL_DEV)
5339 .set_default(120)
5340 .set_description(""),
5341
5342 Option("rgw_sync_log_trim_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5343 .set_default(1200)
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"),
5370
5371 Option("rgw_sync_data_inject_err_probability", Option::TYPE_FLOAT, Option::LEVEL_DEV)
5372 .set_default(0)
5373 .set_description(""),
5374
5375 Option("rgw_sync_meta_inject_err_probability", Option::TYPE_FLOAT, Option::LEVEL_DEV)
5376 .set_default(0)
5377 .set_description(""),
5378
5379 Option("rgw_period_push_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5380 .set_default(2)
5381 .set_description("Period push interval")
5382 .set_long_description(
5383 "Number of seconds to wait before retrying 'period push' operation."),
5384
5385 Option("rgw_period_push_interval_max", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5386 .set_default(30)
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."),
5391
5392 Option("rgw_safe_max_objects_per_shard", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5393 .set_default(100*1024)
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"),
5400
5401 Option("rgw_shard_warning_threshold", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5402 .set_default(90)
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"),
5408
5409 Option("rgw_swift_versioning_enabled", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5410 .set_default(false)
5411 .set_description("Enable Swift versioning"),
5412
5413 Option("rgw_swift_custom_header", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5414 .set_default("")
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."),
5420
5421 Option("rgw_swift_need_stats", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5422 .set_default(true)
5423 .set_description("Enable stats on bucket listing in Swift"),
5424
5425 Option("rgw_reshard_num_logs", Option::TYPE_INT, Option::LEVEL_DEV)
5426 .set_default(16)
5427 .set_description(""),
5428
5429 Option("rgw_reshard_bucket_lock_duration", Option::TYPE_INT, Option::LEVEL_DEV)
5430 .set_default(120)
5431 .set_description(""),
5432
5433 Option("rgw_crypt_require_ssl", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5434 .set_default(true)
5435 .set_description("Requests including encryption key headers must be sent over ssl"),
5436
5437 Option("rgw_crypt_default_encryption_key", Option::TYPE_STR, Option::LEVEL_DEV)
5438 .set_default("")
5439 .set_description(""),
5440
5441 Option("rgw_crypt_s3_kms_encryption_keys", Option::TYPE_STR, Option::LEVEL_DEV)
5442 .set_default("")
5443 .set_description(""),
5444
5445 Option("rgw_crypt_suppress_logs", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5446 .set_default(true)
5447 .set_description("Suppress logs that might print client key"),
5448
5449 Option("rgw_list_bucket_min_readahead", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5450 .set_default(1000)
5451 .set_description("Minimum number of entries to request from rados for bucket listing"),
5452
5453 Option("rgw_rest_getusage_op_compat", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5454 .set_default(false)
5455 .set_description("REST GetUsage request backward compatibility"),
5456
5457 Option("rgw_torrent_flag", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5458 .set_default(false)
5459 .set_description("Produce torrent function flag"),
5460
5461 Option("rgw_torrent_tracker", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5462 .set_default("")
5463 .set_description("Torrent field annouce and annouce list"),
5464
5465 Option("rgw_torrent_createby", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5466 .set_default("")
5467 .set_description("torrent field created by"),
5468
5469 Option("rgw_torrent_comment", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5470 .set_default("")
5471 .set_description("Torrent field comment"),
5472
5473 Option("rgw_torrent_encoding", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5474 .set_default("")
5475 .set_description("torrent field encoding"),
5476
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"),
5480
5481 Option("rgw_torrent_origin", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5482 .set_default("")
5483 .set_description("Torrent origin"),
5484
5485 Option("rgw_torrent_sha_unit", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5486 .set_default(512*1024)
5487 .set_description(""),
5488
5489 Option("rgw_dynamic_resharding", Option::TYPE_BOOL, Option::LEVEL_BASIC)
5490 .set_default(true)
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"),
5496
5497 Option("rgw_max_objs_per_shard", Option::TYPE_INT, Option::LEVEL_BASIC)
5498 .set_default(100000)
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"),
5505
5506 Option("rgw_reshard_thread_interval", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
5507 .set_default(10_min)
5508 .set_description(""),
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
5529 });
5530 }
5531
5532 static 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")
5536 .set_description("default pool for storing new images")
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("")
5548 .set_description("default pool for storing data blocks for new images")
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")
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")
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 }
5618
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)
5629 .set_description("number of threads to utilize for internal processing"),
5630
5631 Option("rbd_op_thread_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5632 .set_default(60)
5633 .set_description("time in seconds for detecting a hung thread"),
5634
5635 Option("rbd_non_blocking_aio", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5636 .set_default(true)
5637 .set_description("process AIO ops from a dispatch thread to prevent blocking"),
5638
5639 Option("rbd_cache", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5640 .set_default(true)
5641 .set_description("whether to enable caching (writeback unless rbd_cache_max_dirty is 0)"),
5642
5643 Option("rbd_cache_writethrough_until_flush", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5644 .set_default(true)
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"),
5648
5649 Option("rbd_cache_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5650 .set_default(32<<20)
5651 .set_description("cache size in bytes"),
5652
5653 Option("rbd_cache_max_dirty", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5654 .set_default(24<<20)
5655 .set_description("dirty limit in bytes - set to 0 for write-through caching"),
5656
5657 Option("rbd_cache_target_dirty", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5658 .set_default(16<<20)
5659 .set_description("target dirty limit in bytes"),
5660
5661 Option("rbd_cache_max_dirty_age", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5662 .set_default(1.0)
5663 .set_description("seconds in cache before writeback starts"),
5664
5665 Option("rbd_cache_max_dirty_object", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5666 .set_default(0)
5667 .set_description("dirty limit for objects - set to 0 for auto calculate from rbd_cache_size"),
5668
5669 Option("rbd_cache_block_writes_upfront", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5670 .set_default(false)
5671 .set_description("whether to block writes to the cache before the aio_write call completes"),
5672
5673 Option("rbd_concurrent_management_ops", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5674 .set_default(10)
5675 .set_min(1)
5676 .set_description("how many operations can be in flight for a management operation like deleting or resizing an image"),
5677
5678 Option("rbd_balance_snap_reads", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5679 .set_default(false)
5680 .set_description("distribute snap read requests to random OSD"),
5681
5682 Option("rbd_localize_snap_reads", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5683 .set_default(false)
5684 .set_description("localize snap read requests to closest OSD"),
5685
5686 Option("rbd_balance_parent_reads", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5687 .set_default(false)
5688 .set_description("distribute parent read requests to random OSD"),
5689
5690 Option("rbd_localize_parent_reads", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5691 .set_default(false)
5692 .set_description("localize parent requests to closest OSD"),
5693
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
5706 Option("rbd_readahead_trigger_requests", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5707 .set_default(10)
5708 .set_description("number of sequential requests necessary to trigger readahead"),
5709
5710 Option("rbd_readahead_max_bytes", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5711 .set_default(512_K)
5712 .set_description("set to 0 to disable readahead"),
5713
5714 Option("rbd_readahead_disable_after_bytes", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5715 .set_default(50_M)
5716 .set_description("how many bytes are read in total before readahead is disabled"),
5717
5718 Option("rbd_clone_copy_on_read", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5719 .set_default(false)
5720 .set_description("copy-up parent image blocks to clone upon read request"),
5721
5722 Option("rbd_blacklist_on_break_lock", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5723 .set_default(true)
5724 .set_description("whether to blacklist clients whose lock was broken"),
5725
5726 Option("rbd_blacklist_expire_seconds", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5727 .set_default(0)
5728 .set_description("number of seconds to blacklist - set to 0 for OSD default"),
5729
5730 Option("rbd_request_timed_out_seconds", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5731 .set_default(30)
5732 .set_description("number of seconds before maintenance request times out"),
5733
5734 Option("rbd_skip_partial_discard", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5735 .set_default(false)
5736 .set_description("when trying to discard a range inside an object, set to true to skip zeroing the range"),
5737
5738 Option("rbd_enable_alloc_hint", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5739 .set_default(true)
5740 .set_description("when writing a object, it will issue a hint to osd backend to indicate the expected size object need"),
5741
5742 Option("rbd_tracing", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5743 .set_default(false)
5744 .set_description("true if LTTng-UST tracepoints should be enabled"),
5745
5746 Option("rbd_blkin_trace_all", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5747 .set_default(false)
5748 .set_description("create a blkin trace for all RBD requests"),
5749
5750 Option("rbd_validate_pool", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5751 .set_default(true)
5752 .set_description("validate empty pools for RBD compatibility"),
5753
5754 Option("rbd_validate_names", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5755 .set_default(true)
5756 .set_description("validate new image names for RBD compatibility"),
5757
5758 Option("rbd_auto_exclusive_lock_until_manual_request", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5759 .set_default(true)
5760 .set_description("automatically acquire/release exclusive lock until it is explicitly requested"),
5761
5762 Option("rbd_mirroring_resync_after_disconnect", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5763 .set_default(false)
5764 .set_description("automatically start image resync after mirroring is disconnected due to being laggy"),
5765
5766 Option("rbd_mirroring_replay_delay", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5767 .set_default(0)
5768 .set_description("time-delay in seconds for rbd-mirror asynchronous replication"),
5769
5770 Option("rbd_default_format", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5771 .set_default(2)
5772 .set_description("default image format for new images"),
5773
5774 Option("rbd_default_order", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5775 .set_default(22)
5776 .set_description("default order (data block object size) for new images"),
5777
5778 Option("rbd_default_stripe_count", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
5779 .set_default(0)
5780 .set_description("default stripe count for new images"),
5781
5782 Option("rbd_default_stripe_unit", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
5783 .set_default(0)
5784 .set_description("default stripe width for new images"),
5785
5786 Option("rbd_default_map_options", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5787 .set_default("")
5788 .set_description("default krbd map options"),
5789
5790 Option("rbd_journal_order", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
5791 .set_min(12)
5792 .set_default(24)
5793 .set_description("default order (object size) for journal data objects"),
5794
5795 Option("rbd_journal_splay_width", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
5796 .set_default(4)
5797 .set_description("number of active journal objects"),
5798
5799 Option("rbd_journal_commit_age", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5800 .set_default(5)
5801 .set_description("commit time interval, seconds"),
5802
5803 Option("rbd_journal_object_flush_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5804 .set_default(0)
5805 .set_description("maximum number of pending commits per journal object"),
5806
5807 Option("rbd_journal_object_flush_bytes", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5808 .set_default(0)
5809 .set_description("maximum number of pending bytes per journal object"),
5810
5811 Option("rbd_journal_object_flush_age", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5812 .set_default(0)
5813 .set_description("maximum age (in seconds) for pending commits"),
5814
5815 Option("rbd_journal_pool", Option::TYPE_STR, Option::LEVEL_ADVANCED)
5816 .set_default("")
5817 .set_description("pool for journal objects"),
5818
5819 Option("rbd_journal_max_payload_bytes", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
5820 .set_default(16384)
5821 .set_description("maximum journal payload size before splitting"),
5822
5823 Option("rbd_journal_max_concurrent_object_sets", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5824 .set_default(0)
5825 .set_description("maximum number of object sets a journal client can be behind before it is automatically unregistered"),
5826 });
5827 }
5828
5829 static std::vector<Option> get_rbd_mirror_options() {
5830 return std::vector<Option>({
5831 Option("rbd_mirror_journal_commit_age", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5832 .set_default(5)
5833 .set_description("commit time interval, seconds"),
5834
5835 Option("rbd_mirror_journal_poll_age", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5836 .set_default(5)
5837 .set_description("maximum age (in seconds) between successive journal polls"),
5838
5839 Option("rbd_mirror_journal_max_fetch_bytes", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
5840 .set_default(32768)
5841 .set_description("maximum bytes to read from each journal data object per fetch"),
5842
5843 Option("rbd_mirror_sync_point_update_age", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5844 .set_default(30)
5845 .set_description("number of seconds between each update of the image sync point object number"),
5846
5847 Option("rbd_mirror_concurrent_image_syncs", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
5848 .set_default(5)
5849 .set_description("maximum number of image syncs in parallel"),
5850
5851 Option("rbd_mirror_pool_replayers_refresh_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5852 .set_default(30)
5853 .set_description("interval to refresh peers in rbd-mirror daemon"),
5854
5855 Option("rbd_mirror_delete_retry_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5856 .set_default(30)
5857 .set_description("interval to check and retry the failed requests in deleter"),
5858
5859 Option("rbd_mirror_image_state_check_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5860 .set_default(30)
5861 .set_min(1)
5862 .set_description("interval to get images from pool watcher and set sources in replayer"),
5863
5864 Option("rbd_mirror_leader_heartbeat_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5865 .set_default(5)
5866 .set_min(1)
5867 .set_description("interval (in seconds) between mirror leader heartbeats"),
5868
5869 Option("rbd_mirror_leader_max_missed_heartbeats", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5870 .set_default(2)
5871 .set_description("number of missed heartbeats for non-lock owner to attempt to acquire lock"),
5872
5873 Option("rbd_mirror_leader_max_acquire_attempts_before_break", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5874 .set_default(3)
5875 .set_description("number of failed attempts to acquire lock after missing heartbeats before breaking lock"),
5876 });
5877 }
5878
5879 std::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(""),
5884
5885 Option("mds_max_file_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
5886 .set_default(1ULL << 40)
5887 .set_description(""),
5888
5889 Option("mds_max_xattr_pairs_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
5890 .set_default(64 << 10)
5891 .set_description(""),
5892
5893 Option("mds_cache_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
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"),
5910
5911 Option("mds_cache_mid", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5912 .set_default(.7)
5913 .set_description(""),
5914
5915 Option("mds_max_file_recover", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
5916 .set_default(32)
5917 .set_description(""),
5918
5919 Option("mds_dir_max_commit_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5920 .set_default(10)
5921 .set_description(""),
5922
5923 Option("mds_dir_keys_per_op", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5924 .set_default(16384)
5925 .set_description(""),
5926
5927 Option("mds_decay_halflife", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5928 .set_default(5)
5929 .set_description(""),
5930
5931 Option("mds_beacon_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5932 .set_default(4)
5933 .set_description(""),
5934
5935 Option("mds_beacon_grace", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5936 .set_default(15)
5937 .set_description(""),
5938
5939 Option("mds_enforce_unique_name", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5940 .set_default(true)
5941 .set_description(""),
5942
5943 Option("mds_session_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5944 .set_default(60)
5945 .set_description(""),
5946
5947 Option("mds_session_blacklist_on_timeout", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5948 .set_default(true)
5949 .set_description(""),
5950
5951 Option("mds_session_blacklist_on_evict", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5952 .set_default(true)
5953 .set_description(""),
5954
5955 Option("mds_sessionmap_keys_per_op", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
5956 .set_default(1024)
5957 .set_description(""),
5958
5959 Option("mds_recall_state_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5960 .set_default(60)
5961 .set_description(""),
5962
5963 Option("mds_freeze_tree_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5964 .set_default(30)
5965 .set_description(""),
5966
5967 Option("mds_session_autoclose", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5968 .set_default(300)
5969 .set_description(""),
5970
5971 Option("mds_health_summarize_threshold", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5972 .set_default(10)
5973 .set_description(""),
5974
5975 Option("mds_reconnect_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5976 .set_default(45)
5977 .set_description(""),
5978
5979 Option("mds_tick_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5980 .set_default(5)
5981 .set_description(""),
5982
5983 Option("mds_dirstat_min_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5984 .set_default(1)
5985 .set_description(""),
5986
5987 Option("mds_scatter_nudge_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
5988 .set_default(5)
5989 .set_description(""),
5990
5991 Option("mds_client_prealloc_inos", Option::TYPE_INT, Option::LEVEL_ADVANCED)
5992 .set_default(1000)
5993 .set_description(""),
5994
5995 Option("mds_early_reply", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
5996 .set_default(true)
5997 .set_description(""),
5998
5999 Option("mds_default_dir_hash", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6000 .set_default(CEPH_STR_HASH_RJENKINS)
6001 .set_description(""),
6002
6003 Option("mds_log_pause", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6004 .set_default(false)
6005 .set_description(""),
6006
6007 Option("mds_log_skip_corrupt_events", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6008 .set_default(false)
6009 .set_description(""),
6010
6011 Option("mds_log_max_events", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6012 .set_default(-1)
6013 .set_description(""),
6014
6015 Option("mds_log_events_per_segment", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6016 .set_default(1024)
6017 .set_description(""),
6018
6019 Option("mds_log_segment_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6020 .set_default(0)
6021 .set_description(""),
6022
6023 Option("mds_log_max_segments", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
6024 .set_default(128)
6025 .set_description(""),
6026
6027 Option("mds_bal_export_pin", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6028 .set_default(true)
6029 .set_description(""),
6030
6031 Option("mds_bal_sample_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6032 .set_default(3.0)
6033 .set_description(""),
6034
6035 Option("mds_bal_replicate_threshold", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6036 .set_default(8000)
6037 .set_description(""),
6038
6039 Option("mds_bal_unreplicate_threshold", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6040 .set_default(0)
6041 .set_description(""),
6042
6043 Option("mds_bal_frag", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6044 .set_default(true)
6045 .set_description(""),
6046
6047 Option("mds_bal_split_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6048 .set_default(10000)
6049 .set_description(""),
6050
6051 Option("mds_bal_split_rd", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6052 .set_default(25000)
6053 .set_description(""),
6054
6055 Option("mds_bal_split_wr", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6056 .set_default(10000)
6057 .set_description(""),
6058
6059 Option("mds_bal_split_bits", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6060 .set_default(3)
6061 .set_description(""),
6062
6063 Option("mds_bal_merge_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6064 .set_default(50)
6065 .set_description(""),
6066
6067 Option("mds_bal_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6068 .set_default(10)
6069 .set_description(""),
6070
6071 Option("mds_bal_fragment_interval", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6072 .set_default(5)
6073 .set_description(""),
6074
6075 Option("mds_bal_fragment_size_max", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6076 .set_default(10000*10)
6077 .set_description(""),
6078
6079 Option("mds_bal_fragment_fast_factor", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6080 .set_default(1.5)
6081 .set_description(""),
6082
6083 Option("mds_bal_idle_threshold", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6084 .set_default(0)
6085 .set_description(""),
6086
6087 Option("mds_bal_max", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6088 .set_default(-1)
6089 .set_description(""),
6090
6091 Option("mds_bal_max_until", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6092 .set_default(-1)
6093 .set_description(""),
6094
6095 Option("mds_bal_mode", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6096 .set_default(0)
6097 .set_description(""),
6098
6099 Option("mds_bal_min_rebalance", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6100 .set_default(.1)
6101 .set_description(""),
6102
6103 Option("mds_bal_min_start", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6104 .set_default(.2)
6105 .set_description(""),
6106
6107 Option("mds_bal_need_min", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6108 .set_default(.8)
6109 .set_description(""),
6110
6111 Option("mds_bal_need_max", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6112 .set_default(1.2)
6113 .set_description(""),
6114
6115 Option("mds_bal_midchunk", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6116 .set_default(.3)
6117 .set_description(""),
6118
6119 Option("mds_bal_minchunk", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6120 .set_default(.001)
6121 .set_description(""),
6122
6123 Option("mds_bal_target_decay", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6124 .set_default(10.0)
6125 .set_description(""),
6126
6127 Option("mds_replay_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6128 .set_default(1.0)
6129 .set_description(""),
6130
6131 Option("mds_shutdown_check", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6132 .set_default(0)
6133 .set_description(""),
6134
6135 Option("mds_thrash_exports", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6136 .set_default(0)
6137 .set_description(""),
6138
6139 Option("mds_thrash_fragments", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6140 .set_default(0)
6141 .set_description(""),
6142
6143 Option("mds_dump_cache_on_map", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6144 .set_default(false)
6145 .set_description(""),
6146
6147 Option("mds_dump_cache_after_rejoin", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6148 .set_default(false)
6149 .set_description(""),
6150
6151 Option("mds_verify_scatter", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6152 .set_default(false)
6153 .set_description(""),
6154
6155 Option("mds_debug_scatterstat", Option::TYPE_BOOL, Option::LEVEL_DEV)
6156 .set_default(false)
6157 .set_description(""),
6158
6159 Option("mds_debug_frag", Option::TYPE_BOOL, Option::LEVEL_DEV)
6160 .set_default(false)
6161 .set_description(""),
6162
6163 Option("mds_debug_auth_pins", Option::TYPE_BOOL, Option::LEVEL_DEV)
6164 .set_default(false)
6165 .set_description(""),
6166
6167 Option("mds_debug_subtrees", Option::TYPE_BOOL, Option::LEVEL_DEV)
6168 .set_default(false)
6169 .set_description(""),
6170
6171 Option("mds_kill_mdstable_at", Option::TYPE_INT, Option::LEVEL_DEV)
6172 .set_default(0)
6173 .set_description(""),
6174
6175 Option("mds_max_export_size", Option::TYPE_UINT, Option::LEVEL_DEV)
6176 .set_default(1_G)
6177 .set_description(""),
6178
6179 Option("mds_kill_export_at", Option::TYPE_INT, Option::LEVEL_DEV)
6180 .set_default(0)
6181 .set_description(""),
6182
6183 Option("mds_kill_import_at", Option::TYPE_INT, Option::LEVEL_DEV)
6184 .set_default(0)
6185 .set_description(""),
6186
6187 Option("mds_kill_link_at", Option::TYPE_INT, Option::LEVEL_DEV)
6188 .set_default(0)
6189 .set_description(""),
6190
6191 Option("mds_kill_rename_at", Option::TYPE_INT, Option::LEVEL_DEV)
6192 .set_default(0)
6193 .set_description(""),
6194
6195 Option("mds_kill_openc_at", Option::TYPE_INT, Option::LEVEL_DEV)
6196 .set_default(0)
6197 .set_description(""),
6198
6199 Option("mds_kill_journal_at", Option::TYPE_INT, Option::LEVEL_DEV)
6200 .set_default(0)
6201 .set_description(""),
6202
6203 Option("mds_kill_journal_expire_at", Option::TYPE_INT, Option::LEVEL_DEV)
6204 .set_default(0)
6205 .set_description(""),
6206
6207 Option("mds_kill_journal_replay_at", Option::TYPE_INT, Option::LEVEL_DEV)
6208 .set_default(0)
6209 .set_description(""),
6210
6211 Option("mds_journal_format", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
6212 .set_default(1)
6213 .set_description(""),
6214
6215 Option("mds_kill_create_at", Option::TYPE_INT, Option::LEVEL_DEV)
6216 .set_default(0)
6217 .set_description(""),
6218
6219 Option("mds_inject_traceless_reply_probability", Option::TYPE_FLOAT, Option::LEVEL_DEV)
6220 .set_default(0)
6221 .set_description(""),
6222
6223 Option("mds_wipe_sessions", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6224 .set_default(0)
6225 .set_description(""),
6226
6227 Option("mds_wipe_ino_prealloc", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6228 .set_default(0)
6229 .set_description(""),
6230
6231 Option("mds_skip_ino", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6232 .set_default(0)
6233 .set_description(""),
6234
6235 Option("mds_standby_for_name", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6236 .set_default("")
6237 .set_description(""),
6238
6239 Option("mds_standby_for_rank", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6240 .set_default(-1)
6241 .set_description(""),
6242
6243 Option("mds_standby_for_fscid", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6244 .set_default(-1)
6245 .set_description(""),
6246
6247 Option("mds_standby_replay", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6248 .set_default(false)
6249 .set_description(""),
6250
6251 Option("mds_enable_op_tracker", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6252 .set_default(true)
6253 .set_description(""),
6254
6255 Option("mds_op_history_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
6256 .set_default(20)
6257 .set_description(""),
6258
6259 Option("mds_op_history_duration", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
6260 .set_default(600)
6261 .set_description(""),
6262
6263 Option("mds_op_complaint_time", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6264 .set_default(30)
6265 .set_description(""),
6266
6267 Option("mds_op_log_threshold", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6268 .set_default(5)
6269 .set_description(""),
6270
6271 Option("mds_snap_min_uid", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
6272 .set_default(0)
6273 .set_description(""),
6274
6275 Option("mds_snap_max_uid", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
6276 .set_default(4294967294)
6277 .set_description(""),
6278
6279 Option("mds_snap_rstat", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6280 .set_default(false)
6281 .set_description(""),
6282
6283 Option("mds_verify_backtrace", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
6284 .set_default(1)
6285 .set_description(""),
6286
6287 Option("mds_max_completed_flushes", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
6288 .set_default(100000)
6289 .set_description(""),
6290
6291 Option("mds_max_completed_requests", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
6292 .set_default(100000)
6293 .set_description(""),
6294
6295 Option("mds_action_on_write_error", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
6296 .set_default(1)
6297 .set_description(""),
6298
6299 Option("mds_mon_shutdown_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6300 .set_default(5)
6301 .set_description(""),
6302
6303 Option("mds_max_purge_files", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
6304 .set_default(64)
6305 .set_description(""),
6306
6307 Option("mds_max_purge_ops", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
6308 .set_default(8192)
6309 .set_description(""),
6310
6311 Option("mds_max_purge_ops_per_pg", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6312 .set_default(0.5)
6313 .set_description(""),
6314
6315 Option("mds_purge_queue_busy_flush_period", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6316 .set_default(1.0)
6317 .set_description(""),
6318
6319 Option("mds_root_ino_uid", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6320 .set_default(0)
6321 .set_description(""),
6322
6323 Option("mds_root_ino_gid", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6324 .set_default(0)
6325 .set_description(""),
6326
6327 Option("mds_max_scrub_ops_in_progress", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6328 .set_default(5)
6329 .set_description(""),
6330
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(""),
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
6343 Option("mds_max_ratio_caps_per_client", Option::TYPE_FLOAT, Option::LEVEL_DEV)
6344 .set_default(.8)
6345 .set_description("maximum ratio of current caps that may be recalled during MDS cache pressure"),
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."),
6349 });
6350 }
6351
6352 std::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(""),
6357
6358 Option("client_cache_mid", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6359 .set_default(.75)
6360 .set_description(""),
6361
6362 Option("client_use_random_mds", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6363 .set_default(false)
6364 .set_description(""),
6365
6366 Option("client_mount_timeout", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6367 .set_default(300.0)
6368 .set_description(""),
6369
6370 Option("client_tick_interval", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6371 .set_default(1.0)
6372 .set_description(""),
6373
6374 Option("client_trace", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6375 .set_default("")
6376 .set_description(""),
6377
6378 Option("client_readahead_min", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6379 .set_default(128*1024)
6380 .set_description(""),
6381
6382 Option("client_readahead_max_bytes", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6383 .set_default(0)
6384 .set_description(""),
6385
6386 Option("client_readahead_max_periods", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6387 .set_default(4)
6388 .set_description(""),
6389
6390 Option("client_reconnect_stale", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6391 .set_default(false)
6392 .set_description(""),
6393
6394 Option("client_snapdir", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6395 .set_default(".snap")
6396 .set_description(""),
6397
6398 Option("client_mountpoint", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6399 .set_default("/")
6400 .set_description(""),
6401
6402 Option("client_mount_uid", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6403 .set_default(-1)
6404 .set_description(""),
6405
6406 Option("client_mount_gid", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6407 .set_default(-1)
6408 .set_description(""),
6409
6410 Option("client_notify_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6411 .set_default(10)
6412 .set_description(""),
6413
6414 Option("osd_client_watch_timeout", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6415 .set_default(30)
6416 .set_description(""),
6417
6418 Option("client_caps_release_delay", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6419 .set_default(5)
6420 .set_description(""),
6421
6422 Option("client_quota_df", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6423 .set_default(true)
6424 .set_description(""),
6425
6426 Option("client_oc", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6427 .set_default(true)
6428 .set_description(""),
6429
6430 Option("client_oc_size", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6431 .set_default(200_M)
6432 .set_description(""),
6433
6434 Option("client_oc_max_dirty", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6435 .set_default(100_M)
6436 .set_description(""),
6437
6438 Option("client_oc_target_dirty", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6439 .set_default(8_M)
6440 .set_description(""),
6441
6442 Option("client_oc_max_dirty_age", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
6443 .set_default(5.0)
6444 .set_description(""),
6445
6446 Option("client_oc_max_objects", Option::TYPE_INT, Option::LEVEL_ADVANCED)
6447 .set_default(1000)
6448 .set_description(""),
6449
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(""),
6457
6458 Option("client_debug_inject_tick_delay", Option::TYPE_INT, Option::LEVEL_DEV)
6459 .set_default(0)
6460 .set_description(""),
6461
6462 Option("client_max_inline_size", Option::TYPE_UINT, Option::LEVEL_ADVANCED)
6463 .set_default(4_K)
6464 .set_description(""),
6465
6466 Option("client_inject_release_failure", Option::TYPE_BOOL, Option::LEVEL_DEV)
6467 .set_default(false)
6468 .set_description(""),
6469
6470 Option("client_inject_fixed_oldest_tid", Option::TYPE_BOOL, Option::LEVEL_DEV)
6471 .set_default(false)
6472 .set_description(""),
6473
6474 Option("client_metadata", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6475 .set_default("")
6476 .set_description(""),
6477
6478 Option("client_acl_type", Option::TYPE_STR, Option::LEVEL_ADVANCED)
6479 .set_default("")
6480 .set_description(""),
6481
6482 Option("client_permissions", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6483 .set_default(true)
6484 .set_description(""),
6485
6486 Option("client_dirsize_rbytes", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6487 .set_default(true)
6488 .set_description(""),
6489
6490 Option("fuse_use_invalidate_cb", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6491 .set_default(true)
6492 .set_description(""),
6493
6494 Option("fuse_disable_pagecache", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6495 .set_default(false)
6496 .set_description(""),
6497
6498 Option("fuse_allow_other", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6499 .set_default(true)
6500 .set_description(""),
6501
6502 Option("fuse_default_permissions", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6503 .set_default(false)
6504 .set_description(""),
6505
6506 Option("fuse_big_writes", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6507 .set_default(true)
6508 .set_description(""),
6509
6510 Option("fuse_atomic_o_trunc", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6511 .set_default(true)
6512 .set_description(""),
6513
6514 Option("fuse_debug", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6515 .set_default(false)
6516 .set_description(""),
6517
6518 Option("fuse_multithreaded", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6519 .set_default(true)
6520 .set_description(""),
6521
6522 Option("fuse_require_active_mds", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6523 .set_default(true)
6524 .set_description(""),
6525
6526 Option("fuse_syncfs_on_mksnap", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6527 .set_default(true)
6528 .set_description(""),
6529
6530 Option("fuse_set_user_groups", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6531 .set_default(true)
6532 .set_description("check for ceph-fuse to consider supplementary groups for permissions"),
6533
6534 Option("client_try_dentry_invalidate", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
6535 .set_default(false)
6536 .set_description(""),
6537
6538 Option("client_die_on_failed_remount", Option::TYPE_BOOL, Option::LEVEL_DEV)
6539 .set_default(false)
6540 .set_description(""),
6541
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
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 }
6560
6561
6562 static std::vector<Option> build_options()
6563 {
6564 std::vector<Option> result = get_global_options();
6565
6566 auto ingest = [&result](std::vector<Option>&& options, const char* svc) {
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
6574 ingest(get_rgw_options(), "rgw");
6575 ingest(get_rbd_options(), "rbd");
6576 ingest(get_rbd_mirror_options(), "rbd-mirror");
6577 ingest(get_mds_options(), "mds");
6578 ingest(get_mds_client_options(), "mds_client");
6579
6580 return result;
6581 }
6582
6583 const std::vector<Option> ceph_options = build_options();