]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
common: generate legacy_config_opts.h from .yaml.in files
authorKefu Chai <kchai@redhat.com>
Tue, 13 Apr 2021 05:43:57 +0000 (13:43 +0800)
committerKefu Chai <kchai@redhat.com>
Thu, 15 Apr 2021 04:37:43 +0000 (12:37 +0800)
* add a setting named "with_legacy" to .yaml.in files, so
  each option with a true "with_legacy" will have an entry
  in legacy_config_opts.h.
* preserve the comments from legacy_config_opts.h to .yaml.in,
  some of them are solely for developers, but some of them are
  good reading for users as well. we can use them for "desc"
  field in a follow-up change.
* move common/legacy_config_opts.h to common/options/legacy_config_opts.h
  as legacy_config_opts.h is "closer" to the options directory
  than other sources files under src/common.
* update y2c.py to generate separate .h files which are in turn
  included by legacy_config_opts.h
* add a target named "legacy-option-headers", and let
  some targets depend on it so that these headers generated by
  y2c.py can be generated before the .cc files including them
  are compiled.

Signed-off-by: Kefu Chai <kchai@redhat.com>
13 files changed:
src/CMakeLists.txt
src/auth/CMakeLists.txt
src/common/CMakeLists.txt
src/common/config.cc
src/common/config_values.h
src/common/legacy_config_opts.h [deleted file]
src/common/options/CMakeLists.txt
src/common/options/global.yaml.in
src/common/options/legacy_config_opts.h [new file with mode: 0644]
src/common/options/mds-client.yaml.in
src/common/options/mds.yaml.in
src/common/options/rgw.yaml.in
src/common/options/y2c.py

index 12e8300efaf0805df0b578d594c876d3489ca3c6..01a4bf69e6d0a5e73a423ebf1a8275dd0684a009 100644 (file)
@@ -399,6 +399,7 @@ endif()
 set_source_files_properties(ceph_ver.c
   APPEND PROPERTY OBJECT_DEPENDS ${CMAKE_BINARY_DIR}/src/include/ceph_ver.h)
 add_library(common-objs OBJECT ${libcommon_files})
+add_dependencies(common-objs legacy-option-headers)
 
 if(WITH_JAEGER)
   find_package(yaml-cpp 0.6.0)
index 8e849373a0b6e80dcf530f252c110ea9caf50db2..1ab294332cb84d9444dd34795fb2ca372cbb6cf3 100644 (file)
@@ -22,3 +22,4 @@ endif()
 
 add_library(common-auth-objs OBJECT ${auth_srcs})
 target_include_directories(common-auth-objs PRIVATE ${OPENSSL_INCLUDE_DIR})
+add_dependencies(common-auth-objs legacy-option-headers)
index 2feaa80800d9892a22cb191c00a063e9df91d218..e16b5aba346b9a5d12412db326c6196e11f9fec0 100644 (file)
@@ -6,6 +6,7 @@ add_library(common_texttable_obj OBJECT
 
 add_library(common_prioritycache_obj OBJECT
   PriorityCache.cc)
+add_dependencies(common_prioritycache_obj legacy-option-headers)
 
 if(WIN32)
   add_library(dlfcn_win32 STATIC win32/dlfcn.cc win32/errno.cc)
@@ -188,6 +189,7 @@ target_compile_definitions(common-common-objs PRIVATE
   "CMAKE_INSTALL_LIBDIR=\"${CMAKE_INSTALL_LIBDIR}\""
   "CEPH_INSTALL_FULL_PKGLIBDIR=\"${CEPH_INSTALL_FULL_PKGLIBDIR}\""
   "CEPH_INSTALL_DATADIR=\"${CEPH_INSTALL_DATADIR}\"")
+add_dependencies(common-common-objs legacy-option-headers)
 
 set(common_mountcephfs_srcs
   armor.c
index b110e99772715d059b03b8968e231a49246b2f53..700352ed1fb1686dfd65d1514a66791f56bab2db 100644 (file)
@@ -185,7 +185,7 @@ md_config_t::md_config_t(ConfigValues& values,
 #define OPTION(name, type) \
     {STRINGIFY(name), &ConfigValues::name},
 #define SAFE_OPTION(name, type) OPTION(name, type)
-#include "common/legacy_config_opts.h"
+#include "options/legacy_config_opts.h"
 #undef OPTION
 #undef SAFE_OPTION
   };
index 5cf79eee65990ada61ec331df85850d63e7fff04..6347709cc98ff676ab09bc3f891c270369cb8e03 100644 (file)
@@ -56,7 +56,7 @@ public:
 #define SAFE_OPTION(name, ty)       \
   protected:                        \
     OPTION_##ty(name)               
-#include "common/legacy_config_opts.h"
+#include "common/options/legacy_config_opts.h"
 #undef OPTION_OPT_INT
 #undef OPTION_OPT_LONGLONG
 #undef OPTION_OPT_STR
diff --git a/src/common/legacy_config_opts.h b/src/common/legacy_config_opts.h
deleted file mode 100644 (file)
index 5282031..0000000
+++ /dev/null
@@ -1,1564 +0,0 @@
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab
-/*
- * Ceph - scalable distributed file system
- *
- * Copyright (C) 2004-2006 Sage Weil <sage@newdream.net>
- *
- * This is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1, as published by the Free Software
- * Foundation.  See file COPYING.
- *
- */
-
-/* note: no header guard */
-OPTION(host, OPT_STR) // "" means that ceph will use short hostname
-OPTION(public_addr, OPT_ADDR)
-OPTION(public_addrv, OPT_ADDRVEC)
-OPTION(public_bind_addr, OPT_ADDR)
-OPTION(cluster_addr, OPT_ADDR)
-OPTION(public_network, OPT_STR)
-OPTION(cluster_network, OPT_STR)
-OPTION(lockdep, OPT_BOOL)
-OPTION(lockdep_force_backtrace, OPT_BOOL) // always gather current backtrace at every lock
-OPTION(run_dir, OPT_STR)       // the "/var/run/ceph" dir, created on daemon startup
-OPTION(admin_socket, OPT_STR) // default changed by common_preinit()
-OPTION(admin_socket_mode, OPT_STR) // permission bits to set for admin socket file, e.g., "0775", "0755"
-
-OPTION(daemonize, OPT_BOOL) // default changed by common_preinit()
-OPTION(setuser, OPT_STR)        // uid or user name
-OPTION(setgroup, OPT_STR)        // gid or group name
-OPTION(setuser_match_path, OPT_STR)  // make setuser/group conditional on this path matching ownership
-OPTION(pid_file, OPT_STR) // default changed by common_preinit()
-OPTION(chdir, OPT_STR)
-OPTION(restapi_log_level, OPT_STR)     // default set by Python code
-OPTION(restapi_base_url, OPT_STR)      // "
-OPTION(fatal_signal_handlers, OPT_BOOL)
-OPTION(crash_dir, OPT_STR)
-SAFE_OPTION(erasure_code_dir, OPT_STR) // default location for erasure-code plugins
-
-OPTION(log_file, OPT_STR) // default changed by common_preinit()
-OPTION(log_max_new, OPT_INT) // default changed by common_preinit()
-OPTION(log_max_recent, OPT_INT) // default changed by common_preinit()
-OPTION(log_to_file, OPT_BOOL)
-OPTION(log_to_stderr, OPT_BOOL) // default changed by common_preinit()
-OPTION(err_to_stderr, OPT_BOOL) // default changed by common_preinit()
-OPTION(log_to_syslog, OPT_BOOL)
-OPTION(err_to_syslog, OPT_BOOL)
-OPTION(log_flush_on_exit, OPT_BOOL) // default changed by common_preinit()
-OPTION(log_stop_at_utilization, OPT_FLOAT)  // stop logging at (near) full
-OPTION(log_to_graylog, OPT_BOOL)
-OPTION(err_to_graylog, OPT_BOOL)
-OPTION(log_graylog_host, OPT_STR)
-OPTION(log_graylog_port, OPT_INT)
-
-// options will take k/v pairs, or single-item that will be assumed as general
-// default for all, regardless of channel.
-// e.g., "info" would be taken as the same as "default=info"
-// also, "default=daemon audit=local0" would mean
-//    "default all to 'daemon', override 'audit' with 'local0'
-OPTION(clog_to_monitors, OPT_STR)
-OPTION(clog_to_syslog, OPT_STR)
-OPTION(clog_to_syslog_level, OPT_STR) // this level and above
-OPTION(clog_to_syslog_facility, OPT_STR)
-OPTION(clog_to_graylog, OPT_STR)
-OPTION(clog_to_graylog_host, OPT_STR)
-OPTION(clog_to_graylog_port, OPT_STR)
-
-OPTION(mon_cluster_log_to_syslog, OPT_STR)
-OPTION(mon_cluster_log_to_syslog_level, OPT_STR)   // this level and above
-OPTION(mon_cluster_log_to_syslog_facility, OPT_STR)
-OPTION(mon_cluster_log_to_file, OPT_BOOL)
-OPTION(mon_cluster_log_file, OPT_STR)
-OPTION(mon_cluster_log_file_level, OPT_STR)
-OPTION(mon_cluster_log_to_graylog, OPT_STR)
-OPTION(mon_cluster_log_to_graylog_host, OPT_STR)
-OPTION(mon_cluster_log_to_graylog_port, OPT_STR)
-
-OPTION(enable_experimental_unrecoverable_data_corrupting_features, OPT_STR)
-
-SAFE_OPTION(plugin_dir, OPT_STR)
-
-OPTION(compressor_zlib_isal, OPT_BOOL)
-OPTION(compressor_zlib_level, OPT_INT) //regular zlib compression level, not applicable to isa-l optimized version
-OPTION(compressor_zlib_winsize, OPT_INT) //regular zlib compression winsize, not applicable to isa-l optimized version
-OPTION(compressor_zstd_level, OPT_INT) //regular zstd compression level
-
-OPTION(qat_compressor_enabled, OPT_BOOL)
-
-OPTION(plugin_crypto_accelerator, OPT_STR)
-
-OPTION(mempool_debug, OPT_BOOL)
-
-OPTION(openssl_engine_opts, OPT_STR)
-
-OPTION(key, OPT_STR)
-OPTION(keyfile, OPT_STR)
-OPTION(keyring, OPT_STR)
-OPTION(heartbeat_interval, OPT_INT)
-OPTION(heartbeat_file, OPT_STR)
-OPTION(heartbeat_inject_failure, OPT_INT)    // force an unhealthy heartbeat for N seconds
-OPTION(perf, OPT_BOOL)       // enable internal perf counters
-
-SAFE_OPTION(ms_type, OPT_STR)   // messenger backend. It will be modified in runtime, so use SAFE_OPTION
-OPTION(ms_public_type, OPT_STR)   // messenger backend
-OPTION(ms_cluster_type, OPT_STR)   // messenger backend
-OPTION(ms_learn_addr_from_peer, OPT_BOOL)
-OPTION(ms_tcp_nodelay, OPT_BOOL)
-OPTION(ms_tcp_rcvbuf, OPT_INT)
-OPTION(ms_tcp_prefetch_max_size, OPT_U32) // max prefetch size, we limit this to avoid extra memcpy
-OPTION(ms_initial_backoff, OPT_DOUBLE)
-OPTION(ms_max_backoff, OPT_DOUBLE)
-OPTION(ms_crc_data, OPT_BOOL)
-OPTION(ms_crc_header, OPT_BOOL)
-OPTION(ms_die_on_bad_msg, OPT_BOOL)
-OPTION(ms_die_on_unhandled_msg, OPT_BOOL)
-OPTION(ms_die_on_old_message, OPT_BOOL)     // assert if we get a dup incoming message and shouldn't have (may be triggered by pre-541cd3c64be0dfa04e8a2df39422e0eb9541a428 code)
-OPTION(ms_die_on_skipped_message, OPT_BOOL)  // assert if we skip a seq (kernel client does this intentionally)
-OPTION(ms_die_on_bug, OPT_BOOL)
-OPTION(ms_dispatch_throttle_bytes, OPT_U64)
-OPTION(ms_bind_ipv6, OPT_BOOL)
-OPTION(ms_bind_port_min, OPT_INT)
-OPTION(ms_bind_port_max, OPT_INT)
-OPTION(ms_bind_retry_count, OPT_INT) // If binding fails, how many times do we retry to bind
-OPTION(ms_bind_retry_delay, OPT_INT) // Delay between attempts to bind
-OPTION(ms_bind_before_connect, OPT_BOOL)
-OPTION(ms_tcp_listen_backlog, OPT_INT)
-OPTION(ms_connection_ready_timeout, OPT_U64)
-OPTION(ms_connection_idle_timeout, OPT_U64)
-OPTION(ms_pq_max_tokens_per_priority, OPT_U64)
-OPTION(ms_pq_min_cost, OPT_U64)
-OPTION(ms_inject_socket_failures, OPT_U64)
-SAFE_OPTION(ms_inject_delay_type, OPT_STR)          // "osd mds mon client" allowed
-OPTION(ms_inject_delay_max, OPT_DOUBLE)         // seconds
-OPTION(ms_inject_delay_probability, OPT_DOUBLE) // range [0, 1]
-OPTION(ms_inject_internal_delays, OPT_DOUBLE)   // seconds
-OPTION(ms_blackhole_osd, OPT_BOOL)
-OPTION(ms_blackhole_mon, OPT_BOOL)
-OPTION(ms_blackhole_mds, OPT_BOOL)
-OPTION(ms_blackhole_mgr, OPT_BOOL)
-OPTION(ms_blackhole_client, OPT_BOOL)
-OPTION(ms_dump_on_send, OPT_BOOL)           // hexdump msg to log on send
-OPTION(ms_dump_corrupt_message_level, OPT_INT)  // debug level to hexdump undecodeable messages at
-OPTION(ms_async_op_threads, OPT_U64)            // number of worker processing threads for async messenger created on init
-OPTION(ms_async_rdma_device_name, OPT_STR)
-OPTION(ms_async_rdma_enable_hugepage, OPT_BOOL)
-OPTION(ms_async_rdma_buffer_size, OPT_INT)
-OPTION(ms_async_rdma_send_buffers, OPT_U32)
-//size of the receive buffer pool, 0 is unlimited
-OPTION(ms_async_rdma_receive_buffers, OPT_U32)
-// max number of wr in srq
-OPTION(ms_async_rdma_receive_queue_len, OPT_U32)
-// support srq
-OPTION(ms_async_rdma_support_srq, OPT_BOOL)
-OPTION(ms_async_rdma_port_num, OPT_U32)
-OPTION(ms_async_rdma_polling_us, OPT_U32)
-OPTION(ms_async_rdma_local_gid, OPT_STR)       // GID format: "fe80:0000:0000:0000:7efe:90ff:fe72:6efe", no zero folding
-OPTION(ms_async_rdma_roce_ver, OPT_INT)         // 0=RoCEv1, 1=RoCEv2, 2=RoCEv1.5
-OPTION(ms_async_rdma_sl, OPT_INT)               // in RoCE, this means PCP
-OPTION(ms_async_rdma_dscp, OPT_INT)            // in RoCE, this means DSCP
-
-// rdma connection management
-OPTION(ms_async_rdma_cm, OPT_BOOL)
-OPTION(ms_async_rdma_type, OPT_STR)
-
-// when there are enough accept failures, indicating there are unrecoverable failures,
-// just do ceph_abort() . Here we make it configurable.
-OPTION(ms_max_accept_failures, OPT_INT)
-
-OPTION(ms_dpdk_port_id, OPT_INT)
-SAFE_OPTION(ms_dpdk_coremask, OPT_STR)        // it is modified in unittest so that use SAFE_OPTION to declare
-OPTION(ms_dpdk_memory_channel, OPT_STR)
-OPTION(ms_dpdk_hugepages, OPT_STR)
-OPTION(ms_dpdk_pmd, OPT_STR)
-SAFE_OPTION(ms_dpdk_host_ipv4_addr, OPT_STR)
-SAFE_OPTION(ms_dpdk_gateway_ipv4_addr, OPT_STR)
-SAFE_OPTION(ms_dpdk_netmask_ipv4_addr, OPT_STR)
-OPTION(ms_dpdk_lro, OPT_BOOL)
-OPTION(ms_dpdk_hw_flow_control, OPT_BOOL)
-// Weighing of a hardware network queue relative to a software queue (0=no work, 1=     equal share)")
-OPTION(ms_dpdk_hw_queue_weight, OPT_FLOAT)
-OPTION(ms_dpdk_debug_allow_loopback, OPT_BOOL)
-OPTION(ms_dpdk_rx_buffer_count_per_core, OPT_INT)
-
-OPTION(inject_early_sigterm, OPT_BOOL)
-
-OPTION(mon_data, OPT_STR)
-OPTION(mon_initial_members, OPT_STR)    // list of initial cluster mon ids; if specified, need majority to form initial quorum and create new cluster
-OPTION(mon_compact_on_start, OPT_BOOL)  // compact leveldb on ceph-mon start
-OPTION(mon_compact_on_bootstrap, OPT_BOOL)  // trigger leveldb compaction on bootstrap
-OPTION(mon_compact_on_trim, OPT_BOOL)       // compact (a prefix) when we trim old states
-OPTION(mon_osd_cache_size, OPT_INT)  // the size of osdmaps cache, not to rely on underlying store's cache
-
-OPTION(mon_osd_cache_size_min, OPT_U64) // minimum amount of memory to cache osdmaps
-OPTION(mon_memory_target, OPT_U64) // amount of mapped memory for osdmaps
-OPTION(mon_memory_autotune, OPT_BOOL) // autotune cache memory for osdmap
-OPTION(mon_cpu_threads, OPT_INT)
-OPTION(mon_osd_mapping_pgs_per_chunk, OPT_INT)
-OPTION(mon_clean_pg_upmaps_per_chunk, OPT_U64)
-OPTION(mon_osd_max_creating_pgs, OPT_INT)
-OPTION(mon_tick_interval, OPT_INT)
-OPTION(mon_session_timeout, OPT_INT)    // must send keepalive or subscribe
-OPTION(mon_subscribe_interval, OPT_DOUBLE)  // for legacy clients only
-OPTION(mon_delta_reset_interval, OPT_DOUBLE)   // seconds of inactivity before we reset the pg delta to 0
-OPTION(mon_osd_laggy_halflife, OPT_INT)        // (seconds) how quickly our laggy estimations decay
-OPTION(mon_osd_laggy_weight, OPT_DOUBLE)          // weight for new 'samples's in laggy estimations
-OPTION(mon_osd_laggy_max_interval, OPT_INT)      // maximum value of laggy_interval in laggy estimations
-OPTION(mon_osd_adjust_heartbeat_grace, OPT_BOOL)    // true if we should scale based on laggy estimations
-OPTION(mon_osd_adjust_down_out_interval, OPT_BOOL)  // true if we should scale based on laggy estimations
-OPTION(mon_osd_auto_mark_in, OPT_BOOL)         // mark any booting osds 'in'
-OPTION(mon_osd_auto_mark_auto_out_in, OPT_BOOL) // mark booting auto-marked-out osds 'in'
-OPTION(mon_osd_auto_mark_new_in, OPT_BOOL)      // mark booting new osds 'in'
-OPTION(mon_osd_destroyed_out_interval, OPT_INT) // seconds
-OPTION(mon_osd_down_out_interval, OPT_INT) // seconds
-OPTION(mon_osd_min_up_ratio, OPT_DOUBLE)    // min osds required to be up to mark things down
-OPTION(mon_osd_min_in_ratio, OPT_DOUBLE)   // min osds required to be in to mark things out
-OPTION(mon_osd_warn_op_age, OPT_DOUBLE)     // max op age before we generate a warning (make it a power of 2)
-OPTION(mon_osd_err_op_age_ratio, OPT_DOUBLE)  // when to generate an error, as multiple of mon_osd_warn_op_age
-OPTION(mon_osd_prime_pg_temp, OPT_BOOL)  // prime osdmap with pg mapping changes
-OPTION(mon_osd_prime_pg_temp_max_time, OPT_FLOAT)  // max time to spend priming
-OPTION(mon_osd_prime_pg_temp_max_estimate, OPT_FLOAT) // max estimate of pg total before we do all pgs in parallel
-OPTION(mon_election_timeout, OPT_FLOAT)  // on election proposer, max waiting time for all ACKs
-OPTION(mon_lease, OPT_FLOAT)       // lease interval
-OPTION(mon_lease_renew_interval_factor, OPT_FLOAT) // on leader, to renew the lease
-OPTION(mon_lease_ack_timeout_factor, OPT_FLOAT) // on leader, if lease isn't acked by all peons
-OPTION(mon_accept_timeout_factor, OPT_FLOAT)    // on leader, if paxos update isn't accepted
-
-OPTION(mon_clock_drift_allowed, OPT_FLOAT) // allowed clock drift between monitors
-OPTION(mon_clock_drift_warn_backoff, OPT_FLOAT) // exponential backoff for clock drift warnings
-OPTION(mon_timecheck_interval, OPT_FLOAT) // on leader, timecheck (clock drift check) interval (seconds)
-OPTION(mon_timecheck_skew_interval, OPT_FLOAT) // on leader, timecheck (clock drift check) interval when in presence of a skew (seconds)
-OPTION(mon_pg_check_down_all_threshold, OPT_FLOAT) // threshold of down osds after which we check all pgs
-OPTION(mon_cache_target_full_warn_ratio, OPT_FLOAT) // position between pool cache_target_full and max where we start warning
-OPTION(mon_osd_full_ratio, OPT_FLOAT) // what % full makes an OSD "full"
-OPTION(mon_osd_backfillfull_ratio, OPT_FLOAT) // what % full makes an OSD backfill full (backfill halted)
-OPTION(mon_osd_nearfull_ratio, OPT_FLOAT) // what % full makes an OSD near full
-OPTION(mon_osd_initial_require_min_compat_client, OPT_STR)
-OPTION(mon_allow_pool_delete, OPT_BOOL) // allow pool deletion
-OPTION(mon_fake_pool_delete, OPT_BOOL)  // fake pool deletion (add _DELETED suffix)
-OPTION(mon_globalid_prealloc, OPT_U32)   // how many globalids to prealloc
-OPTION(mon_osd_report_timeout, OPT_INT)    // grace period before declaring unresponsive OSDs dead
-OPTION(mon_warn_on_legacy_crush_tunables, OPT_BOOL) // warn if crush tunables are too old (older than mon_min_crush_required_version)
-OPTION(mon_crush_min_required_version, OPT_STR)
-OPTION(mon_warn_on_crush_straw_calc_version_zero, OPT_BOOL) // warn if crush straw_calc_version==0
-OPTION(mon_warn_on_osd_down_out_interval_zero, OPT_BOOL) // warn if 'mon_osd_down_out_interval == 0'
-OPTION(mon_warn_on_cache_pools_without_hit_sets, OPT_BOOL)
-OPTION(mon_warn_on_misplaced, OPT_BOOL)
-OPTION(mon_min_osdmap_epochs, OPT_INT)
-OPTION(mon_max_log_epochs, OPT_INT)
-OPTION(mon_max_mdsmap_epochs, OPT_INT)
-OPTION(mon_max_osd, OPT_INT)
-OPTION(mon_probe_timeout, OPT_DOUBLE)
-OPTION(mon_client_bytes, OPT_U64)  // client msg data allowed in memory (in bytes)
-OPTION(mon_log_max_summary, OPT_U64)
-OPTION(mon_daemon_bytes, OPT_U64)  // mds, osd message memory cap (in bytes)
-OPTION(mon_max_log_entries_per_event, OPT_INT)
-OPTION(mon_reweight_min_pgs_per_osd, OPT_U64)   // min pgs per osd for reweight-by-pg command
-OPTION(mon_reweight_min_bytes_per_osd, OPT_U64)   // min bytes per osd for reweight-by-utilization command
-OPTION(mon_reweight_max_osds, OPT_INT)   // max osds to change per reweight-by-* command
-OPTION(mon_reweight_max_change, OPT_DOUBLE)
-OPTION(mon_health_to_clog, OPT_BOOL)
-OPTION(mon_health_to_clog_interval, OPT_INT)
-OPTION(mon_health_to_clog_tick_interval, OPT_DOUBLE)
-OPTION(mon_health_detail_to_clog, OPT_BOOL)
-OPTION(mon_data_avail_crit, OPT_INT)
-OPTION(mon_data_avail_warn, OPT_INT)
-OPTION(mon_data_size_warn, OPT_U64) // issue a warning when the monitor's data store goes over 15GB (in bytes)
-OPTION(mon_warn_pg_not_scrubbed_ratio, OPT_FLOAT)
-OPTION(mon_warn_pg_not_deep_scrubbed_ratio, OPT_FLOAT)
-OPTION(mon_scrub_timeout, OPT_INT) // let's give it 5 minutes; why not.
-OPTION(mon_scrub_max_keys, OPT_INT) // max number of keys to scrub each time
-OPTION(mon_scrub_inject_crc_mismatch, OPT_DOUBLE) // probability of injected crc mismatch [0.0, 1.0]
-OPTION(mon_scrub_inject_missing_keys, OPT_DOUBLE) // probability of injected missing keys [0.0, 1.0]
-OPTION(mon_config_key_max_entry_size, OPT_INT) // max num bytes per config-key entry
-OPTION(mon_sync_timeout, OPT_DOUBLE)
-OPTION(mon_sync_max_payload_size, OPT_SIZE)
-OPTION(mon_sync_max_payload_keys, OPT_INT)
-OPTION(mon_sync_debug, OPT_BOOL) // enable sync-specific debug
-OPTION(mon_inject_sync_get_chunk_delay, OPT_DOUBLE)  // inject N second delay on each get_chunk request
-OPTION(mon_osd_force_trim_to, OPT_INT)   // force mon to trim maps to this point, regardless of min_last_epoch_clean (dangerous)
-OPTION(mon_mds_force_trim_to, OPT_INT)   // force mon to trim mdsmaps to this point (dangerous)
-OPTION(mon_mds_skip_sanity, OPT_BOOL)  // skip safety assertions on FSMap (in case of bugs where we want to continue anyway)
-OPTION(mon_osd_snap_trim_queue_warn_on, OPT_INT)
-
-// monitor debug options
-OPTION(mon_debug_deprecated_as_obsolete, OPT_BOOL) // consider deprecated commands as obsolete
-
-// dump transactions
-OPTION(mon_debug_dump_transactions, OPT_BOOL)
-OPTION(mon_debug_dump_json, OPT_BOOL)
-OPTION(mon_debug_dump_location, OPT_STR)
-OPTION(mon_debug_no_require_bluestore_for_ec_overwrites, OPT_BOOL)
-OPTION(mon_debug_no_initial_persistent_features, OPT_BOOL)
-OPTION(mon_inject_transaction_delay_max, OPT_DOUBLE)      // seconds
-OPTION(mon_inject_transaction_delay_probability, OPT_DOUBLE) // range [0, 1]
-
-OPTION(mon_sync_provider_kill_at, OPT_INT)  // kill the sync provider at a specific point in the work flow
-OPTION(mon_sync_requester_kill_at, OPT_INT) // kill the sync requester at a specific point in the work flow
-OPTION(mon_force_quorum_join, OPT_BOOL) // force monitor to join quorum even if it has been previously removed from the map
-OPTION(mon_keyvaluedb, OPT_STR)   // type of keyvaluedb backend
-
-// UNSAFE -- TESTING ONLY! Allows addition of a cache tier with preexisting snaps
-OPTION(mon_debug_unsafe_allow_tier_with_nonempty_snaps, OPT_BOOL)
-OPTION(mon_osd_blocklist_default_expire, OPT_DOUBLE) // default one hour
-OPTION(mon_osd_crush_smoke_test, OPT_BOOL)
-
-OPTION(paxos_stash_full_interval, OPT_INT)   // how often (in commits) to stash a full copy of the PaxosService state
-OPTION(paxos_max_join_drift, OPT_INT) // max paxos iterations before we must first sync the monitor stores
-OPTION(paxos_propose_interval, OPT_DOUBLE)  // gather updates for this long before proposing a map update
-OPTION(paxos_min_wait, OPT_DOUBLE)  // min time to gather updates for after period of inactivity
-OPTION(paxos_min, OPT_INT)       // minimum number of paxos states to keep around
-OPTION(paxos_trim_min, OPT_INT)  // number of extra proposals tolerated before trimming
-OPTION(paxos_trim_max, OPT_INT) // max number of extra proposals to trim at a time
-OPTION(paxos_service_trim_min, OPT_INT) // minimum amount of versions to trigger a trim (0 disables it)
-OPTION(paxos_service_trim_max, OPT_INT) // maximum amount of versions to trim during a single proposal (0 disables it)
-OPTION(paxos_kill_at, OPT_INT)
-OPTION(auth_cluster_required, OPT_STR)   // required of mon, mds, osd daemons
-OPTION(auth_service_required, OPT_STR)   // required by daemons of clients
-OPTION(auth_client_required, OPT_STR)     // what clients require of daemons
-OPTION(auth_supported, OPT_STR)               // deprecated; default value for above if they are not defined.
-OPTION(max_rotating_auth_attempts, OPT_INT)
-OPTION(cephx_require_signatures, OPT_BOOL)
-OPTION(cephx_cluster_require_signatures, OPT_BOOL)
-OPTION(cephx_service_require_signatures, OPT_BOOL)
-OPTION(cephx_require_version, OPT_INT)
-OPTION(cephx_cluster_require_version, OPT_INT)
-OPTION(cephx_service_require_version, OPT_INT)
-OPTION(cephx_sign_messages, OPT_BOOL)  // Default to signing session messages if supported
-OPTION(auth_mon_ticket_ttl, OPT_DOUBLE)
-OPTION(auth_service_ticket_ttl, OPT_DOUBLE)
-OPTION(auth_allow_insecure_global_id_reclaim, OPT_BOOL)
-OPTION(auth_expose_insecure_global_id_reclaim, OPT_BOOL)
-OPTION(auth_debug, OPT_BOOL)          // if true, assert when weird things happen
-OPTION(mon_client_hunt_parallel, OPT_U32)   // how many mons to try to connect to in parallel during hunt
-OPTION(mon_client_hunt_interval, OPT_DOUBLE)   // try new mon every N seconds until we connect
-OPTION(mon_client_log_interval, OPT_DOUBLE)  // send logs every N seconds
-OPTION(mon_client_ping_interval, OPT_DOUBLE)  // ping every N seconds
-OPTION(mon_client_ping_timeout, OPT_DOUBLE)   // fail if we don't hear back
-OPTION(mon_client_hunt_interval_backoff, OPT_DOUBLE) // each time we reconnect to a monitor, double our timeout
-OPTION(mon_client_hunt_interval_max_multiple, OPT_DOUBLE) // up to a max of 10*default (30 seconds)
-OPTION(mon_client_max_log_entries_per_message, OPT_INT)
-OPTION(mon_client_directed_command_retry, OPT_INT)
-OPTION(client_cache_size, OPT_INT)
-OPTION(client_cache_mid, OPT_FLOAT)
-OPTION(client_use_random_mds, OPT_BOOL)
-OPTION(client_mount_timeout, OPT_DOUBLE)
-OPTION(client_trace, OPT_STR)
-OPTION(client_readahead_min, OPT_LONGLONG)  // readahead at _least_ this much.
-OPTION(client_readahead_max_bytes, OPT_LONGLONG)  // default unlimited
-OPTION(client_readahead_max_periods, OPT_LONGLONG)  // as multiple of file layout period (object size * num stripes)
-OPTION(client_snapdir, OPT_STR)
-OPTION(client_mount_uid, OPT_INT)
-OPTION(client_mount_gid, OPT_INT)
-OPTION(client_notify_timeout, OPT_INT) // in seconds
-OPTION(osd_client_watch_timeout, OPT_INT) // in seconds
-OPTION(client_caps_release_delay, OPT_INT) // in seconds
-OPTION(client_quota_df, OPT_BOOL) // use quota for df on subdir mounts
-OPTION(client_oc, OPT_BOOL)
-OPTION(client_oc_size, OPT_INT)    // MB * n
-OPTION(client_oc_max_dirty, OPT_INT)    // MB * n  (dirty OR tx.. bigish)
-OPTION(client_oc_target_dirty, OPT_INT) // target dirty (keep this smallish)
-OPTION(client_oc_max_dirty_age, OPT_DOUBLE)      // max age in cache before writeback
-OPTION(client_oc_max_objects, OPT_INT)      // max objects in cache
-OPTION(client_debug_getattr_caps, OPT_BOOL) // check if MDS reply contains wanted caps
-OPTION(client_debug_force_sync_read, OPT_BOOL)     // always read synchronously (go to osds)
-OPTION(client_max_inline_size, OPT_U64)
-OPTION(client_inject_release_failure, OPT_BOOL)  // synthetic client bug for testing
-OPTION(client_inject_fixed_oldest_tid, OPT_BOOL)  // synthetic client bug for testing
-OPTION(client_metadata, OPT_STR)
-OPTION(client_acl_type, OPT_STR)
-OPTION(client_permissions, OPT_BOOL)
-OPTION(client_dirsize_rbytes, OPT_BOOL)
-
-OPTION(client_try_dentry_invalidate, OPT_BOOL) // the client should try to use dentry invaldation instead of remounting, on kernels it believes that will work for
-OPTION(client_check_pool_perm, OPT_BOOL)
-OPTION(client_use_faked_inos, OPT_BOOL)
-
-OPTION(crush_location, OPT_STR)       // whitespace-separated list of key=value pairs describing crush location
-OPTION(crush_location_hook, OPT_STR)
-OPTION(crush_location_hook_timeout, OPT_INT)
-
-OPTION(objecter_tick_interval, OPT_DOUBLE)
-OPTION(objecter_timeout, OPT_DOUBLE)    // before we ask for a map
-OPTION(objecter_inflight_op_bytes, OPT_U64) // max in-flight data (both directions)
-OPTION(objecter_inflight_ops, OPT_U64)               // max in-flight ios
-OPTION(objecter_completion_locks_per_session, OPT_U64) // num of completion locks per each session, for serializing same object responses
-OPTION(objecter_inject_no_watch_ping, OPT_BOOL)   // suppress watch pings
-OPTION(objecter_retry_writes_after_first_reply, OPT_BOOL)   // ignore the first reply for each write, and resend the osd op instead
-OPTION(objecter_debug_inject_relock_delay, OPT_BOOL)
-
-// Max number of deletes at once in a single Filer::purge call
-OPTION(filer_max_purge_ops, OPT_U32)
-// Max number of truncate at once in a single Filer::truncate call
-OPTION(filer_max_truncate_ops, OPT_U32)
-
-OPTION(mds_data, OPT_STR)
-// max xattr kv pairs size for each dir/file
-OPTION(mds_max_xattr_pairs_size, OPT_U32)
-OPTION(mds_max_file_recover, OPT_U32)
-OPTION(mds_dir_max_commit_size, OPT_INT) // MB
-OPTION(mds_dir_keys_per_op, OPT_INT)
-OPTION(mds_decay_halflife, OPT_FLOAT)
-OPTION(mds_beacon_interval, OPT_FLOAT)
-OPTION(mds_beacon_grace, OPT_FLOAT)
-OPTION(mds_enforce_unique_name, OPT_BOOL)
-
-OPTION(mds_session_blocklist_on_timeout, OPT_BOOL)    // whether to blocklist clients whose sessions are dropped due to timeout
-OPTION(mds_session_blocklist_on_evict, OPT_BOOL)  // whether to blocklist clients whose sessions are dropped via admin commands
-
-OPTION(mds_sessionmap_keys_per_op, OPT_U32)    // how many sessions should I try to load/store in a single OMAP operation?
-OPTION(mds_freeze_tree_timeout, OPT_FLOAT)    // detecting freeze tree deadlock
-OPTION(mds_health_summarize_threshold, OPT_INT) // collapse N-client health metrics to a single 'many'
-OPTION(mds_reconnect_timeout, OPT_FLOAT)  // seconds to wait for clients during mds restart
-             //  make it (mdsmap.session_timeout - mds_beacon_grace)
-OPTION(mds_tick_interval, OPT_FLOAT)
-OPTION(mds_dirstat_min_interval, OPT_FLOAT)    // try to avoid propagating more often than this
-OPTION(mds_scatter_nudge_interval, OPT_FLOAT)  // how quickly dirstat changes propagate up the hierarchy
-OPTION(mds_client_prealloc_inos, OPT_INT)
-OPTION(mds_early_reply, OPT_BOOL)
-OPTION(mds_default_dir_hash, OPT_INT)
-OPTION(mds_log_pause, OPT_BOOL)
-OPTION(mds_log_skip_corrupt_events, OPT_BOOL)
-OPTION(mds_log_max_events, OPT_INT)
-OPTION(mds_log_events_per_segment, OPT_INT)
-OPTION(mds_log_segment_size, OPT_INT)  // segment size for mds log, default to default file_layout_t
-OPTION(mds_log_max_segments, OPT_U32)
-OPTION(mds_bal_export_pin, OPT_BOOL)  // allow clients to pin directory trees to ranks
-OPTION(mds_bal_sample_interval, OPT_DOUBLE)  // every 3 seconds
-OPTION(mds_bal_replicate_threshold, OPT_FLOAT)
-OPTION(mds_bal_unreplicate_threshold, OPT_FLOAT)
-OPTION(mds_bal_split_size, OPT_INT)
-OPTION(mds_bal_split_rd, OPT_FLOAT)
-OPTION(mds_bal_split_wr, OPT_FLOAT)
-OPTION(mds_bal_split_bits, OPT_INT)
-OPTION(mds_bal_merge_size, OPT_INT)
-OPTION(mds_bal_fragment_size_max, OPT_INT) // order of magnitude higher than split size
-OPTION(mds_bal_fragment_fast_factor, OPT_FLOAT) // multiple of size_max that triggers immediate split
-OPTION(mds_bal_idle_threshold, OPT_FLOAT)
-OPTION(mds_bal_max, OPT_INT)
-OPTION(mds_bal_max_until, OPT_INT)
-OPTION(mds_bal_mode, OPT_INT)
-OPTION(mds_bal_min_rebalance, OPT_FLOAT)  // must be this much above average before we export anything
-OPTION(mds_bal_min_start, OPT_FLOAT)      // if we need less than this, we don't do anything
-OPTION(mds_bal_need_min, OPT_FLOAT)       // take within this range of what we need
-OPTION(mds_bal_need_max, OPT_FLOAT)
-OPTION(mds_bal_midchunk, OPT_FLOAT)       // any sub bigger than this taken in full
-OPTION(mds_bal_minchunk, OPT_FLOAT)     // never take anything smaller than this
-OPTION(mds_bal_target_decay, OPT_DOUBLE) // target decay half-life in MDSMap (2x larger is approx. 2x slower)
-OPTION(mds_replay_interval, OPT_FLOAT) // time to wait before starting replay again
-OPTION(mds_shutdown_check, OPT_INT)
-OPTION(mds_thrash_exports, OPT_INT)
-OPTION(mds_thrash_fragments, OPT_INT)
-OPTION(mds_dump_cache_on_map, OPT_BOOL)
-OPTION(mds_dump_cache_after_rejoin, OPT_BOOL)
-OPTION(mds_verify_scatter, OPT_BOOL)
-OPTION(mds_debug_scatterstat, OPT_BOOL)
-OPTION(mds_debug_frag, OPT_BOOL)
-OPTION(mds_debug_auth_pins, OPT_BOOL)
-OPTION(mds_debug_subtrees, OPT_BOOL)
-OPTION(mds_kill_mdstable_at, OPT_INT)
-OPTION(mds_kill_export_at, OPT_INT)
-OPTION(mds_kill_import_at, OPT_INT)
-OPTION(mds_kill_link_at, OPT_INT)
-OPTION(mds_kill_rename_at, OPT_INT)
-OPTION(mds_kill_openc_at, OPT_INT)
-OPTION(mds_kill_journal_expire_at, OPT_INT)
-OPTION(mds_kill_journal_replay_at, OPT_INT)
-OPTION(mds_journal_format, OPT_U32)  // Default to most recent JOURNAL_FORMAT_*
-OPTION(mds_kill_create_at, OPT_INT)
-OPTION(mds_inject_traceless_reply_probability, OPT_DOUBLE) /* percentage
-                               of MDS modify replies to skip sending the
-                               client a trace on [0-1]*/
-OPTION(mds_wipe_sessions, OPT_BOOL)
-OPTION(mds_wipe_ino_prealloc, OPT_BOOL)
-OPTION(mds_skip_ino, OPT_INT)
-OPTION(mds_enable_op_tracker, OPT_BOOL) // enable/disable MDS op tracking
-OPTION(mds_op_history_size, OPT_U32)    // Max number of completed ops to track
-OPTION(mds_op_history_duration, OPT_U32) // Oldest completed op to track
-OPTION(mds_op_complaint_time, OPT_FLOAT) // how many seconds old makes an op complaint-worthy
-OPTION(mds_op_log_threshold, OPT_INT) // how many op log messages to show in one go
-OPTION(mds_snap_min_uid, OPT_U32) // The minimum UID required to create a snapshot
-OPTION(mds_snap_max_uid, OPT_U32) // The maximum UID allowed to create a snapshot
-OPTION(mds_snap_rstat, OPT_BOOL) // enable/disable nested stat for snapshot
-OPTION(mds_verify_backtrace, OPT_U32)
-// detect clients which aren't trimming completed requests
-OPTION(mds_max_completed_flushes, OPT_U32)
-OPTION(mds_max_completed_requests, OPT_U32)
-
-OPTION(mds_action_on_write_error, OPT_U32) // 0: ignore; 1: force readonly; 2: crash
-OPTION(mds_mon_shutdown_timeout, OPT_DOUBLE)
-
-// Maximum number of concurrent stray files to purge
-OPTION(mds_max_purge_files, OPT_U32)
-// Maximum number of concurrent RADOS ops to issue in purging
-OPTION(mds_max_purge_ops, OPT_U32)
-// Maximum number of concurrent RADOS ops to issue in purging, scaled by PG count
-OPTION(mds_max_purge_ops_per_pg, OPT_FLOAT)
-
-OPTION(mds_purge_queue_busy_flush_period, OPT_FLOAT)
-
-OPTION(mds_root_ino_uid, OPT_INT) // The UID of / on new filesystems
-OPTION(mds_root_ino_gid, OPT_INT) // The GID of / on new filesystems
-
-OPTION(mds_max_scrub_ops_in_progress, OPT_INT) // the number of simultaneous scrubs allowed
-
-// Maximum number of damaged frags/dentries before whole MDS rank goes damaged
-OPTION(mds_damage_table_max_entries, OPT_INT)
-
-// Maximum increment for client writable range, counted by number of objects
-OPTION(mds_client_writeable_range_max_inc_objs, OPT_U32)
-
-// verify backend can support configured max object name length
-OPTION(osd_check_max_object_name_len_on_startup, OPT_BOOL)
-
-// Maximum number of backfills to or from a single osd
-OPTION(osd_max_backfills, OPT_U64)
-
-// Minimum recovery priority (255 = max, smaller = lower)
-OPTION(osd_min_recovery_priority, OPT_INT)
-
-// Seconds to wait before retrying refused backfills
-OPTION(osd_backfill_retry_interval, OPT_DOUBLE)
-
-// Seconds to wait before retrying refused recovery
-OPTION(osd_recovery_retry_interval, OPT_DOUBLE)
-
-// max agent flush ops
-OPTION(osd_agent_max_ops, OPT_INT)
-OPTION(osd_agent_max_low_ops, OPT_INT)
-OPTION(osd_agent_min_evict_effort, OPT_FLOAT)
-OPTION(osd_agent_quantize_effort, OPT_FLOAT)
-OPTION(osd_agent_delay_time, OPT_FLOAT)
-
-// osd ignore history.last_epoch_started in find_best_info
-OPTION(osd_find_best_info_ignore_history_les, OPT_BOOL)
-
-// decay atime and hist histograms after how many objects go by
-OPTION(osd_agent_hist_halflife, OPT_INT)
-
-// must be this amount over the threshold to enable,
-// this amount below the threshold to disable.
-OPTION(osd_agent_slop, OPT_FLOAT)
-
-OPTION(osd_uuid, OPT_UUID)
-OPTION(osd_data, OPT_STR)
-OPTION(osd_journal, OPT_STR)
-OPTION(osd_journal_size, OPT_INT)         // in mb
-OPTION(osd_journal_flush_on_shutdown, OPT_BOOL) // Flush journal to data store on shutdown
-// flags for specific control purpose during osd mount() process.
-// e.g., can be 1 to skip over replaying journal
-// or 2 to skip over mounting omap or 3 to skip over both.
-// This might be helpful in case the journal is totally corrupted
-// and we still want to bring the osd daemon back normally, etc.
-OPTION(osd_os_flags, OPT_U32)
-OPTION(osd_max_write_size, OPT_INT)
-OPTION(osd_max_pgls, OPT_U64) // max number of pgls entries to return
-OPTION(osd_client_message_size_cap, OPT_U64) // client data allowed in-memory (in bytes)
-OPTION(osd_client_message_cap, OPT_U64)              // num client messages allowed in-memory
-OPTION(osd_crush_update_weight_set, OPT_BOOL) // update weight set while updating weights
-OPTION(osd_crush_chooseleaf_type, OPT_INT) // 1 = host
-OPTION(osd_pool_use_gmt_hitset, OPT_BOOL) // try to use gmt for hitset archive names if all osds in cluster support it.
-OPTION(osd_crush_update_on_start, OPT_BOOL)
-OPTION(osd_class_update_on_start, OPT_BOOL) // automatically set device class on start
-OPTION(osd_crush_initial_weight, OPT_DOUBLE) // if >=0, the initial weight is for newly added osds.
-OPTION(osd_erasure_code_plugins, OPT_STR) // list of erasure code plugins
-
-// Allows the "peered" state for recovery and backfill below min_size
-OPTION(osd_allow_recovery_below_min_size, OPT_BOOL)
-
-OPTION(osd_pool_default_ec_fast_read, OPT_BOOL) // whether turn on fast read on the pool or not
-OPTION(osd_pool_default_flags, OPT_INT)   // default flags for new pools
-OPTION(osd_pool_default_flag_hashpspool, OPT_BOOL)   // use new pg hashing to prevent pool/pg overlap
-OPTION(osd_pool_default_flag_nodelete, OPT_BOOL) // pool can't be deleted
-OPTION(osd_pool_default_flag_nopgchange, OPT_BOOL) // pool's pg and pgp num can't be changed
-OPTION(osd_pool_default_flag_nosizechange, OPT_BOOL) // pool's size and min size can't be changed
-OPTION(osd_pool_default_hit_set_bloom_fpp, OPT_FLOAT)
-OPTION(osd_pool_default_cache_target_dirty_ratio, OPT_FLOAT)
-OPTION(osd_pool_default_cache_target_dirty_high_ratio, OPT_FLOAT)
-OPTION(osd_pool_default_cache_target_full_ratio, OPT_FLOAT)
-OPTION(osd_pool_default_cache_min_flush_age, OPT_INT)  // seconds
-OPTION(osd_pool_default_cache_min_evict_age, OPT_INT)  // seconds
-OPTION(osd_pool_default_cache_max_evict_check_size, OPT_INT)  // max size to check for eviction
-OPTION(osd_pool_default_read_lease_ratio, OPT_FLOAT)
-OPTION(osd_hit_set_min_size, OPT_INT)  // min target size for a HitSet
-OPTION(osd_hit_set_max_size, OPT_INT)  // max target size for a HitSet
-OPTION(osd_hit_set_namespace, OPT_STR) // rados namespace for hit_set tracking
-
-// conservative default throttling values
-OPTION(osd_tier_promote_max_objects_sec, OPT_U64)
-OPTION(osd_tier_promote_max_bytes_sec, OPT_U64)
-
-OPTION(osd_objecter_finishers, OPT_INT)
-
-OPTION(osd_map_dedup, OPT_BOOL)
-OPTION(osd_map_cache_size, OPT_INT)
-OPTION(osd_map_message_max, OPT_INT)  // max maps per MOSDMap message
-OPTION(osd_map_message_max_bytes, OPT_SIZE)  // max bytes of maps per MOSDMap message
-OPTION(osd_map_share_max_epochs, OPT_INT)  // cap on # of inc maps we send to peers, clients
-OPTION(osd_inject_bad_map_crc_probability, OPT_FLOAT)
-OPTION(osd_inject_failure_on_pg_removal, OPT_BOOL)
-// shutdown the OSD if stuatus flipping more than max_markdown_count times in recent max_markdown_period seconds
-OPTION(osd_max_markdown_period , OPT_INT)
-OPTION(osd_max_markdown_count, OPT_INT)
-
-OPTION(osd_op_pq_max_tokens_per_priority, OPT_U64)
-OPTION(osd_op_pq_min_cost, OPT_U64)
-OPTION(osd_recover_clone_overlap, OPT_BOOL)   // preserve clone_overlap during recovery/migration
-OPTION(osd_op_num_threads_per_shard, OPT_INT)
-OPTION(osd_op_num_threads_per_shard_hdd, OPT_INT)
-OPTION(osd_op_num_threads_per_shard_ssd, OPT_INT)
-OPTION(osd_op_num_shards, OPT_INT)
-OPTION(osd_op_num_shards_hdd, OPT_INT)
-OPTION(osd_op_num_shards_ssd, OPT_INT)
-
-// PrioritzedQueue (prio), Weighted Priority Queue (wpq ; default),
-// mclock_opclass, mclock_client, or debug_random. "mclock_opclass"
-// and "mclock_client" are based on the mClock/dmClock algorithm
-// (Gulati, et al. 2010). "mclock_opclass" prioritizes based on the
-// class the operation belongs to. "mclock_client" does the same but
-// also works to ienforce fairness between clients. "debug_random"
-// chooses among all four with equal probability.
-OPTION(osd_op_queue, OPT_STR)
-
-OPTION(osd_op_queue_cut_off, OPT_STR) // Min priority to go to strict queue. (low, high)
-
-OPTION(osd_ignore_stale_divergent_priors, OPT_BOOL) // do not assert on divergent_prior entries which aren't in the log and whose on-disk objects are newer
-
-// Set to true for testing.  Users should NOT set this.
-// If set to true even after reading enough shards to
-// decode the object, any error will be reported.
-OPTION(osd_read_ec_check_for_errors, OPT_BOOL) // return error if any ec shard has an error
-
-OPTION(osd_debug_feed_pullee, OPT_INT)
-
-OPTION(osd_backfill_scan_min, OPT_INT)
-OPTION(osd_backfill_scan_max, OPT_INT)
-OPTION(osd_op_thread_timeout, OPT_INT)
-OPTION(osd_op_thread_suicide_timeout, OPT_INT)
-OPTION(osd_recovery_sleep, OPT_FLOAT)         // seconds to sleep between recovery ops
-OPTION(osd_recovery_sleep_hdd, OPT_FLOAT)
-OPTION(osd_recovery_sleep_ssd, OPT_FLOAT)
-OPTION(osd_snap_trim_sleep, OPT_DOUBLE)
-OPTION(osd_scrub_invalid_stats, OPT_BOOL)
-OPTION(osd_command_thread_timeout, OPT_INT)
-OPTION(osd_command_thread_suicide_timeout, OPT_INT)
-OPTION(osd_heartbeat_interval, OPT_INT)       // (seconds) how often we ping peers
-
-// (seconds) how long before we decide a peer has failed
-// This setting is read by the MONs and OSDs and has to be set to a equal value in both settings of the configuration
-OPTION(osd_heartbeat_grace, OPT_INT)
-OPTION(osd_heartbeat_min_peers, OPT_INT)     // minimum number of peers
-OPTION(osd_heartbeat_use_min_delay_socket, OPT_BOOL) // prio the heartbeat tcp socket and set dscp as CS6 on it if true
-OPTION(osd_heartbeat_min_size, OPT_INT) // the minimum size of OSD heartbeat messages to send
-
-// max number of parallel snap trims/pg
-OPTION(osd_pg_max_concurrent_snap_trims, OPT_U64)
-// max number of trimming pgs
-OPTION(osd_max_trimming_pgs, OPT_U64)
-
-// minimum number of peers that must be reachable to mark ourselves
-// back up after being wrongly marked down.
-OPTION(osd_heartbeat_min_healthy_ratio, OPT_FLOAT)
-
-OPTION(osd_mon_heartbeat_interval, OPT_INT)  // (seconds) how often to ping monitor if no peers
-OPTION(osd_mon_report_interval, OPT_INT)  // failures, up_thru, boot.
-OPTION(osd_mon_report_max_in_flight, OPT_INT)  // max updates in flight
-OPTION(osd_beacon_report_interval, OPT_INT)       // (second) how often to send beacon message to monitor
-OPTION(osd_pg_stat_report_interval_max, OPT_INT)  // report pg stats for any given pg at least this often
-OPTION(osd_default_data_pool_replay_window, OPT_INT)
-OPTION(osd_auto_mark_unfound_lost, OPT_BOOL)
-OPTION(osd_recovery_delay_start, OPT_FLOAT)
-OPTION(osd_recovery_max_active, OPT_U64)
-OPTION(osd_recovery_max_active_hdd, OPT_U64)
-OPTION(osd_recovery_max_active_ssd, OPT_U64)
-OPTION(osd_recovery_max_single_start, OPT_U64)
-OPTION(osd_recovery_max_chunk, OPT_U64)  // max size of push chunk
-OPTION(osd_recovery_max_omap_entries_per_chunk, OPT_U64) // max number of omap entries per chunk; 0 to disable limit
-OPTION(osd_copyfrom_max_chunk, OPT_U64)   // max size of a COPYFROM chunk
-OPTION(osd_push_per_object_cost, OPT_U64)  // push cost per object
-OPTION(osd_max_push_cost, OPT_U64)  // max size of push message
-OPTION(osd_max_push_objects, OPT_U64)  // max objects in single push op
-OPTION(osd_max_scrubs, OPT_INT)
-OPTION(osd_scrub_during_recovery, OPT_BOOL) // Allow new scrubs to start while recovery is active on the OSD
-OPTION(osd_repair_during_recovery, OPT_BOOL) // Allow new requested repairs to start while recovery is active on the OSD
-OPTION(osd_scrub_begin_hour, OPT_INT)
-OPTION(osd_scrub_end_hour, OPT_INT)
-OPTION(osd_scrub_begin_week_day, OPT_INT)
-OPTION(osd_scrub_end_week_day, OPT_INT)
-OPTION(osd_scrub_load_threshold, OPT_FLOAT)
-OPTION(osd_scrub_min_interval, OPT_FLOAT)    // if load is low
-OPTION(osd_scrub_max_interval, OPT_FLOAT)  // regardless of load
-OPTION(osd_scrub_interval_randomize_ratio, OPT_FLOAT) // randomize the scheduled scrub in the span of [min,min*(1+randomize_ratio))
-OPTION(osd_scrub_backoff_ratio, OPT_DOUBLE)   // the probability to back off the scheduled scrub
-OPTION(osd_scrub_chunk_min, OPT_INT)
-OPTION(osd_scrub_chunk_max, OPT_INT)
-OPTION(osd_scrub_sleep, OPT_FLOAT)   // sleep between [deep]scrub ops
-OPTION(osd_scrub_extended_sleep, OPT_FLOAT)   // more sleep between [deep]scrub ops
-OPTION(osd_scrub_auto_repair, OPT_BOOL)   // whether auto-repair inconsistencies upon deep-scrubbing
-OPTION(osd_scrub_auto_repair_num_errors, OPT_U32)   // only auto-repair when number of errors is below this threshold
-OPTION(osd_deep_scrub_interval, OPT_FLOAT) // once a week
-OPTION(osd_deep_scrub_randomize_ratio, OPT_FLOAT) // scrubs will randomly become deep scrubs at this rate (0.15 -> 15% of scrubs are deep)
-OPTION(osd_deep_scrub_stride, OPT_INT)
-OPTION(osd_deep_scrub_keys, OPT_INT)
-OPTION(osd_deep_scrub_update_digest_min_age, OPT_INT)   // objects must be this old (seconds) before we update the whole-object digest on scrub
-OPTION(osd_skip_data_digest, OPT_BOOL)
-OPTION(osd_deep_scrub_large_omap_object_key_threshold, OPT_U64)
-OPTION(osd_deep_scrub_large_omap_object_value_sum_threshold, OPT_U64)
-OPTION(osd_class_dir, OPT_STR) // where rados plugins are stored
-OPTION(osd_open_classes_on_start, OPT_BOOL)
-OPTION(osd_class_load_list, OPT_STR) // list of object classes allowed to be loaded (allow all: *)
-OPTION(osd_class_default_list, OPT_STR) // list of object classes with default execute perm (allow all: *)
-OPTION(osd_check_for_log_corruption, OPT_BOOL)
-OPTION(osd_use_stale_snap, OPT_BOOL)
-OPTION(osd_rollback_to_cluster_snap, OPT_STR)
-OPTION(osd_default_notify_timeout, OPT_U32) // default notify timeout in seconds
-OPTION(osd_kill_backfill_at, OPT_INT)
-
-// Bounds how infrequently a new map epoch will be persisted for a pg
-OPTION(osd_pg_epoch_persisted_max_stale, OPT_U32) // make this < map_cache_size!
-
-OPTION(osd_target_pg_log_entries_per_osd, OPT_U32)
-OPTION(osd_min_pg_log_entries, OPT_U32)  // number of entries to keep in the pg log when trimming it
-OPTION(osd_max_pg_log_entries, OPT_U32) // max entries, say when degraded, before we trim
-OPTION(osd_pg_log_dups_tracked, OPT_U32) // how many versions back to track combined in both pglog's regular + dup logs
-OPTION(osd_object_clean_region_max_num_intervals, OPT_INT) // number of intervals in clean_offsets
-OPTION(osd_force_recovery_pg_log_entries_factor, OPT_FLOAT) // max entries factor before force recovery
-OPTION(osd_pg_log_trim_min, OPT_U32)
-OPTION(osd_pg_log_trim_max, OPT_U32)
-OPTION(osd_op_complaint_time, OPT_FLOAT) // how many seconds old makes an op complaint-worthy
-OPTION(osd_command_max_records, OPT_INT)
-OPTION(osd_max_pg_blocked_by, OPT_U32)    // max peer osds to report that are blocking our progress
-OPTION(osd_op_log_threshold, OPT_INT) // how many op log messages to show in one go
-OPTION(osd_backoff_on_unfound, OPT_BOOL)   // object unfound
-OPTION(osd_backoff_on_degraded, OPT_BOOL) // [mainly for debug?] object unreadable/writeable
-OPTION(osd_backoff_on_peering, OPT_BOOL)  // [debug] pg peering
-OPTION(osd_debug_crash_on_ignored_backoff, OPT_BOOL) // crash osd if client ignores a backoff; useful for debugging
-OPTION(osd_debug_inject_dispatch_delay_probability, OPT_DOUBLE)
-OPTION(osd_debug_inject_dispatch_delay_duration, OPT_DOUBLE)
-OPTION(osd_debug_drop_ping_probability, OPT_DOUBLE)
-OPTION(osd_debug_drop_ping_duration, OPT_INT)
-OPTION(osd_debug_op_order, OPT_BOOL)
-OPTION(osd_debug_verify_missing_on_start, OPT_BOOL)
-OPTION(osd_debug_verify_snaps, OPT_BOOL)
-OPTION(osd_debug_verify_stray_on_activate, OPT_BOOL)
-OPTION(osd_debug_skip_full_check_in_backfill_reservation, OPT_BOOL)
-OPTION(osd_debug_reject_backfill_probability, OPT_DOUBLE)
-OPTION(osd_debug_inject_copyfrom_error, OPT_BOOL)  // inject failure during copyfrom completion
-OPTION(osd_debug_misdirected_ops, OPT_BOOL)
-OPTION(osd_debug_skip_full_check_in_recovery, OPT_BOOL)
-OPTION(osd_debug_random_push_read_error, OPT_DOUBLE)
-OPTION(osd_debug_verify_cached_snaps, OPT_BOOL)
-OPTION(osd_debug_deep_scrub_sleep, OPT_FLOAT)
-OPTION(osd_debug_no_acting_change, OPT_BOOL)
-OPTION(osd_debug_pretend_recovery_active, OPT_BOOL)
-OPTION(osd_enable_op_tracker, OPT_BOOL) // enable/disable OSD op tracking
-OPTION(osd_num_op_tracker_shard, OPT_U32) // The number of shards for holding the ops
-OPTION(osd_op_history_size, OPT_U32)    // Max number of completed ops to track
-OPTION(osd_op_history_duration, OPT_U32) // Oldest completed op to track
-OPTION(osd_op_history_slow_op_size, OPT_U32)           // Max number of slow ops to track
-OPTION(osd_op_history_slow_op_threshold, OPT_DOUBLE) // track the op if over this threshold
-OPTION(osd_target_transaction_size, OPT_INT)     // to adjust various transactions that batch smaller items
-OPTION(osd_failsafe_full_ratio, OPT_FLOAT) // what % full makes an OSD "full" (failsafe)
-OPTION(osd_fast_shutdown, OPT_BOOL)
-OPTION(osd_fast_shutdown_notify_mon, OPT_BOOL) // tell mon the OSD is shutting down on osd_fast_shutdown
-OPTION(osd_fast_fail_on_connection_refused, OPT_BOOL) // immediately mark OSDs as down once they refuse to accept connections
-
-OPTION(osd_pg_object_context_cache_count, OPT_INT)
-OPTION(osd_tracing, OPT_BOOL) // true if LTTng-UST tracepoints should be enabled
-OPTION(osd_function_tracing, OPT_BOOL) // true if function instrumentation should use LTTng
-
-OPTION(osd_fast_info, OPT_BOOL) // use fast info attr, if we can
-
-// determines whether PGLog::check() compares written out log to stored log
-OPTION(osd_debug_pg_log_writeout, OPT_BOOL)
-OPTION(osd_loop_before_reset_tphandle, OPT_U32) // Max number of loop before we reset thread-pool's handle
-OPTION(osd_max_snap_prune_intervals_per_epoch, OPT_U64) // Max number of snap intervals to report to mgr in pg_stat_t
-
-// default timeout while caling WaitInterval on an empty queue
-OPTION(threadpool_default_timeout, OPT_INT)
-// default wait time for an empty queue before pinging the hb timeout
-OPTION(threadpool_empty_queue_max_wait, OPT_INT)
-
-OPTION(leveldb_log_to_ceph_log, OPT_BOOL)
-OPTION(leveldb_write_buffer_size, OPT_U64) // leveldb write buffer size
-OPTION(leveldb_cache_size, OPT_U64) // leveldb cache size
-OPTION(leveldb_block_size, OPT_U64) // leveldb block size
-OPTION(leveldb_bloom_size, OPT_INT) // leveldb bloom bits per entry
-OPTION(leveldb_max_open_files, OPT_INT) // leveldb max open files
-OPTION(leveldb_compression, OPT_BOOL) // leveldb uses compression
-OPTION(leveldb_paranoid, OPT_BOOL) // leveldb paranoid flag
-OPTION(leveldb_log, OPT_STR)  // enable leveldb log file
-OPTION(leveldb_compact_on_mount, OPT_BOOL)
-
-OPTION(rocksdb_log_to_ceph_log, OPT_BOOL)  // log to ceph log
-OPTION(rocksdb_cache_size, OPT_U64)  // rocksdb cache size (unless set by bluestore/etc)
-OPTION(rocksdb_cache_row_ratio, OPT_FLOAT)   // ratio of cache for row (vs block)
-OPTION(rocksdb_cache_shard_bits, OPT_INT)  // rocksdb block cache shard bits, 4 bit -> 16 shards
-OPTION(rocksdb_cache_type, OPT_STR) // 'lru' or 'clock'
-OPTION(rocksdb_block_size, OPT_INT)  // default rocksdb block size
-OPTION(rocksdb_perf, OPT_BOOL) // Enabling this will have 5-10% impact on performance for the stats collection
-OPTION(rocksdb_collect_compaction_stats, OPT_BOOL) //For rocksdb, this behavior will be an overhead of 5%~10%, collected only rocksdb_perf is enabled.
-OPTION(rocksdb_collect_extended_stats, OPT_BOOL) //For rocksdb, this behavior will be an overhead of 5%~10%, collected only rocksdb_perf is enabled.
-OPTION(rocksdb_collect_memory_stats, OPT_BOOL) //For rocksdb, this behavior will be an overhead of 5%~10%, collected only rocksdb_perf is enabled.
-
-// rocksdb options that will be used for omap(if omap_backend is rocksdb)
-OPTION(filestore_rocksdb_options, OPT_STR)
-// rocksdb options that will be used in monstore
-OPTION(mon_rocksdb_options, OPT_STR)
-
-/**
- * osd_*_priority adjust the relative priority of client io, recovery io,
- * snaptrim io, etc
- *
- * osd_*_priority determines the ratio of available io between client and
- * recovery.  Each option may be set between
- * 1..63.
- */
-OPTION(osd_client_op_priority, OPT_U32)
-OPTION(osd_recovery_op_priority, OPT_U32)
-OPTION(osd_peering_op_priority, OPT_U32)
-
-OPTION(osd_snap_trim_priority, OPT_U32)
-OPTION(osd_snap_trim_cost, OPT_U32) // set default cost equal to 1MB io
-
-OPTION(osd_scrub_priority, OPT_U32)
-// set default cost equal to 50MB io
-OPTION(osd_scrub_cost, OPT_U32)
-// set requested scrub priority higher than scrub priority to make the
-// requested scrubs jump the queue of scheduled scrubs
-OPTION(osd_requested_scrub_priority, OPT_U32)
-
-OPTION(osd_pg_delete_priority, OPT_U32)
-OPTION(osd_pg_delete_cost, OPT_U32) // set default cost equal to 1MB io
-
-OPTION(osd_recovery_priority, OPT_U32)
-// set default cost equal to 20MB io
-OPTION(osd_recovery_cost, OPT_U32)
-
-/**
- * osd_recovery_op_warn_multiple scales the normal warning threshold,
- * osd_op_complaint_time, so that slow recovery ops won't cause noise
- */
-OPTION(osd_recovery_op_warn_multiple, OPT_U32)
-
-// Max time to wait between notifying mon of shutdown and shutting down
-OPTION(osd_mon_shutdown_timeout, OPT_DOUBLE)
-OPTION(osd_shutdown_pgref_assert, OPT_BOOL) // crash if the OSD has stray PG refs on shutdown
-
-OPTION(osd_max_object_size, OPT_U64) // OSD's maximum object size
-OPTION(osd_max_object_name_len, OPT_U32) // max rados object name len
-OPTION(osd_max_object_namespace_len, OPT_U32) // max rados object namespace len
-OPTION(osd_max_attr_name_len, OPT_U32)    // max rados attr name len; cannot go higher than 100 chars for file system backends
-OPTION(osd_max_attr_size, OPT_U64)
-
-OPTION(osd_max_omap_entries_per_request, OPT_U64)
-OPTION(osd_max_omap_bytes_per_request, OPT_U64)
-OPTION(osd_max_write_op_reply_len, OPT_U64)
-
-OPTION(osd_objectstore, OPT_STR)  // ObjectStore backend type
-OPTION(osd_objectstore_tracing, OPT_BOOL) // true if LTTng-UST tracepoints should be enabled
-OPTION(osd_objectstore_fuse, OPT_BOOL)
-
-OPTION(osd_bench_small_size_max_iops, OPT_U32) // 100 IOPS
-OPTION(osd_bench_large_size_max_throughput, OPT_U64) // 100 MB/s
-OPTION(osd_bench_max_block_size, OPT_U64) // cap the block size at 64MB
-OPTION(osd_bench_duration, OPT_U32) // duration of 'osd bench', capped at 30s to avoid triggering timeouts
-
-OPTION(osd_blkin_trace_all, OPT_BOOL) // create a blkin trace for all osd requests
-OPTION(osdc_blkin_trace_all, OPT_BOOL) // create a blkin trace for all objecter requests
-
-OPTION(osd_discard_disconnected_ops, OPT_BOOL)
-
-OPTION(memstore_device_bytes, OPT_U64)
-OPTION(memstore_page_set, OPT_BOOL)
-OPTION(memstore_page_size, OPT_U64)
-OPTION(memstore_debug_omit_block_device_write, OPT_BOOL)
-
-OPTION(bdev_debug_inflight_ios, OPT_BOOL)
-OPTION(bdev_inject_crash, OPT_INT)  // if N>0, then ~ 1/N IOs will complete before we crash on flush.
-OPTION(bdev_inject_crash_flush_delay, OPT_INT) // wait N more seconds on flush
-OPTION(bdev_aio, OPT_BOOL)
-OPTION(bdev_aio_poll_ms, OPT_INT)  // milliseconds
-OPTION(bdev_aio_max_queue_depth, OPT_INT)
-OPTION(bdev_aio_reap_max, OPT_INT)
-OPTION(bdev_block_size, OPT_INT)
-OPTION(bdev_debug_aio, OPT_BOOL)
-OPTION(bdev_debug_aio_suicide_timeout, OPT_FLOAT)
-OPTION(bdev_debug_aio_log_age, OPT_DOUBLE)
-
-// if yes, osd will unbind all NVMe devices from kernel driver and bind them
-// to the uio_pci_generic driver. The purpose is to prevent the case where
-// NVMe driver is loaded while osd is running.
-OPTION(bdev_nvme_unbind_from_kernel, OPT_BOOL)
-OPTION(bdev_enable_discard, OPT_BOOL)
-OPTION(bdev_async_discard, OPT_BOOL)
-
-OPTION(objectstore_blackhole, OPT_BOOL)
-
-OPTION(bluefs_alloc_size, OPT_U64)
-OPTION(bluefs_shared_alloc_size, OPT_U64)
-OPTION(bluefs_max_prefetch, OPT_U64)
-OPTION(bluefs_min_log_runway, OPT_U64)  // alloc when we get this low
-OPTION(bluefs_max_log_runway, OPT_U64)  // alloc this much at a time
-OPTION(bluefs_log_compact_min_ratio, OPT_FLOAT)      // before we consider
-OPTION(bluefs_log_compact_min_size, OPT_U64)  // before we consider
-OPTION(bluefs_min_flush_size, OPT_U64)  // ignore flush until its this big
-OPTION(bluefs_compact_log_sync, OPT_BOOL)  // sync or async log compaction?
-OPTION(bluefs_buffered_io, OPT_BOOL)
-OPTION(bluefs_sync_write, OPT_BOOL)
-OPTION(bluefs_allocator, OPT_STR)     // stupid | bitmap
-OPTION(bluefs_log_replay_check_allocations, OPT_BOOL)
-OPTION(bluefs_replay_recovery, OPT_BOOL)
-OPTION(bluefs_replay_recovery_disable_compact, OPT_BOOL)
-OPTION(bluefs_check_for_zeros, OPT_BOOL)
-
-OPTION(bluestore_bluefs, OPT_BOOL)
-OPTION(bluestore_bluefs_env_mirror, OPT_BOOL) // mirror to normal Env for debug
-// how often (sec) to dump allocator on allocation failure
-OPTION(bluestore_bluefs_alloc_failure_dump_interval, OPT_FLOAT)
-
-// If you want to use spdk driver, you need to specify NVMe serial number here
-// with "spdk:" prefix.
-// Users can use 'lspci -vvv -d 8086:0953 | grep "Device Serial Number"' to
-// get the serial number of Intel(R) Fultondale NVMe controllers.
-// Example:
-// bluestore_block_path = spdk:55cd2e404bd73932
-OPTION(bluestore_block_path, OPT_STR)
-OPTION(bluestore_block_size, OPT_U64)  // 10gb for testing
-OPTION(bluestore_block_create, OPT_BOOL)
-OPTION(bluestore_block_db_path, OPT_STR)
-OPTION(bluestore_block_db_size, OPT_U64)   // rocksdb ssts (hot/warm)
-OPTION(bluestore_block_db_create, OPT_BOOL)
-OPTION(bluestore_block_wal_path, OPT_STR)
-OPTION(bluestore_block_wal_size, OPT_U64) // rocksdb wal
-OPTION(bluestore_block_wal_create, OPT_BOOL)
-OPTION(bluestore_block_preallocate_file, OPT_BOOL) //whether preallocate space if block/db_path/wal_path is file rather that block device.
-OPTION(bluestore_ignore_data_csum, OPT_BOOL)
-OPTION(bluestore_csum_type, OPT_STR) // none|xxhash32|xxhash64|crc32c|crc32c_16|crc32c_8
-OPTION(bluestore_retry_disk_reads, OPT_U64)
-OPTION(bluestore_min_alloc_size, OPT_U32)
-OPTION(bluestore_min_alloc_size_hdd, OPT_U32)
-OPTION(bluestore_min_alloc_size_ssd, OPT_U32)
-OPTION(bluestore_max_alloc_size, OPT_U32)
-OPTION(bluestore_prefer_deferred_size, OPT_U32)
-OPTION(bluestore_prefer_deferred_size_hdd, OPT_U32)
-OPTION(bluestore_prefer_deferred_size_ssd, OPT_U32)
-OPTION(bluestore_compression_mode, OPT_STR)  // force|aggressive|passive|none
-OPTION(bluestore_compression_algorithm, OPT_STR)
-OPTION(bluestore_compression_min_blob_size, OPT_U32)
-OPTION(bluestore_compression_min_blob_size_hdd, OPT_U32)
-OPTION(bluestore_compression_min_blob_size_ssd, OPT_U32)
-OPTION(bluestore_compression_max_blob_size, OPT_U32)
-OPTION(bluestore_compression_max_blob_size_hdd, OPT_U32)
-OPTION(bluestore_compression_max_blob_size_ssd, OPT_U32)
-/*
- * Specifies minimum expected amount of saved allocation units
- * per single blob to enable compressed blobs garbage collection
- *
- */
-OPTION(bluestore_gc_enable_blob_threshold, OPT_INT)
-/*
- * Specifies minimum expected amount of saved allocation units
- * per all blobsb to enable compressed blobs garbage collection
- *
- */
-OPTION(bluestore_gc_enable_total_threshold, OPT_INT)
-
-OPTION(bluestore_max_blob_size, OPT_U32)
-OPTION(bluestore_max_blob_size_hdd, OPT_U32)
-OPTION(bluestore_max_blob_size_ssd, OPT_U32)
-/*
- * Require the net gain of compression at least to be at this ratio,
- * otherwise we don't compress.
- * And ask for compressing at least 12.5%(1/8) off, by default.
- */
-OPTION(bluestore_compression_required_ratio, OPT_DOUBLE)
-OPTION(bluestore_extent_map_shard_max_size, OPT_U32)
-OPTION(bluestore_extent_map_shard_target_size, OPT_U32)
-OPTION(bluestore_extent_map_shard_min_size, OPT_U32)
-OPTION(bluestore_extent_map_shard_target_size_slop, OPT_DOUBLE)
-OPTION(bluestore_extent_map_inline_shard_prealloc_size, OPT_U32)
-OPTION(bluestore_cache_trim_interval, OPT_DOUBLE)
-OPTION(bluestore_cache_trim_max_skip_pinned, OPT_U32) // skip this many onodes pinned in cache before we give up
-OPTION(bluestore_cache_type, OPT_STR)   // lru, 2q
-OPTION(bluestore_2q_cache_kin_ratio, OPT_DOUBLE)    // kin page slot size / max page slot size
-OPTION(bluestore_2q_cache_kout_ratio, OPT_DOUBLE)   // number of kout page slot / total number of page slot
-OPTION(bluestore_cache_size, OPT_U64)
-OPTION(bluestore_cache_size_hdd, OPT_U64)
-OPTION(bluestore_cache_size_ssd, OPT_U64)
-OPTION(bluestore_cache_meta_ratio, OPT_DOUBLE)
-OPTION(bluestore_cache_kv_ratio, OPT_DOUBLE)
-OPTION(bluestore_alloc_stats_dump_interval, OPT_DOUBLE)
-OPTION(bluestore_kvbackend, OPT_STR)
-OPTION(bluestore_allocator, OPT_STR)     // stupid | bitmap
-OPTION(bluestore_freelist_blocks_per_key, OPT_INT)
-OPTION(bluestore_bitmapallocator_blocks_per_zone, OPT_INT) // must be power of 2 aligned, e.g., 512, 1024, 2048...
-OPTION(bluestore_bitmapallocator_span_size, OPT_INT) // must be power of 2 aligned, e.g., 512, 1024, 2048...
-OPTION(bluestore_max_deferred_txc, OPT_U64)
-OPTION(bluestore_max_defer_interval, OPT_U64)
-OPTION(bluestore_rocksdb_options, OPT_STR)
-OPTION(bluestore_rocksdb_options_annex, OPT_STR)
-OPTION(bluestore_fsck_on_mount, OPT_BOOL)
-OPTION(bluestore_fsck_on_mount_deep, OPT_BOOL)
-OPTION(bluestore_fsck_quick_fix_on_mount, OPT_BOOL)
-OPTION(bluestore_fsck_on_umount, OPT_BOOL)
-OPTION(bluestore_fsck_on_umount_deep, OPT_BOOL)
-OPTION(bluestore_fsck_on_mkfs, OPT_BOOL)
-OPTION(bluestore_fsck_on_mkfs_deep, OPT_BOOL)
-OPTION(bluestore_sync_submit_transaction, OPT_BOOL) // submit kv txn in queueing thread (not kv_sync_thread)
-OPTION(bluestore_fsck_read_bytes_cap, OPT_U64)
-OPTION(bluestore_fsck_quick_fix_threads, OPT_INT)
-OPTION(bluestore_throttle_bytes, OPT_U64)
-OPTION(bluestore_throttle_deferred_bytes, OPT_U64)
-OPTION(bluestore_throttle_cost_per_io_hdd, OPT_U64)
-OPTION(bluestore_throttle_cost_per_io_ssd, OPT_U64)
-OPTION(bluestore_throttle_cost_per_io, OPT_U64)
-OPTION(bluestore_deferred_batch_ops, OPT_U64)
-OPTION(bluestore_deferred_batch_ops_hdd, OPT_U64)
-OPTION(bluestore_deferred_batch_ops_ssd, OPT_U64)
-OPTION(bluestore_nid_prealloc, OPT_INT)
-OPTION(bluestore_blobid_prealloc, OPT_U64)
-OPTION(bluestore_clone_cow, OPT_BOOL)  // do copy-on-write for clones
-OPTION(bluestore_default_buffered_read, OPT_BOOL)
-OPTION(bluestore_default_buffered_write, OPT_BOOL)
-OPTION(bluestore_debug_no_reuse_blocks, OPT_BOOL)
-OPTION(bluestore_debug_small_allocations, OPT_INT)
-OPTION(bluestore_debug_too_many_blobs_threshold, OPT_INT)
-OPTION(bluestore_debug_freelist, OPT_BOOL)
-OPTION(bluestore_debug_prefill, OPT_FLOAT)
-OPTION(bluestore_debug_prefragment_max, OPT_INT)
-OPTION(bluestore_debug_inject_read_err, OPT_BOOL)
-OPTION(bluestore_debug_randomize_serial_transaction, OPT_INT)
-OPTION(bluestore_debug_omit_block_device_write, OPT_BOOL)
-OPTION(bluestore_debug_fsck_abort, OPT_BOOL)
-OPTION(bluestore_debug_omit_kv_commit, OPT_BOOL)
-OPTION(bluestore_debug_permit_any_bdev_label, OPT_BOOL)
-OPTION(bluestore_debug_random_read_err, OPT_DOUBLE)
-OPTION(bluestore_debug_inject_bug21040, OPT_BOOL)
-OPTION(bluestore_debug_inject_csum_err_probability, OPT_FLOAT)
-OPTION(bluestore_fsck_error_on_no_per_pool_stats, OPT_BOOL)
-OPTION(bluestore_warn_on_bluefs_spillover, OPT_BOOL)
-OPTION(bluestore_warn_on_legacy_statfs, OPT_BOOL)
-OPTION(bluestore_warn_on_spurious_read_errors, OPT_BOOL)
-OPTION(bluestore_fsck_error_on_no_per_pool_omap, OPT_BOOL)
-OPTION(bluestore_fsck_error_on_no_per_pg_omap, OPT_BOOL)
-OPTION(bluestore_warn_on_no_per_pool_omap, OPT_BOOL)
-OPTION(bluestore_warn_on_no_per_pg_omap, OPT_BOOL)
-OPTION(bluestore_log_op_age, OPT_DOUBLE)
-OPTION(bluestore_log_omap_iterator_age, OPT_DOUBLE)
-OPTION(bluestore_log_collection_list_age, OPT_DOUBLE)
-OPTION(bluestore_debug_enforce_settings, OPT_STR)
-OPTION(bluestore_volume_selection_policy, OPT_STR)
-OPTION(bluestore_volume_selection_reserved_factor, OPT_DOUBLE)
-OPTION(bluestore_volume_selection_reserved, OPT_INT)
-OPTION(bluestore_kv_sync_util_logging_s, OPT_DOUBLE)
-
-OPTION(kstore_max_ops, OPT_U64)
-OPTION(kstore_max_bytes, OPT_U64)
-OPTION(kstore_backend, OPT_STR)
-OPTION(kstore_rocksdb_options, OPT_STR)
-OPTION(kstore_fsck_on_mount, OPT_BOOL)
-OPTION(kstore_fsck_on_mount_deep, OPT_BOOL)
-OPTION(kstore_nid_prealloc, OPT_U64)
-OPTION(kstore_sync_transaction, OPT_BOOL)
-OPTION(kstore_sync_submit_transaction, OPT_BOOL)
-OPTION(kstore_onode_map_size, OPT_U64)
-OPTION(kstore_default_stripe_size, OPT_INT)
-
-OPTION(filestore_omap_backend, OPT_STR)
-OPTION(filestore_omap_backend_path, OPT_STR)
-
-/// filestore wb throttle limits
-OPTION(filestore_wbthrottle_enable, OPT_BOOL)
-OPTION(filestore_wbthrottle_btrfs_bytes_start_flusher, OPT_U64)
-OPTION(filestore_wbthrottle_btrfs_bytes_hard_limit, OPT_U64)
-OPTION(filestore_wbthrottle_btrfs_ios_start_flusher, OPT_U64)
-OPTION(filestore_wbthrottle_btrfs_ios_hard_limit, OPT_U64)
-OPTION(filestore_wbthrottle_btrfs_inodes_start_flusher, OPT_U64)
-OPTION(filestore_wbthrottle_xfs_bytes_start_flusher, OPT_U64)
-OPTION(filestore_wbthrottle_xfs_bytes_hard_limit, OPT_U64)
-OPTION(filestore_wbthrottle_xfs_ios_start_flusher, OPT_U64)
-OPTION(filestore_wbthrottle_xfs_ios_hard_limit, OPT_U64)
-OPTION(filestore_wbthrottle_xfs_inodes_start_flusher, OPT_U64)
-
-/// These must be less than the fd limit
-OPTION(filestore_wbthrottle_btrfs_inodes_hard_limit, OPT_U64)
-OPTION(filestore_wbthrottle_xfs_inodes_hard_limit, OPT_U64)
-
-//Introduce a O_DSYNC write in the filestore
-OPTION(filestore_odsync_write, OPT_BOOL)
-
-// Tests index failure paths
-OPTION(filestore_index_retry_probability, OPT_DOUBLE)
-
-// Allow object read error injection
-OPTION(filestore_debug_inject_read_err, OPT_BOOL)
-OPTION(filestore_debug_random_read_err, OPT_DOUBLE)
-
-OPTION(filestore_debug_omap_check, OPT_BOOL) // Expensive debugging check on sync
-OPTION(filestore_omap_header_cache_size, OPT_INT)
-
-// Use omap for xattrs for attrs over
-// filestore_max_inline_xattr_size or
-OPTION(filestore_max_inline_xattr_size, OPT_U32)       //Override
-OPTION(filestore_max_inline_xattr_size_xfs, OPT_U32)
-OPTION(filestore_max_inline_xattr_size_btrfs, OPT_U32)
-OPTION(filestore_max_inline_xattr_size_other, OPT_U32)
-
-// for more than filestore_max_inline_xattrs attrs
-OPTION(filestore_max_inline_xattrs, OPT_U32)   //Override
-OPTION(filestore_max_inline_xattrs_xfs, OPT_U32)
-OPTION(filestore_max_inline_xattrs_btrfs, OPT_U32)
-OPTION(filestore_max_inline_xattrs_other, OPT_U32)
-
-// max xattr value size
-OPTION(filestore_max_xattr_value_size, OPT_U32)        //Override
-OPTION(filestore_max_xattr_value_size_xfs, OPT_U32)
-OPTION(filestore_max_xattr_value_size_btrfs, OPT_U32)
-// ext4 allows 4k xattrs total including some smallish extra fields and the
-// keys.  We're allowing 2 512 inline attrs in addition some some filestore
-// replay attrs.  After accounting for those, we still need to fit up to
-// two attrs of this value.  That means we need this value to be around 1k
-// to be safe.  This is hacky, but it's not worth complicating the code
-// to work around ext4's total xattr limit.
-OPTION(filestore_max_xattr_value_size_other, OPT_U32)
-
-OPTION(filestore_sloppy_crc, OPT_BOOL)         // track sloppy crcs
-OPTION(filestore_sloppy_crc_block_size, OPT_INT)
-
-OPTION(filestore_max_alloc_hint_size, OPT_U64) // bytes
-
-OPTION(filestore_max_sync_interval, OPT_DOUBLE)    // seconds
-OPTION(filestore_min_sync_interval, OPT_DOUBLE)  // seconds
-OPTION(filestore_btrfs_snap, OPT_BOOL)
-OPTION(filestore_btrfs_clone_range, OPT_BOOL)
-OPTION(filestore_zfs_snap, OPT_BOOL) // zfsonlinux is still unstable
-OPTION(filestore_fsync_flushes_journal_data, OPT_BOOL)
-OPTION(filestore_fiemap, OPT_BOOL)     // (try to) use fiemap
-OPTION(filestore_punch_hole, OPT_BOOL)
-OPTION(filestore_seek_data_hole, OPT_BOOL)     // (try to) use seek_data/hole
-OPTION(filestore_splice, OPT_BOOL)
-OPTION(filestore_fadvise, OPT_BOOL)
-//collect device partition information for management application to use
-OPTION(filestore_collect_device_partition_information, OPT_BOOL)
-
-// (try to) use extsize for alloc hint NOTE: extsize seems to trigger
-// data corruption in xfs prior to kernel 3.5.  filestore will
-// implicitly disable this if it cannot confirm the kernel is newer
-// than that.
-// NOTE: This option involves a tradeoff: When disabled, fragmentation is
-// worse, but large sequential writes are faster. When enabled, large
-// sequential writes are slower, but fragmentation is reduced.
-OPTION(filestore_xfs_extsize, OPT_BOOL)
-
-OPTION(filestore_journal_parallel, OPT_BOOL)
-OPTION(filestore_journal_writeahead, OPT_BOOL)
-OPTION(filestore_journal_trailing, OPT_BOOL)
-OPTION(filestore_queue_max_ops, OPT_U64)
-OPTION(filestore_queue_max_bytes, OPT_U64)
-
-OPTION(filestore_caller_concurrency, OPT_INT)
-
-/// Expected filestore throughput in B/s
-OPTION(filestore_expected_throughput_bytes, OPT_DOUBLE)
-/// Expected filestore throughput in ops/s
-OPTION(filestore_expected_throughput_ops, OPT_DOUBLE)
-
-/// Filestore max delay multiple.  Defaults to 0 (disabled)
-OPTION(filestore_queue_max_delay_multiple, OPT_DOUBLE)
-/// Filestore high delay multiple.  Defaults to 0 (disabled)
-OPTION(filestore_queue_high_delay_multiple, OPT_DOUBLE)
-
-/// Filestore max delay multiple bytes.  Defaults to 0 (disabled)
-OPTION(filestore_queue_max_delay_multiple_bytes, OPT_DOUBLE)
-/// Filestore high delay multiple bytes.  Defaults to 0 (disabled)
-OPTION(filestore_queue_high_delay_multiple_bytes, OPT_DOUBLE)
-
-/// Filestore max delay multiple ops.  Defaults to 0 (disabled)
-OPTION(filestore_queue_max_delay_multiple_ops, OPT_DOUBLE)
-/// Filestore high delay multiple ops.  Defaults to 0 (disabled)
-OPTION(filestore_queue_high_delay_multiple_ops, OPT_DOUBLE)
-
-/// Use above to inject delays intended to keep the op queue between low and high
-OPTION(filestore_queue_low_threshhold, OPT_DOUBLE)
-OPTION(filestore_queue_high_threshhold, OPT_DOUBLE)
-
-OPTION(filestore_op_threads, OPT_INT)
-OPTION(filestore_op_thread_timeout, OPT_INT)
-OPTION(filestore_op_thread_suicide_timeout, OPT_INT)
-OPTION(filestore_commit_timeout, OPT_FLOAT)
-OPTION(filestore_fiemap_threshold, OPT_INT)
-OPTION(filestore_merge_threshold, OPT_INT)
-OPTION(filestore_split_multiple, OPT_INT)
-OPTION(filestore_split_rand_factor, OPT_U32) // randomize the split threshold by adding 16 * [0)
-OPTION(filestore_update_to, OPT_INT)
-OPTION(filestore_blackhole, OPT_BOOL)     // drop any new transactions on the floor
-OPTION(filestore_fd_cache_size, OPT_INT)    // FD lru size
-OPTION(filestore_fd_cache_shards, OPT_INT)   // FD number of shards
-OPTION(filestore_ondisk_finisher_threads, OPT_INT)
-OPTION(filestore_apply_finisher_threads, OPT_INT)
-OPTION(filestore_dump_file, OPT_STR)         // file onto which store transaction dumps
-OPTION(filestore_kill_at, OPT_INT)            // inject a failure at the n'th opportunity
-OPTION(filestore_inject_stall, OPT_INT)       // artificially stall for N seconds in op queue thread
-OPTION(filestore_fail_eio, OPT_BOOL)       // fail/crash on EIO
-OPTION(filestore_debug_verify_split, OPT_BOOL)
-OPTION(journal_dio, OPT_BOOL)
-OPTION(journal_aio, OPT_BOOL)
-OPTION(journal_force_aio, OPT_BOOL)
-OPTION(journal_block_size, OPT_INT)
-
-OPTION(journal_block_align, OPT_BOOL)
-OPTION(journal_write_header_frequency, OPT_U64)
-OPTION(journal_max_write_bytes, OPT_INT)
-OPTION(journal_max_write_entries, OPT_INT)
-
-/// Target range for journal fullness
-OPTION(journal_throttle_low_threshhold, OPT_DOUBLE)
-OPTION(journal_throttle_high_threshhold, OPT_DOUBLE)
-
-/// Multiple over expected at high_threshhold. Defaults to 0 (disabled).
-OPTION(journal_throttle_high_multiple, OPT_DOUBLE)
-/// Multiple over expected at max.  Defaults to 0 (disabled).
-OPTION(journal_throttle_max_multiple, OPT_DOUBLE)
-
-OPTION(journal_align_min_size, OPT_INT)  // align data payloads >= this.
-OPTION(journal_replay_from, OPT_INT)
-OPTION(journal_zero_on_create, OPT_BOOL)
-OPTION(journal_ignore_corruption, OPT_BOOL) // assume journal is not corrupt
-OPTION(journal_discard, OPT_BOOL) //using ssd disk as journal, whether support discard nouse journal-data.
-
-OPTION(fio_dir, OPT_STR) // fio data directory for fio-objectstore
-
-OPTION(rados_tracing, OPT_BOOL) // true if LTTng-UST tracepoints should be enabled
-
-
-OPTION(rgw_max_attr_name_len, OPT_SIZE)
-OPTION(rgw_max_attr_size, OPT_SIZE)
-OPTION(rgw_max_attrs_num_in_req, OPT_U64)
-
-OPTION(rgw_max_chunk_size, OPT_INT)
-OPTION(rgw_put_obj_min_window_size, OPT_INT)
-OPTION(rgw_put_obj_max_window_size, OPT_INT)
-OPTION(rgw_max_put_size, OPT_U64)
-OPTION(rgw_max_put_param_size, OPT_U64) // max input size for PUT requests accepting json/xml params
-
-/**
- * override max bucket index shards in zone configuration (if not zero)
- *
- * Represents the number of shards for the bucket index object, a value of zero
- * indicates there is no sharding. By default (no sharding, the name of the object
- * is '.dir.{marker}', with sharding, the name is '.dir.{markder}.{sharding_id}',
- * sharding_id is zero-based value. It is not recommended to set a too large value
- * (e.g. thousand) as it increases the cost for bucket listing.
- */
-OPTION(rgw_override_bucket_index_max_shards, OPT_U32)
-
-/**
- * Represents the maximum AIO pending requests for the bucket index object shards.
- */
-OPTION(rgw_bucket_index_max_aio, OPT_U32)
-
-/**
- * whether or not the quota/gc threads should be started
- */
-OPTION(rgw_enable_quota_threads, OPT_BOOL)
-OPTION(rgw_enable_gc_threads, OPT_BOOL)
-OPTION(rgw_enable_lc_threads, OPT_BOOL)
-
-/* overrides for librgw/nfs */
-OPTION(rgw_nfs_run_gc_threads, OPT_BOOL)
-OPTION(rgw_nfs_run_lc_threads, OPT_BOOL)
-OPTION(rgw_nfs_run_quota_threads, OPT_BOOL)
-OPTION(rgw_nfs_run_sync_thread, OPT_BOOL)
-
-OPTION(rgw_data, OPT_STR)
-OPTION(rgw_enable_apis, OPT_STR)
-OPTION(rgw_cache_enabled, OPT_BOOL)   // rgw cache enabled
-OPTION(rgw_cache_lru_size, OPT_INT)   // num of entries in rgw cache
-OPTION(rgw_socket_path, OPT_STR)   // path to unix domain socket, if not specified, rgw will not run as external fcgi
-OPTION(rgw_host, OPT_STR)  // host for radosgw, can be an IP, default is 0.0.0.0
-OPTION(rgw_port, OPT_STR)  // port to listen, format as "8080" "5000", if not specified, rgw will not run external fcgi
-OPTION(rgw_dns_name, OPT_STR) // hostname suffix on buckets
-OPTION(rgw_dns_s3website_name, OPT_STR) // hostname suffix on buckets for s3-website endpoint
-OPTION(rgw_service_provider_name, OPT_STR) //service provider name which is contained in http response headers
-OPTION(rgw_content_length_compat, OPT_BOOL) // Check both HTTP_CONTENT_LENGTH and CONTENT_LENGTH in fcgi env
-OPTION(rgw_lifecycle_work_time, OPT_STR) //job process lc  at 00:00-06:00s
-OPTION(rgw_lc_lock_max_time, OPT_INT)  // total run time for a single lc processor work
-OPTION(rgw_lc_max_worker, OPT_INT)// number of (parellized) LCWorker threads
-OPTION(rgw_lc_max_wp_worker, OPT_INT)// number of per-LCWorker pool threads
-OPTION(rgw_lc_max_objs, OPT_INT)
-OPTION(rgw_lc_max_rules, OPT_U32)  // Max rules set on one bucket
-OPTION(rgw_lc_debug_interval, OPT_INT)  // Debug run interval, in seconds
-OPTION(rgw_script_uri, OPT_STR) // alternative value for SCRIPT_URI if not set in request
-OPTION(rgw_request_uri, OPT_STR) // alternative value for REQUEST_URI if not set in request
-OPTION(rgw_ignore_get_invalid_range, OPT_BOOL) // treat invalid (e.g., negative) range requests as full
-OPTION(rgw_swift_url, OPT_STR)             // the swift url, being published by the internal swift auth
-OPTION(rgw_swift_url_prefix, OPT_STR) // entry point for which a url is considered a swift url
-OPTION(rgw_swift_auth_url, OPT_STR)        // default URL to go and verify tokens for v1 auth (if not using internal swift auth)
-OPTION(rgw_swift_auth_entry, OPT_STR)  // entry point for which a url is considered a swift auth url
-OPTION(rgw_swift_tenant_name, OPT_STR)  // tenant name to use for swift access
-OPTION(rgw_swift_account_in_url, OPT_BOOL)  // assume that URL always contain the account (aka tenant) part
-OPTION(rgw_swift_enforce_content_length, OPT_BOOL)  // enforce generation of Content-Length even in cost of performance or scalability
-OPTION(rgw_keystone_url, OPT_STR)  // url for keystone server
-OPTION(rgw_keystone_admin_token, OPT_STR)  // keystone admin token (shared secret)
-OPTION(rgw_keystone_admin_token_path, OPT_STR)  // path to keystone admin token (shared secret)
-OPTION(rgw_keystone_admin_user, OPT_STR)  // keystone admin user name
-OPTION(rgw_keystone_admin_password, OPT_STR)  // keystone admin user password
-OPTION(rgw_keystone_admin_password_path, OPT_STR)  // path to keystone admin user password
-OPTION(rgw_keystone_admin_tenant, OPT_STR)  // keystone admin user tenant (for keystone v2.0)
-OPTION(rgw_keystone_admin_project, OPT_STR)  // keystone admin user project (for keystone v3)
-OPTION(rgw_keystone_admin_domain, OPT_STR)  // keystone admin user domain
-OPTION(rgw_keystone_barbican_user, OPT_STR)  // keystone user to access barbican secrets
-OPTION(rgw_keystone_barbican_password, OPT_STR)  // keystone password for barbican user
-OPTION(rgw_keystone_barbican_tenant, OPT_STR)  // keystone barbican user tenant (for keystone v2.0)
-OPTION(rgw_keystone_barbican_project, OPT_STR)  // keystone barbican user project (for keystone v3)
-OPTION(rgw_keystone_barbican_domain, OPT_STR)  // keystone barbican user domain
-OPTION(rgw_keystone_api_version, OPT_INT) // Version of Keystone API to use (2 or 3)
-OPTION(rgw_keystone_accepted_roles, OPT_STR)  // roles required to serve requests
-OPTION(rgw_keystone_accepted_admin_roles, OPT_STR) // list of roles allowing an user to gain admin privileges
-OPTION(rgw_keystone_token_cache_size, OPT_INT)  // max number of entries in keystone token cache
-OPTION(rgw_keystone_verify_ssl, OPT_BOOL) // should we try to verify keystone's ssl
-OPTION(rgw_cross_domain_policy, OPT_STR)
-OPTION(rgw_healthcheck_disabling_path, OPT_STR) // path that existence causes the healthcheck to respond 503
-OPTION(rgw_s3_auth_use_rados, OPT_BOOL)  // should we try to use the internal credentials for s3?
-OPTION(rgw_s3_auth_use_keystone, OPT_BOOL)  // should we try to use keystone for s3?
-OPTION(rgw_s3_auth_order, OPT_STR) // s3 authentication order to try
-OPTION(rgw_barbican_url, OPT_STR)  // url for barbican server
-OPTION(rgw_opa_url, OPT_STR)  // url for OPA server
-OPTION(rgw_opa_token, OPT_STR)  // Bearer token OPA uses to authenticate client requests
-OPTION(rgw_opa_verify_ssl, OPT_BOOL) // should we try to verify OPA's ssl
-OPTION(rgw_use_opa_authz, OPT_BOOL) // should we use OPA to authorize client requests?
-
-/* OpenLDAP-style LDAP parameter strings */
-/* rgw_ldap_uri  space-separated list of LDAP servers in URI format */
-OPTION(rgw_ldap_uri, OPT_STR)
-/* rgw_ldap_binddn  LDAP entry RGW will bind with (user match) */
-OPTION(rgw_ldap_binddn, OPT_STR)
-/* rgw_ldap_searchdn  LDAP search base (basedn) */
-OPTION(rgw_ldap_searchdn, OPT_STR)
-/* rgw_ldap_dnattr  LDAP attribute containing RGW user names (to form binddns)*/
-OPTION(rgw_ldap_dnattr, OPT_STR)
-/* rgw_ldap_secret  file containing credentials for rgw_ldap_binddn */
-OPTION(rgw_ldap_secret, OPT_STR)
-/* rgw_s3_auth_use_ldap  use LDAP for RGW auth? */
-OPTION(rgw_s3_auth_use_ldap, OPT_BOOL)
-/* rgw_ldap_searchfilter  LDAP search filter */
-OPTION(rgw_ldap_searchfilter, OPT_STR)
-
-OPTION(rgw_admin_entry, OPT_STR)  // entry point for which a url is considered an admin request
-OPTION(rgw_enforce_swift_acls, OPT_BOOL)
-OPTION(rgw_swift_token_expiration, OPT_INT) // time in seconds for swift token expiration
-OPTION(rgw_print_continue, OPT_BOOL)  // enable if 100-Continue works
-OPTION(rgw_print_prohibited_content_length, OPT_BOOL) // violate RFC 7230 and send Content-Length in 204 and 304
-OPTION(rgw_remote_addr_param, OPT_STR)  // e.g. X-Forwarded-For, if you have a reverse proxy
-OPTION(rgw_op_thread_timeout, OPT_INT)
-OPTION(rgw_op_thread_suicide_timeout, OPT_INT)
-OPTION(rgw_thread_pool_size, OPT_INT)
-OPTION(rgw_num_control_oids, OPT_INT)
-OPTION(rgw_verify_ssl, OPT_BOOL) // should http_client try to verify ssl when sent https request
-
-/* The following are tunables for caches of RGW NFS (and other file
- * client) objects.
- *
- * The file handle cache is a partitioned hash table
- * (fhcache_partitions), each with a closed hash part and backing
- * b-tree mapping.  The number of partions is expected to be a small
- * prime, the cache size something larger but less than 5K, the total
- * size of the cache is n_part * cache_size.
- */
-OPTION(rgw_nfs_lru_lanes, OPT_INT)
-OPTION(rgw_nfs_lru_lane_hiwat, OPT_INT)
-OPTION(rgw_nfs_fhcache_partitions, OPT_INT)
-OPTION(rgw_nfs_fhcache_size, OPT_INT) /* 3*2017=6051 */
-OPTION(rgw_nfs_namespace_expire_secs, OPT_INT) /* namespace invalidate
-                                                    * timer */
-OPTION(rgw_nfs_max_gc, OPT_INT) /* max gc events per cycle */
-OPTION(rgw_nfs_write_completion_interval_s, OPT_INT) /* stateless (V3)
-                                                         * commit
-                                                         * delay */
-OPTION(rgw_nfs_s3_fast_attrs, OPT_BOOL) /* use fast S3 attrs from
-                                        * bucket index--currently
-                                        * assumes NFS mounts are
-                                        * immutable */
-
-OPTION(rgw_zone, OPT_STR) // zone name
-OPTION(rgw_zone_root_pool, OPT_STR)    // pool where zone specific info is stored
-OPTION(rgw_default_zone_info_oid, OPT_STR)  // oid where default zone info is stored
-OPTION(rgw_region, OPT_STR) // region name
-OPTION(rgw_region_root_pool, OPT_STR)  // pool where all region info is stored
-OPTION(rgw_default_region_info_oid, OPT_STR)  // oid where default region info is stored
-OPTION(rgw_zonegroup, OPT_STR) // zone group name
-OPTION(rgw_zonegroup_root_pool, OPT_STR)  // pool where all zone group info is stored
-OPTION(rgw_default_zonegroup_info_oid, OPT_STR)  // oid where default zone group info is stored
-OPTION(rgw_realm, OPT_STR) // realm name
-OPTION(rgw_realm_root_pool, OPT_STR)  // pool where all realm info is stored
-OPTION(rgw_default_realm_info_oid, OPT_STR)  // oid where default realm info is stored
-OPTION(rgw_period_root_pool, OPT_STR)  // pool where all period info is stored
-OPTION(rgw_period_latest_epoch_info_oid, OPT_STR) // oid where current period info is stored
-OPTION(rgw_log_nonexistent_bucket, OPT_BOOL)
-OPTION(rgw_log_object_name, OPT_STR)      // man date to see codes (a subset are supported)
-OPTION(rgw_log_object_name_utc, OPT_BOOL)
-OPTION(rgw_usage_max_shards, OPT_INT)
-OPTION(rgw_usage_max_user_shards, OPT_INT)
-OPTION(rgw_enable_ops_log, OPT_BOOL) // enable logging every rgw operation
-OPTION(rgw_enable_usage_log, OPT_BOOL) // enable logging bandwidth usage
-OPTION(rgw_ops_log_rados, OPT_BOOL) // whether ops log should go to rados
-OPTION(rgw_ops_log_socket_path, OPT_STR) // path to unix domain socket where ops log can go
-OPTION(rgw_ops_log_data_backlog, OPT_INT) // max data backlog for ops log
-OPTION(rgw_fcgi_socket_backlog, OPT_INT) // socket  backlog for fcgi
-OPTION(rgw_usage_log_flush_threshold, OPT_INT) // threshold to flush pending log data
-OPTION(rgw_usage_log_tick_interval, OPT_INT) // flush pending log data every X seconds
-OPTION(rgw_init_timeout, OPT_INT) // time in seconds
-OPTION(rgw_mime_types_file, OPT_STR)
-OPTION(rgw_gc_max_objs, OPT_INT)
-OPTION(rgw_gc_obj_min_wait, OPT_INT)    // wait time before object may be handled by gc, recommended lower limit is 30 mins
-OPTION(rgw_gc_processor_max_time, OPT_INT)  // total run time for a single gc processor work
-OPTION(rgw_gc_processor_period, OPT_INT)  // gc processor cycle time
-OPTION(rgw_gc_max_concurrent_io, OPT_INT)  // gc processor cycle time
-OPTION(rgw_gc_max_trim_chunk, OPT_INT)  // gc trim chunk size
-OPTION(rgw_s3_success_create_obj_status, OPT_INT) // alternative success status response for create-obj (0 - default)
-OPTION(rgw_resolve_cname, OPT_BOOL)  // should rgw try to resolve hostname as a dns cname record
-OPTION(rgw_obj_stripe_size, OPT_INT)
-OPTION(rgw_extended_http_attrs, OPT_STR) // list of extended attrs that can be set on objects (beyond the default)
-OPTION(rgw_exit_timeout_secs, OPT_INT) // how many seconds to wait for process to go down before exiting unconditionally
-OPTION(rgw_get_obj_window_size, OPT_INT) // window size in bytes for single get obj request
-OPTION(rgw_get_obj_max_req_size, OPT_INT) // max length of a single get obj rados op
-OPTION(rgw_relaxed_s3_bucket_names, OPT_BOOL) // enable relaxed bucket name rules for US region buckets
-OPTION(rgw_defer_to_bucket_acls, OPT_STR) // if the user has bucket perms)
-OPTION(rgw_list_buckets_max_chunk, OPT_INT) // max buckets to retrieve in a single op when listing user buckets
-OPTION(rgw_md_log_max_shards, OPT_INT) // max shards for metadata log
-OPTION(rgw_curl_buffersize, OPT_INT) // set preferred receive buffer size for curl calls
-OPTION(rgw_curl_wait_timeout_ms, OPT_INT) // timeout for certain curl calls
-OPTION(rgw_curl_low_speed_limit, OPT_INT) // low speed limit for certain curl calls
-OPTION(rgw_curl_low_speed_time, OPT_INT) // low speed time for certain curl calls
-OPTION(rgw_copy_obj_progress, OPT_BOOL) // should dump progress during long copy operations?
-OPTION(rgw_copy_obj_progress_every_bytes, OPT_INT) // min bytes between copy progress output
-OPTION(rgw_sync_obj_etag_verify, OPT_BOOL) // verify if the copied object from remote is identical to source
-OPTION(rgw_obj_tombstone_cache_size, OPT_INT) // how many objects in tombstone cache, which is used in multi-zone sync to keep
-                                                    // track of removed objects' mtime
-
-OPTION(rgw_data_log_window, OPT_INT) // data log entries window (in seconds)
-OPTION(rgw_data_log_changes_size, OPT_INT) // number of in-memory entries to hold for data changes log
-OPTION(rgw_data_log_num_shards, OPT_INT) // number of objects to keep data changes log on
-OPTION(rgw_data_log_obj_prefix, OPT_STR) //
-
-OPTION(rgw_bucket_quota_ttl, OPT_INT) // time for cached bucket stats to be cached within rgw instance
-OPTION(rgw_bucket_quota_soft_threshold, OPT_DOUBLE) // threshold from which we don't rely on cached info for quota decisions
-OPTION(rgw_bucket_quota_cache_size, OPT_INT) // number of entries in bucket quota cache
-OPTION(rgw_bucket_default_quota_max_objects, OPT_INT) // number of objects allowed
-OPTION(rgw_bucket_default_quota_max_size, OPT_LONGLONG) // Max size of object in bytes
-
-OPTION(rgw_expose_bucket, OPT_BOOL) // Return the bucket name in the 'Bucket' response header
-
-OPTION(rgw_frontends, OPT_STR) // rgw front ends
-
-OPTION(rgw_user_quota_bucket_sync_interval, OPT_INT) // time period for accumulating modified buckets before syncing stats
-OPTION(rgw_user_quota_sync_interval, OPT_INT) // time period for accumulating modified buckets before syncing entire user stats
-OPTION(rgw_user_quota_sync_idle_users, OPT_BOOL) // whether stats for idle users be fully synced
-OPTION(rgw_user_quota_sync_wait_time, OPT_INT) // min time between two full stats sync for non-idle users
-OPTION(rgw_user_default_quota_max_objects, OPT_INT) // number of objects allowed
-OPTION(rgw_user_default_quota_max_size, OPT_LONGLONG) // Max size of object in bytes
-
-OPTION(rgw_multipart_min_part_size, OPT_INT) // min size for each part (except for last one) in multipart upload
-OPTION(rgw_multipart_part_upload_limit, OPT_INT) // parts limit in multipart upload
-
-OPTION(rgw_max_slo_entries, OPT_INT) // default number of max entries in slo
-
-OPTION(rgw_olh_pending_timeout_sec, OPT_INT) // time until we retire a pending olh change
-OPTION(rgw_user_max_buckets, OPT_INT) // global option to set max buckets count for all user
-
-OPTION(rgw_objexp_gc_interval, OPT_U32) // maximum time between round of expired objects garbage collecting
-OPTION(rgw_objexp_hints_num_shards, OPT_U32) // maximum number of parts in which the hint index is stored in
-OPTION(rgw_objexp_chunk_size, OPT_U32) // maximum number of entries in a single operation when processing objexp data
-
-OPTION(rgw_enable_static_website, OPT_BOOL) // enable static website feature
-OPTION(rgw_log_http_headers, OPT_STR) // list of HTTP headers to log when seen, ignores case (e.g., http_x_forwarded_for
-
-OPTION(rgw_num_async_rados_threads, OPT_INT) // num of threads to use for async rados operations
-OPTION(rgw_md_notify_interval_msec, OPT_INT) // metadata changes notification interval to followers
-OPTION(rgw_run_sync_thread, OPT_BOOL) // whether radosgw (not radosgw-admin) spawns the sync thread
-OPTION(rgw_sync_lease_period, OPT_INT) // time in second for lease that rgw takes on a specific log (or log shard)
-OPTION(rgw_sync_log_trim_interval, OPT_INT) // time in seconds between attempts to trim sync logs
-
-OPTION(rgw_sync_data_inject_err_probability, OPT_DOUBLE) // range [0, 1]
-OPTION(rgw_sync_meta_inject_err_probability, OPT_DOUBLE) // range [0, 1]
-OPTION(rgw_sync_trace_history_size, OPT_INT) // max number of complete sync trace entries to keep
-OPTION(rgw_sync_trace_per_node_log_size, OPT_INT) // how many log entries to keep per node
-OPTION(rgw_sync_trace_servicemap_update_interval, OPT_INT) // interval in seconds between sync trace servicemap update
-
-
-OPTION(rgw_period_push_interval, OPT_DOUBLE) // seconds to wait before retrying "period push"
-OPTION(rgw_period_push_interval_max, OPT_DOUBLE) // maximum interval after exponential backoff
-
-OPTION(rgw_safe_max_objects_per_shard, OPT_INT) // safe max loading
-OPTION(rgw_shard_warning_threshold, OPT_DOUBLE) // pct of safe max
-                                                   // at which to warn
-
-OPTION(rgw_swift_versioning_enabled, OPT_BOOL) // whether swift object versioning feature is enabled
-
-OPTION(rgw_trust_forwarded_https, OPT_BOOL) // trust Forwarded and X-Forwarded-Proto headers for ssl termination
-OPTION(rgw_crypt_require_ssl, OPT_BOOL) // requests including encryption key headers must be sent over ssl
-OPTION(rgw_crypt_default_encryption_key, OPT_STR) // base64 encoded key for encryption of rgw objects
-
-OPTION(rgw_crypt_s3_kms_backend, OPT_STR) // Where SSE-KMS encryption keys are stored
-OPTION(rgw_crypt_vault_auth, OPT_STR) // Type of authentication method to be used with Vault
-OPTION(rgw_crypt_vault_token_file, OPT_STR) // Path to the token file for Vault authentication
-OPTION(rgw_crypt_vault_addr, OPT_STR) // Vault server base address
-OPTION(rgw_crypt_vault_prefix, OPT_STR) // Optional URL prefix to Vault secret path
-OPTION(rgw_crypt_vault_secret_engine, OPT_STR) // kv, transit or other supported secret engines
-OPTION(rgw_crypt_vault_namespace, OPT_STR) // Vault Namespace (only availabe in Vault Enterprise Version)
-
-OPTION(rgw_crypt_kmip_addr, OPT_STR) // kmip server address
-OPTION(rgw_crypt_kmip_ca_path, OPT_STR) // ca for kmip servers
-OPTION(rgw_crypt_kmip_username, OPT_STR) // when authenticating via username
-OPTION(rgw_crypt_kmip_password, OPT_STR) // optional w/ username
-OPTION(rgw_crypt_kmip_client_cert, OPT_STR) // connect using client certificate
-OPTION(rgw_crypt_kmip_client_key, OPT_STR) // connect using client certificate
-OPTION(rgw_crypt_kmip_kms_key_template, OPT_STR) // sse-kms; kmip key names
-OPTION(rgw_crypt_kmip_s3_key_template, OPT_STR) // sse-s3; kmip key names
-
-OPTION(rgw_crypt_s3_kms_encryption_keys, OPT_STR) // extra keys that may be used for aws:kms
-                                                      // defined as map "key1=YmluCmJvb3N0CmJvb3N0LQ== key2=b3V0CnNyYwpUZXN0aW5nCg=="
-OPTION(rgw_crypt_suppress_logs, OPT_BOOL)   // suppress logs that might print customer key
-OPTION(rgw_list_bucket_min_readahead, OPT_INT) // minimum number of entries to read from rados for bucket listing
-
-OPTION(rgw_rest_getusage_op_compat, OPT_BOOL) // dump description of total stats for s3 GetUsage API
-
-OPTION(throttler_perf_counter, OPT_BOOL) // enable/disable throttler perf counter
-
-/* The following are tunables for torrent data */
-OPTION(rgw_torrent_flag, OPT_BOOL)    // produce torrent function flag
-OPTION(rgw_torrent_tracker, OPT_STR)    // torrent field announce and announce list
-OPTION(rgw_torrent_createby, OPT_STR)    // torrent field created by
-OPTION(rgw_torrent_comment, OPT_STR)    // torrent field comment
-OPTION(rgw_torrent_encoding, OPT_STR)    // torrent field encoding
-OPTION(rgw_torrent_origin, OPT_STR)    // torrent origin
-OPTION(rgw_torrent_sha_unit, OPT_INT)    // torrent field piece length 512K
-
-OPTION(event_tracing, OPT_BOOL) // true if LTTng-UST tracepoints should be enabled
-
-OPTION(debug_deliberately_leak_memory, OPT_BOOL)
-OPTION(debug_asok_assert_abort, OPT_BOOL)
-
-OPTION(rgw_swift_custom_header, OPT_STR) // option to enable swift custom headers
-
-OPTION(rgw_swift_need_stats, OPT_BOOL) // option to enable stats on bucket listing for swift
-
-OPTION(rgw_acl_grants_max_num, OPT_INT) // According to AWS S3(http://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html), An ACL can have up to 100 grants.
-OPTION(rgw_cors_rules_max_num, OPT_INT) // According to AWS S3(http://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html), An cors can have up to 100 rules.
-OPTION(rgw_delete_multi_obj_max_num, OPT_INT) // According to AWS S3(https://docs.aws.amazon.com/AmazonS3/latest/dev/DeletingObjects.html), Amazon S3 also provides the Multi-Object Delete API that you can use to delete up to 1000 objects in a single HTTP request.
-OPTION(rgw_website_routing_rules_max_num, OPT_INT) // According to AWS S3, An website routing config can have up to 50 rules.
-OPTION(rgw_sts_entry, OPT_STR)
-OPTION(rgw_sts_key, OPT_STR)
-OPTION(rgw_s3_auth_use_sts, OPT_BOOL)  // should we try to use sts for s3?
-OPTION(rgw_sts_max_session_duration, OPT_U64) // Max duration in seconds for which the session token is valid.
-OPTION(rgw_sts_min_session_duration, OPT_U64) // Min duration in seconds for which the session token is valid.
-OPTION(fake_statfs_for_testing, OPT_INT) // Set a value for kb and compute kb_used from total of num_bytes
-OPTION(rgw_sts_token_introspection_url, OPT_STR)  // url for introspecting web tokens
-OPTION(rgw_sts_client_id, OPT_STR) // Client Id
-OPTION(rgw_sts_client_secret, OPT_STR) // Client Secret
-OPTION(debug_allow_any_pool_priority, OPT_BOOL)
-OPTION(rgw_gc_max_deferred_entries_size, OPT_U64) // GC deferred entries size in queue head
-OPTION(rgw_gc_max_queue_size, OPT_U64) // GC max queue size
-OPTION(rgw_gc_max_deferred, OPT_U64) // GC max number of deferred entries
index c886bb640fc26687647dc0c5362ce26d36a0abf8..8e3cecacd97813dd93fc4c8140e5fd5ad86304eb 100644 (file)
@@ -1,4 +1,5 @@
 set(common_options_srcs build_options.cc)
+set(legacy_options_headers)
 
 # to mimic the behavior of file(CONFIGURE ...)
 file(GENERATE OUTPUT configure_file.cmake
@@ -25,17 +26,20 @@ function(add_options name)
   set(yaml_file ${CMAKE_CURRENT_BINARY_DIR}/${name}.yaml)
   file_configure("${yaml_in_file}"
     "${yaml_file}" @ONLY)
-  set(src_file "${name}_options.cc")
-  add_custom_command(
-    OUTPUT ${src_file}
+  set(cc_file "${name}_options.cc")
+  set(h_file "${PROJECT_BINARY_DIR}/include/${name}_legacy_options.h")
+  add_custom_command(PRE_BUILD
+    OUTPUT ${cc_file} ${h_file}
     COMMAND ${Python_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/y2c.py
       --input ${yaml_file}
-      --output ${src_file}
+      --output ${cc_file}
+      --legacy ${h_file}
       --name ${name}
-    DEPENDS ${yaml_file})
-  list(APPEND common_options_srcs
-    ${src_file})
+      DEPENDS ${yaml_file})
+  list(APPEND common_options_srcs ${cc_file})
   set(common_options_srcs ${common_options_srcs} PARENT_SCOPE)
+  list(APPEND legacy_options_headers ${h_file})
+  set(legacy_options_headers ${legacy_options_headers} PARENT_SCOPE)
 endfunction()
 
 set(osd_erasure_code_plugins "jerasure" "lrc")
@@ -92,3 +96,5 @@ add_options(rgw)
 
 add_library(common-options-objs OBJECT
   ${common_options_srcs})
+add_custom_target(legacy-option-headers
+  DEPENDS ${legacy_options_headers})
index 34e9a11b452354046442dfc58ad05806c6585cea..05b8f3330fee559ab6791a26d18f1efeadc6e102 100644 (file)
@@ -13,6 +13,7 @@ options:
   - common
   flags:
   - no_mon_update
+  with_legacy: true
 - name: fsid
   type: uuid
   level: basic
@@ -35,6 +36,7 @@ options:
   - mgr
   flags:
   - startup
+  with_legacy: true
 - name: public_addrv
   type: addrvec
   level: basic
@@ -46,6 +48,7 @@ options:
   - mgr
   flags:
   - startup
+  with_legacy: true
 - name: public_bind_addr
   type: addr
   level: advanced
@@ -53,6 +56,7 @@ options:
   - mon
   flags:
   - startup
+  with_legacy: true
 - name: cluster_addr
   type: addr
   level: basic
@@ -63,6 +67,7 @@ options:
   - osd
   flags:
   - startup
+  with_legacy: true
 - name: public_network
   type: str
   level: advanced
@@ -76,6 +81,7 @@ options:
   - mgr
   flags:
   - startup
+  with_legacy: true
 - name: public_network_interface
   type: str
   level: advanced
@@ -102,6 +108,7 @@ options:
   - osd
   flags:
   - startup
+  with_legacy: true
 - name: cluster_network_interface
   type: str
   level: advanced
@@ -195,6 +202,7 @@ options:
   flags:
   - no_mon_update
   - startup
+  with_legacy: true
 - name: lockdep_force_backtrace
   type: bool
   level: dev
@@ -206,6 +214,7 @@ options:
   - lockdep
   flags:
   - startup
+  with_legacy: true
 - name: run_dir
   type: str
   level: advanced
@@ -217,6 +226,7 @@ options:
   - admin_socket
   flags:
   - startup
+  with_legacy: true
 - name: admin_socket
   type: str
   level: advanced
@@ -226,6 +236,8 @@ options:
   - common
   flags:
   - startup
+  # default changed by common_preinit()
+  with_legacy: true
 - name: admin_socket_mode
   type: str
   level: advanced
@@ -236,6 +248,7 @@ options:
   - admin_socket
   flags:
   - startup
+  with_legacy: true
 - name: daemonize
   type: bool
   level: advanced
@@ -255,6 +268,8 @@ options:
   flags:
   - no_mon_update
   - startup
+  # default changed by common_preinit()
+  with_legacy: true
 - name: setuser
   type: str
   level: advanced
@@ -271,6 +286,7 @@ options:
   - setgroup
   flags:
   - startup
+  with_legacy: true
 - name: setgroup
   type: str
   level: advanced
@@ -287,6 +303,7 @@ options:
   - setuser
   flags:
   - startup
+  with_legacy: true
 - name: setuser_match_path
   type: str
   level: advanced
@@ -309,6 +326,7 @@ options:
   - setgroup
   flags:
   - startup
+  with_legacy: true
 - name: pid_file
   type: str
   level: advanced
@@ -322,6 +340,7 @@ options:
   - mds
   flags:
   - startup
+  with_legacy: true
 - name: chdir
   type: str
   level: advanced
@@ -338,6 +357,7 @@ options:
   flags:
   - no_mon_update
   - startup
+  with_legacy: true
 - name: fatal_signal_handlers
   type: bool
   level: advanced
@@ -353,6 +373,7 @@ options:
   - mds
   flags:
   - startup
+  with_legacy: true
 - name: crash_dir
   type: str
   level: advanced
@@ -360,14 +381,17 @@ options:
   default: /var/lib/ceph/crash
   flags:
   - startup
+  with_legacy: true
 - name: restapi_log_level
   type: str
   level: advanced
   desc: default set by python code
+  with_legacy: true
 - name: restapi_base_url
   type: str
   level: advanced
   desc: default set by python code
+  with_legacy: true
 - name: erasure_code_dir
   type: str
   level: advanced
@@ -378,6 +402,7 @@ options:
   - osd
   flags:
   - startup
+  with_legacy: true
 - name: log_file
   type: str
   level: basic
@@ -389,6 +414,8 @@ options:
   - err_to_stderr
   - log_to_syslog
   - err_to_syslog
+  # default changed by common_preinit()
+  with_legacy: true
 - name: log_max_new
   type: int
   level: advanced
@@ -396,6 +423,8 @@ options:
   default: 1000
   see_also:
   - log_max_recent
+  # default changed by common_preinit()
+  with_legacy: true
 - name: log_max_recent
   type: int
   level: advanced
@@ -408,6 +437,8 @@ options:
     or assertion failure, all entries will be dumped to the log.
   default: 500
   daemon_default: 10000
+  # default changed by common_preinit()
+  with_legacy: true
 - name: log_to_file
   type: bool
   level: basic
@@ -415,18 +446,21 @@ options:
   default: true
   see_also:
   - log_file
+  with_legacy: true
 - name: log_to_stderr
   type: bool
   level: basic
   desc: send log lines to stderr
   default: true
   daemon_default: false
+  with_legacy: true
 - name: err_to_stderr
   type: bool
   level: basic
   desc: send critical error log lines to stderr
   default: false
   daemon_default: true
+  with_legacy: true
 - name: log_stderr_prefix
   type: str
   level: advanced
@@ -441,16 +475,19 @@ options:
   level: basic
   desc: send log lines to syslog facility
   default: false
+  with_legacy: true
 - name: err_to_syslog
   type: bool
   level: basic
   desc: send critical error log lines to syslog facility
   default: false
+  with_legacy: true
 - name: log_flush_on_exit
   type: bool
   level: advanced
   desc: set a process exit handler to ensure the log is flushed on exit
   default: false
+  with_legacy: true
 - name: log_stop_at_utilization
   type: float
   level: basic
@@ -460,6 +497,7 @@ options:
   - log_file
   min: 0
   max: 1
+  with_legacy: true
 - name: log_to_graylog
   type: bool
   level: basic
@@ -469,6 +507,7 @@ options:
   - err_to_graylog
   - log_graylog_host
   - log_graylog_port
+  with_legacy: true
 - name: err_to_graylog
   type: bool
   level: basic
@@ -478,6 +517,7 @@ options:
   - log_to_graylog
   - log_graylog_host
   - log_graylog_port
+  with_legacy: true
 - name: log_graylog_host
   type: str
   level: basic
@@ -487,6 +527,7 @@ options:
   - log_to_graylog
   - err_to_graylog
   - log_graylog_port
+  with_legacy: true
 - name: log_graylog_port
   type: int
   level: basic
@@ -494,6 +535,7 @@ options:
   default: 12201
   see_also:
   - log_graylog_host
+  with_legacy: true
 - name: log_to_journald
   type: bool
   level: basic
@@ -518,6 +560,11 @@ options:
   - service
   services:
   - common
+# options will take k/v pairs, or single-item that will be assumed as general
+# default for all, regardless of channel.
+# e.g., "info" would be taken as the same as "default=info"
+# also, "default=daemon audit=local0" would mean
+#    "default all to 'daemon', override 'audit' with 'local0'
 - name: clog_to_monitors
   type: str
   level: advanced
@@ -525,6 +572,7 @@ options:
   default: default=true
   flags:
   - runtime
+  with_legacy: true
 - name: clog_to_syslog
   type: str
   level: advanced
@@ -532,6 +580,7 @@ options:
   default: 'false'
   flags:
   - runtime
+  with_legacy: true
 - name: clog_to_syslog_level
   type: str
   level: advanced
@@ -541,6 +590,7 @@ options:
   - clog_to_syslog
   flags:
   - runtime
+  with_legacy: true
 - name: clog_to_syslog_facility
   type: str
   level: advanced
@@ -550,6 +600,7 @@ options:
   - clog_to_syslog
   flags:
   - runtime
+  with_legacy: true
 - name: clog_to_graylog
   type: str
   level: advanced
@@ -566,6 +617,7 @@ options:
   - clog_to_graylog
   flags:
   - runtime
+  with_legacy: true
 - name: clog_to_graylog_port
   type: str
   level: advanced
@@ -575,6 +627,7 @@ options:
   - clog_to_graylog
   flags:
   - runtime
+  with_legacy: true
 - name: mon_cluster_log_to_stderr
   type: bool
   level: advanced
@@ -586,6 +639,7 @@ options:
   - log_stderr_prefix
   flags:
   - runtime
+  with_legacy: true
 - name: mon_cluster_log_to_syslog
   type: str
   level: advanced
@@ -595,6 +649,7 @@ options:
   - mon
   flags:
   - runtime
+  with_legacy: true
 - name: mon_cluster_log_to_syslog_level
   type: str
   level: advanced
@@ -606,6 +661,7 @@ options:
   - mon_cluster_log_to_syslog
   flags:
   - runtime
+  with_legacy: true
 - name: mon_cluster_log_to_syslog_facility
   type: str
   level: advanced
@@ -617,6 +673,7 @@ options:
   - mon_cluster_log_to_syslog
   flags:
   - runtime
+  with_legacy: true
 - name: mon_cluster_log_to_file
   type: bool
   level: advanced
@@ -628,6 +685,7 @@ options:
   - mon_cluster_log_file
   flags:
   - runtime
+  with_legacy: true
 - name: mon_cluster_log_file
   type: str
   level: advanced
@@ -642,6 +700,7 @@ options:
   - mon_cluster_log_to_file
   flags:
   - runtime
+  with_legacy: true
 - name: mon_cluster_log_file_level
   type: str
   level: advanced
@@ -653,6 +712,7 @@ options:
   - mon_cluster_log_file
   flags:
   - runtime
+  with_legacy: true
 - name: mon_cluster_log_to_graylog
   type: str
   level: advanced
@@ -662,6 +722,7 @@ options:
   - mon
   flags:
   - runtime
+  with_legacy: true
 - name: mon_cluster_log_to_graylog_host
   type: str
   level: advanced
@@ -673,6 +734,7 @@ options:
   - mon_cluster_log_to_graylog
   flags:
   - runtime
+  with_legacy: true
 - name: mon_cluster_log_to_graylog_port
   type: str
   level: advanced
@@ -684,6 +746,7 @@ options:
   - mon_cluster_log_to_graylog
   flags:
   - runtime
+  with_legacy: true
 - name: mon_cluster_log_to_journald
   type: str
   level: advanced
@@ -700,6 +763,7 @@ options:
     dangerous, and/or cause permanent data loss
   flags:
   - runtime
+  with_legacy: true
 - name: plugin_dir
   type: str
   level: advanced
@@ -715,11 +779,15 @@ options:
   level: advanced
   desc: Use Intel ISA-L accelerated zlib implementation if available
   default: false
+  with_legacy: true
+# regular zlib compression level, not applicable to isa-l optimized version
 - name: compressor_zlib_level
   type: int
   level: advanced
   desc: Zlib compression level to use
   default: 5
+  with_legacy: true
+# regular zlib compression winsize, not applicable to isa-l optimized version
 - name: compressor_zlib_winsize
   type: int
   level: advanced
@@ -727,21 +795,26 @@ options:
   default: -15
   min: -15
   max: 32
+  with_legacy: true
+# regular zstd compression level
 - name: compressor_zstd_level
   type: int
   level: advanced
   desc: Zstd compression level to use
   default: 1
+  with_legacy: true
 - name: qat_compressor_enabled
   type: bool
   level: advanced
   desc: Enable Intel QAT acceleration support for compression if available
   default: false
+  with_legacy: true
 - name: plugin_crypto_accelerator
   type: str
   level: advanced
   desc: Crypto accelerator library to use
   default: crypto_isal
+  with_legacy: true
 - name: openssl_engine_opts
   type: str
   level: advanced
@@ -749,12 +822,14 @@ options:
   long_desc: 'Pass opts in this way: engine_id=engine1,dynamic_path=/some/path/engine1.so,default_algorithms=DIGESTS:engine_id=engine2,dynamic_path=/some/path/engine2.so,default_algorithms=CIPHERS,other_ctrl=other_value'
   flags:
   - startup
+  with_legacy: true
 - name: mempool_debug
   type: bool
   level: dev
   default: false
   flags:
   - no_mon_update
+  with_legacy: true
 - name: thp
   type: bool
   level: dev
@@ -777,6 +852,7 @@ options:
   flags:
   - no_mon_update
   - startup
+  with_legacy: true
 - name: keyfile
   type: str
   level: advanced
@@ -788,6 +864,7 @@ options:
   flags:
   - no_mon_update
   - startup
+  with_legacy: true
 - name: keyring
   type: str
   level: advanced
@@ -802,6 +879,7 @@ options:
   flags:
   - no_mon_update
   - startup
+  with_legacy: true
 - name: heartbeat_interval
   type: int
   level: advanced
@@ -809,6 +887,7 @@ options:
   default: 5
   flags:
   - startup
+  with_legacy: true
 - name: heartbeat_file
   type: str
   level: advanced
@@ -819,16 +898,19 @@ options:
   - heartbeat_interval
   flags:
   - startup
+  with_legacy: true
 - name: heartbeat_inject_failure
   type: int
   level: dev
   default: 0
+  with_legacy: true
 - name: perf
   type: bool
   level: advanced
   desc: Enable internal performance metrics
   long_desc: If enabled, collect and expose internal health metrics
   default: true
+  with_legacy: true
 - name: ms_type
   type: str
   level: advanced
@@ -836,6 +918,7 @@ options:
   default: async+posix
   flags:
   - startup
+  with_legacy: true
 - name: ms_public_type
   type: str
   level: advanced
@@ -845,6 +928,7 @@ options:
   - ms_type
   flags:
   - startup
+  with_legacy: true
 - name: ms_cluster_type
   type: str
   level: advanced
@@ -854,6 +938,7 @@ options:
   - ms_type
   flags:
   - startup
+  with_legacy: true
 - name: ms_mon_cluster_mode
   type: str
   level: basic
@@ -932,26 +1017,31 @@ options:
     connecting from.  This is useful if a client is behind some sort of NAT and we
     want to see it identified by its local (not NATed) address.
   default: true
+  with_legacy: true
 - name: ms_tcp_nodelay
   type: bool
   level: advanced
   desc: Disable Nagle's algorithm and send queued network traffic immediately
   default: true
+  with_legacy: true
 - name: ms_tcp_rcvbuf
   type: size
   level: advanced
   desc: Size of TCP socket receive buffer
   default: 0
+  with_legacy: true
 - name: ms_tcp_prefetch_max_size
   type: size
   level: advanced
   desc: Maximum amount of data to prefetch out of the socket receive buffer
   default: 4_K
+  with_legacy: true
 - name: ms_initial_backoff
   type: float
   level: advanced
   desc: Initial backoff after a network error is detected (seconds)
   default: 0.2
+  with_legacy: true
 - name: ms_max_backoff
   type: float
   level: advanced
@@ -959,46 +1049,55 @@ options:
   default: 15
   see_also:
   - ms_initial_backoff
+  with_legacy: true
 - name: ms_crc_data
   type: bool
   level: dev
   desc: Set and/or verify crc32c checksum on data payload sent over network
   default: true
+  with_legacy: true
 - name: ms_crc_header
   type: bool
   level: dev
   desc: Set and/or verify crc32c checksum on header payload sent over network
   default: true
+  with_legacy: true
 - name: ms_die_on_bad_msg
   type: bool
   level: dev
   desc: Induce a daemon crash/exit when a bad network message is received
   default: false
+  with_legacy: true
 - name: ms_die_on_unhandled_msg
   type: bool
   level: dev
   desc: Induce a daemon crash/exit when an unrecognized message is received
   default: false
+  with_legacy: true
 - name: ms_die_on_old_message
   type: bool
   level: dev
   desc: Induce a daemon crash/exit when a old, undecodable message is received
   default: false
+  with_legacy: true
 - name: ms_die_on_skipped_message
   type: bool
   level: dev
   desc: Induce a daemon crash/exit if sender skips a message sequence number
   default: false
+  with_legacy: true
 - name: ms_die_on_bug
   type: bool
   level: dev
   desc: Induce a crash/exit on various bugs (for testing purposes)
   default: false
+  with_legacy: true
 - name: ms_dispatch_throttle_bytes
   type: size
   level: advanced
   desc: Limit messages that are read off the network but still being processed
   default: 100_M
+  with_legacy: true
 - name: ms_bind_exclude_lo_iface
   type: bool
   level: advanced
@@ -1020,6 +1119,7 @@ options:
   default: false
   see_also:
   - ms_bind_ipv4
+  with_legacy: true
 - name: ms_bind_prefer_ipv4
   type: bool
   level: advanced
@@ -1044,106 +1144,129 @@ options:
   level: advanced
   desc: Lowest port number to bind daemon(s) to
   default: 6800
+  with_legacy: true
 - name: ms_bind_port_max
   type: int
   level: advanced
   desc: Highest port number to bind daemon(s) to
   default: 7300
+  with_legacy: true
 # FreeBSD does not use SO_REAUSEADDR so allow for a bit more time per default
 - name: ms_bind_retry_count
   type: int
   level: advanced
   desc: Number of attempts to make while bind(2)ing to a port
   default: @ms_bind_retry_count@
+  with_legacy: true
 # FreeBSD does not use SO_REAUSEADDR so allow for a bit more time per default
 - name: ms_bind_retry_delay
   type: int
   level: advanced
   desc: Delay between bind(2) attempts (seconds)
   default: @ms_bind_retry_delay@
+  with_legacy: true
 - name: ms_bind_before_connect
   type: bool
   level: advanced
   desc: Call bind(2) on client sockets
   default: false
+  with_legacy: true
 - name: ms_tcp_listen_backlog
   type: int
   level: advanced
   desc: Size of queue of incoming connections for accept(2)
   default: 512
+  with_legacy: true
 - name: ms_connection_ready_timeout
   type: uint
   level: advanced
   desc: Time before we declare a not yet ready connection as dead (seconds)
   default: 10
+  with_legacy: true
 - name: ms_connection_idle_timeout
   type: uint
   level: advanced
   desc: Time before an idle connection is closed (seconds)
   default: 900
+  with_legacy: true
 - name: ms_pq_max_tokens_per_priority
   type: uint
   level: dev
   default: 16_M
+  with_legacy: true
 - name: ms_pq_min_cost
   type: size
   level: dev
   default: 64_K
+  with_legacy: true
 - name: ms_inject_socket_failures
   type: uint
   level: dev
   desc: Inject a socket failure every Nth socket operation
   default: 0
+  with_legacy: true
 - name: ms_inject_delay_type
   type: str
   level: dev
   desc: Entity type to inject delays for
   flags:
   - runtime
+  with_legacy: true
 - name: ms_inject_delay_max
   type: float
   level: dev
   desc: Max delay to inject
   default: 1
+  with_legacy: true
 - name: ms_inject_delay_probability
   type: float
   level: dev
   default: 0
+  with_legacy: true
 - name: ms_inject_internal_delays
   type: float
   level: dev
   desc: Inject various internal delays to induce races (seconds)
   default: 0
+  with_legacy: true
 - name: ms_blackhole_osd
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: ms_blackhole_mon
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: ms_blackhole_mds
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: ms_blackhole_mgr
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: ms_blackhole_client
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: ms_dump_on_send
   type: bool
   level: advanced
   desc: Hexdump message to debug log on message send
   default: false
+  with_legacy: true
 - name: ms_dump_corrupt_message_level
   type: int
   level: advanced
   desc: Log level at which to hexdump corrupt messages we receive
   default: 1
+  with_legacy: true
+# number of worker processing threads for async messenger created on init
 - name: ms_async_op_threads
   type: uint
   level: advanced
@@ -1151,129 +1274,173 @@ options:
   default: 3
   min: 1
   max: 24
+  with_legacy: true
 - name: ms_async_rdma_device_name
   type: str
   level: advanced
+  with_legacy: true
 - name: ms_async_rdma_enable_hugepage
   type: bool
   level: advanced
   default: false
+  with_legacy: true
 - name: ms_async_rdma_buffer_size
   type: size
   level: advanced
   default: 128_K
+  with_legacy: true
 - name: ms_async_rdma_send_buffers
   type: uint
   level: advanced
   default: 1_K
+  with_legacy: true
+# size of the receive buffer pool, 0 is unlimited
 - name: ms_async_rdma_receive_buffers
   type: uint
   level: advanced
   default: 32_K
+  with_legacy: true
+# max number of wr in srq
 - name: ms_async_rdma_receive_queue_len
   type: uint
   level: advanced
   default: 4_K
+  with_legacy: true
+# support srq
 - name: ms_async_rdma_support_srq
   type: bool
   level: advanced
   default: true
+  with_legacy: true
 - name: ms_async_rdma_port_num
   type: uint
   level: advanced
   default: 1
+  with_legacy: true
 - name: ms_async_rdma_polling_us
   type: uint
   level: advanced
   default: 1000
+  with_legacy: true
 - name: ms_async_rdma_gid_idx
   type: int
   level: advanced
   desc: use gid_idx to select GID for choosing RoCEv1 or RoCEv2
   default: 0
+  with_legacy: true
+# GID format: "fe80:0000:0000:0000:7efe:90ff:fe72:6efe", no zero folding
 - name: ms_async_rdma_local_gid
   type: str
   level: advanced
+  with_legacy: true
+# 0=RoCEv1, 1=RoCEv2, 2=RoCEv1.5
 - name: ms_async_rdma_roce_ver
   type: int
   level: advanced
   default: 1
+  with_legacy: true
+# in RoCE, this means PCP
 - name: ms_async_rdma_sl
   type: int
   level: advanced
   default: 3
+  with_legacy: true
+# in RoCE, this means DSCP
 - name: ms_async_rdma_dscp
   type: int
   level: advanced
   default: 96
+  with_legacy: true
+# when there are enough accept failures, indicating there are unrecoverable failures,
+# just do ceph_abort() . Here we make it configurable.
 - name: ms_max_accept_failures
   type: int
   level: advanced
   desc: The maximum number of consecutive failed accept() calls before considering
     the daemon is misconfigured and abort it.
   default: 4
+  with_legacy: true
+# rdma connection management
 - name: ms_async_rdma_cm
   type: bool
   level: advanced
   default: false
+  with_legacy: true
 - name: ms_async_rdma_type
   type: str
   level: advanced
   default: ib
+  with_legacy: true
 - name: ms_dpdk_port_id
   type: int
   level: advanced
   default: 0
+  with_legacy: true
+# it is modified in unittest so that use SAFE_OPTION to declare
 - name: ms_dpdk_coremask
   type: str
   level: advanced
   default: '0xF'
   see_also:
   - ms_async_op_threads
+  with_legacy: true
 - name: ms_dpdk_memory_channel
   type: str
   level: advanced
   default: '4'
+  with_legacy: true
 - name: ms_dpdk_hugepages
   type: str
   level: advanced
+  with_legacy: true
 - name: ms_dpdk_pmd
   type: str
   level: advanced
+  with_legacy: true
 - name: ms_dpdk_host_ipv4_addr
   type: str
   level: advanced
+  with_legacy: true
 - name: ms_dpdk_gateway_ipv4_addr
   type: str
   level: advanced
+  with_legacy: true
 - name: ms_dpdk_netmask_ipv4_addr
   type: str
   level: advanced
+  with_legacy: true
 - name: ms_dpdk_lro
   type: bool
   level: advanced
   default: true
+  with_legacy: true
 - name: ms_dpdk_hw_flow_control
   type: bool
   level: advanced
   default: true
+  with_legacy: true
+# Weighing of a hardware network queue relative to a software queue (0=no work, 1=     equal share)")
 - name: ms_dpdk_hw_queue_weight
   type: float
   level: advanced
   default: 1
+  with_legacy: true
 - name: ms_dpdk_debug_allow_loopback
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: ms_dpdk_rx_buffer_count_per_core
   type: int
   level: advanced
   default: 8192
+  with_legacy: true
 - name: inject_early_sigterm
   type: bool
   level: dev
   desc: send ourselves a SIGTERM early during startup
   default: false
+  with_legacy: true
 - name: mon_enable_op_tracker
   type: bool
   level: advanced
@@ -1332,6 +1499,8 @@ options:
   - mon
   flags:
   - no_mon_update
+  with_legacy: true
+# list of initial cluster mon ids; if specified, need majority to form initial quorum and create new cluster
 - name: mon_initial_members
   type: str
   level: advanced
@@ -1340,24 +1509,31 @@ options:
   flags:
   - no_mon_update
   - cluster_create
+  with_legacy: true
+# compact leveldb on ceph-mon start
 - name: mon_compact_on_start
   type: bool
   level: advanced
   default: false
   services:
   - mon
+  with_legacy: true
+# trigger leveldb compaction on bootstrap
 - name: mon_compact_on_bootstrap
   type: bool
   level: advanced
   default: false
   services:
   - mon
+  with_legacy: true
+# compact (a prefix) when we trim old states
 - name: mon_compact_on_trim
   type: bool
   level: advanced
   default: true
   services:
   - mon
+  with_legacy: true
 - name: mon_osdmap_full_prune_enabled
   type: bool
   level: advanced
@@ -1410,6 +1586,7 @@ options:
   default: 500
   services:
   - mon
+  with_legacy: true
 - name: mon_osd_cache_size_min
   type: size
   level: advanced
@@ -1417,6 +1594,7 @@ options:
   default: 128_M
   services:
   - mon
+  with_legacy: true
 - name: mon_memory_target
   type: size
   level: basic
@@ -1427,6 +1605,7 @@ options:
   - mon
   flags:
   - runtime
+  with_legacy: true
 - name: mon_memory_autotune
   type: bool
   level: basic
@@ -1436,6 +1615,7 @@ options:
   - mon
   flags:
   - runtime
+  with_legacy: true
 - name: mon_cpu_threads
   type: int
   level: advanced
@@ -1443,6 +1623,7 @@ options:
   default: 4
   services:
   - mon
+  with_legacy: true
 - name: mon_osd_mapping_pgs_per_chunk
   type: int
   level: dev
@@ -1450,6 +1631,7 @@ options:
   default: 4096
   services:
   - mon
+  with_legacy: true
 - name: mon_clean_pg_upmaps_per_chunk
   type: uint
   level: dev
@@ -1457,6 +1639,7 @@ options:
   default: 256
   services:
   - mon
+  with_legacy: true
 - name: mon_osd_max_creating_pgs
   type: int
   level: advanced
@@ -1464,6 +1647,7 @@ options:
   default: 1024
   services:
   - mon
+  with_legacy: true
 - name: mon_osd_max_initial_pgs
   type: int
   level: advanced
@@ -1480,6 +1664,7 @@ options:
   default: 5
   services:
   - mon
+  with_legacy: true
 - name: mon_session_timeout
   type: int
   level: advanced
@@ -1487,6 +1672,7 @@ options:
   default: 5_min
   services:
   - mon
+  with_legacy: true
 - name: mon_subscribe_interval
   type: float
   level: dev
@@ -1494,6 +1680,7 @@ options:
   default: 1_day
   services:
   - mon
+  with_legacy: true
 - name: mon_delta_reset_interval
   type: float
   level: advanced
@@ -1502,6 +1689,7 @@ options:
   services:
   - mon
   - mon
+  with_legacy: true
 - name: mon_osd_laggy_halflife
   type: int
   level: advanced
@@ -1509,6 +1697,7 @@ options:
   default: 1_hr
   services:
   - mon
+  with_legacy: true
 - name: mon_osd_laggy_weight
   type: float
   level: advanced
@@ -1521,6 +1710,7 @@ options:
   - mon
   min: 0
   max: 1
+  with_legacy: true
 - name: mon_osd_laggy_max_interval
   type: int
   level: advanced
@@ -1528,6 +1718,7 @@ options:
   default: 5_min
   services:
   - mon
+  with_legacy: true
 - name: mon_osd_adjust_heartbeat_grace
   type: bool
   level: advanced
@@ -1546,6 +1737,7 @@ options:
   - mon_osd_laggy_halflife
   - mon_osd_laggy_weight
   - mon_osd_laggy_max_interval
+  with_legacy: true
 - name: mon_osd_adjust_down_out_interval
   type: bool
   level: advanced
@@ -1555,6 +1747,7 @@ options:
   - mon
   see_also:
   - mon_osd_adjust_heartbeat_grace
+  with_legacy: true
 - name: mon_osd_auto_mark_in
   type: bool
   level: advanced
@@ -1562,6 +1755,7 @@ options:
   default: false
   services:
   - mon
+  with_legacy: true
 - name: mon_osd_auto_mark_auto_out_in
   type: bool
   level: advanced
@@ -1571,6 +1765,7 @@ options:
   - mon
   see_also:
   - mon_osd_down_out_interval
+  with_legacy: true
 - name: mon_osd_auto_mark_new_in
   type: bool
   level: advanced
@@ -1578,6 +1773,7 @@ options:
   default: true
   services:
   - mon
+  with_legacy: true
 - name: mon_osd_destroyed_out_interval
   type: int
   level: advanced
@@ -1585,6 +1781,7 @@ options:
   default: 10_min
   services:
   - mon
+  with_legacy: true
 - name: mon_osd_down_out_interval
   type: int
   level: advanced
@@ -1592,6 +1789,7 @@ options:
   default: 10_min
   services:
   - mon
+  with_legacy: true
 - name: mon_osd_down_out_subtree_limit
   type: str
   level: advanced
@@ -1613,6 +1811,7 @@ options:
   - mon
   see_also:
   - mon_osd_down_out_interval
+  with_legacy: true
 - name: mon_osd_min_in_ratio
   type: float
   level: advanced
@@ -1622,6 +1821,7 @@ options:
   - mon
   see_also:
   - mon_osd_down_out_interval
+  with_legacy: true
 - name: mon_osd_warn_op_age
   type: float
   level: advanced
@@ -1629,6 +1829,7 @@ options:
   default: 32
   services:
   - mgr
+  with_legacy: true
 - name: mon_osd_warn_num_repaired
   type: uint
   level: advanced
@@ -1644,6 +1845,7 @@ options:
   default: 128
   services:
   - mgr
+  with_legacy: true
 - name: mon_osd_prime_pg_temp
   type: bool
   level: dev
@@ -1651,6 +1853,7 @@ options:
   default: true
   services:
   - mon
+  with_legacy: true
 - name: mon_osd_prime_pg_temp_max_time
   type: float
   level: dev
@@ -1658,6 +1861,7 @@ options:
   default: 0.5
   services:
   - mon
+  with_legacy: true
 - name: mon_osd_prime_pg_temp_max_estimate
   type: float
   level: advanced
@@ -1666,6 +1870,7 @@ options:
   default: 0.25
   services:
   - mon
+  with_legacy: true
 - name: mon_stat_smooth_intervals
   type: uint
   level: advanced
@@ -1682,6 +1887,7 @@ options:
   default: 5
   services:
   - mon
+  with_legacy: true
 - name: mon_election_default_strategy
   type: uint
   level: advanced
@@ -1698,6 +1904,7 @@ options:
   default: 5
   services:
   - mon
+  with_legacy: true
 - name: mon_lease_renew_interval_factor
   type: float
   level: advanced
@@ -1711,6 +1918,7 @@ options:
   - mon_lease
   min: 0
   max: 0.9999999
+  with_legacy: true
 - name: mon_lease_ack_timeout_factor
   type: float
   level: advanced
@@ -1722,6 +1930,7 @@ options:
   - mon_lease
   min: 1.0001
   max: 100
+  with_legacy: true
 - name: mon_accept_timeout_factor
   type: float
   level: advanced
@@ -1732,6 +1941,7 @@ options:
   - mon
   see_also:
   - mon_lease
+  with_legacy: true
 - name: mon_elector_ping_timeout
   type: float
   level: advanced
@@ -1823,6 +2033,8 @@ options:
   default: 0.05
   services:
   - mon
+  with_legacy: true
+# exponential backoff for clock drift warnings
 - name: mon_clock_drift_warn_backoff
   type: float
   level: advanced
@@ -1831,6 +2043,8 @@ options:
   default: 5
   services:
   - mon
+  with_legacy: true
+# on leader, timecheck (clock drift check) interval (seconds)
 - name: mon_timecheck_interval
   type: float
   level: advanced
@@ -1838,6 +2052,8 @@ options:
   default: 5_min
   services:
   - mon
+  with_legacy: true
+# on leader, timecheck (clock drift check) interval when in presence of a skew (seconds)
 - name: mon_timecheck_skew_interval
   type: float
   level: advanced
@@ -1848,6 +2064,7 @@ options:
   - mon
   see_also:
   - mon_timecheck_interval
+  with_legacy: true
 - name: mon_pg_stuck_threshold
   type: int
   level: advanced
@@ -1914,6 +2131,7 @@ options:
   default: 0.5
   services:
   - mgr
+  with_legacy: true
 - name: mon_cache_target_full_warn_ratio
   type: float
   level: advanced
@@ -1925,6 +2143,7 @@ options:
   flags:
   - no_mon_update
   - cluster_create
+  with_legacy: true
 - name: mon_osd_full_ratio
   type: float
   level: advanced
@@ -1933,6 +2152,7 @@ options:
   flags:
   - no_mon_update
   - cluster_create
+  with_legacy: true
 - name: mon_osd_backfillfull_ratio
   type: float
   level: advanced
@@ -1940,6 +2160,7 @@ options:
   flags:
   - no_mon_update
   - cluster_create
+  with_legacy: true
 - name: mon_osd_nearfull_ratio
   type: float
   level: advanced
@@ -1948,6 +2169,7 @@ options:
   flags:
   - no_mon_update
   - cluster_create
+  with_legacy: true
 - name: mon_osd_initial_require_min_compat_client
   type: str
   level: advanced
@@ -1955,6 +2177,7 @@ options:
   flags:
   - no_mon_update
   - cluster_create
+  with_legacy: true
 - name: mon_allow_pool_delete
   type: bool
   level: advanced
@@ -1962,6 +2185,7 @@ options:
   default: false
   services:
   - mon
+  with_legacy: true
 - name: mon_fake_pool_delete
   type: bool
   level: advanced
@@ -1969,6 +2193,7 @@ options:
   default: false
   services:
   - mon
+  with_legacy: true
 - name: mon_globalid_prealloc
   type: uint
   level: advanced
@@ -1979,6 +2204,7 @@ options:
   default: 10000
   services:
   - mon
+  with_legacy: true
 - name: mon_osd_report_timeout
   type: int
   level: advanced
@@ -1986,6 +2212,7 @@ options:
   default: 15_min
   services:
   - mon
+  with_legacy: true
 - name: mon_warn_on_insecure_global_id_reclaim
   type: bool
   level: advanced
@@ -2029,6 +2256,7 @@ options:
   - mgr
   see_also:
   - mon_crush_min_required_version
+  with_legacy: true
 - name: mon_crush_min_required_version
   type: str
   level: advanced
@@ -2038,6 +2266,7 @@ options:
   - mgr
   see_also:
   - mon_warn_on_legacy_crush_tunables
+  with_legacy: true
 - name: mon_warn_on_crush_straw_calc_version_zero
   type: bool
   level: advanced
@@ -2046,6 +2275,7 @@ options:
   default: true
   services:
   - mgr
+  with_legacy: true
 - name: mon_warn_on_osd_down_out_interval_zero
   type: bool
   level: advanced
@@ -2059,6 +2289,7 @@ options:
   - mgr
   see_also:
   - mon_osd_down_out_interval
+  with_legacy: true
 - name: mon_warn_on_cache_pools_without_hit_sets
   type: bool
   level: advanced
@@ -2067,6 +2298,7 @@ options:
   default: true
   services:
   - mgr
+  with_legacy: true
 - name: mon_warn_on_pool_no_app
   type: bool
   level: dev
@@ -2106,6 +2338,7 @@ options:
   default: false
   services:
   - mgr
+  with_legacy: true
 - name: mon_warn_on_too_few_osds
   type: bool
   level: advanced
@@ -2146,6 +2379,7 @@ options:
   default: 500
   services:
   - mon
+  with_legacy: true
 - name: mon_max_log_epochs
   type: int
   level: advanced
@@ -2153,6 +2387,7 @@ options:
   default: 500
   services:
   - mon
+  with_legacy: true
 - name: mon_max_mdsmap_epochs
   type: int
   level: advanced
@@ -2160,6 +2395,7 @@ options:
   default: 500
   services:
   - mon
+  with_legacy: true
 - name: mon_max_mgrmap_epochs
   type: int
   level: advanced
@@ -2174,6 +2410,7 @@ options:
   default: 10000
   services:
   - mon
+  with_legacy: true
 - name: mon_probe_timeout
   type: float
   level: advanced
@@ -2181,6 +2418,7 @@ options:
   default: 2
   services:
   - mon
+  with_legacy: true
 - name: mon_client_bytes
   type: size
   level: advanced
@@ -2188,6 +2426,7 @@ options:
   default: 100_M
   services:
   - mon
+  with_legacy: true
 - name: mon_daemon_bytes
   type: size
   level: advanced
@@ -2195,6 +2434,7 @@ options:
   default: 400_M
   services:
   - mon
+  with_legacy: true
 - name: mon_mgr_proxy_client_bytes_ratio
   type: float
   level: dev
@@ -2210,6 +2450,7 @@ options:
   default: 50
   services:
   - mon
+  with_legacy: true
 - name: mon_max_log_entries_per_event
   type: int
   level: advanced
@@ -2217,30 +2458,38 @@ options:
   default: 4096
   services:
   - mon
+  with_legacy: true
+# min pgs per osd for reweight-by-pg command
 - name: mon_reweight_min_pgs_per_osd
   type: uint
   level: advanced
   default: 10
   services:
   - mgr
+  with_legacy: true
+# min bytes per osd for reweight-by-utilization command
 - name: mon_reweight_min_bytes_per_osd
   type: size
   level: advanced
   default: 100_M
   services:
   - mgr
+  with_legacy: true
+# max osds to change per reweight-by-* command
 - name: mon_reweight_max_osds
   type: int
   level: advanced
   default: 4
   services:
   - mgr
+  with_legacy: true
 - name: mon_reweight_max_change
   type: float
   level: advanced
   default: 0.05
   services:
   - mgr
+  with_legacy: true
 - name: mon_health_to_clog
   type: bool
   level: advanced
@@ -2248,6 +2497,7 @@ options:
   default: true
   services:
   - mon
+  with_legacy: true
 - name: mon_health_to_clog_interval
   type: int
   level: advanced
@@ -2257,17 +2507,20 @@ options:
   - mon
   see_also:
   - mon_health_to_clog
+  with_legacy: true
 - name: mon_health_to_clog_tick_interval
   type: float
   level: dev
   default: 1_min
   services:
   - mon
+  with_legacy: true
 - name: mon_health_detail_to_clog
   type: bool
   level: dev
   desc: log health detail to cluster log
   default: true
+  with_legacy: true
 - name: mon_health_max_detail
   type: uint
   level: advanced
@@ -2290,6 +2543,7 @@ options:
   default: 5
   services:
   - mon
+  with_legacy: true
 - name: mon_data_avail_warn
   type: int
   level: advanced
@@ -2297,6 +2551,7 @@ options:
   default: 30
   services:
   - mon
+  with_legacy: true
 - name: mon_data_size_warn
   type: size
   level: advanced
@@ -2304,6 +2559,7 @@ options:
   default: 15_G
   services:
   - mon
+  with_legacy: true
 - name: mon_warn_pg_not_scrubbed_ratio
   type: float
   level: advanced
@@ -2312,6 +2568,7 @@ options:
   see_also:
   - osd_scrub_max_interval
   min: 0
+  with_legacy: true
 - name: mon_warn_pg_not_deep_scrubbed_ratio
   type: float
   level: advanced
@@ -2320,6 +2577,7 @@ options:
   see_also:
   - osd_deep_scrub_interval
   min: 0
+  with_legacy: true
 - name: mon_scrub_interval
   type: secs
   level: advanced
@@ -2335,6 +2593,7 @@ options:
   default: 5_min
   services:
   - mon
+  with_legacy: true
 - name: mon_scrub_max_keys
   type: int
   level: advanced
@@ -2342,6 +2601,8 @@ options:
   default: 100
   services:
   - mon
+  with_legacy: true
+# probability of injected crc mismatch [0.0, 1.0]
 - name: mon_scrub_inject_crc_mismatch
   type: float
   level: dev
@@ -2349,6 +2610,8 @@ options:
   default: 0
   services:
   - mon
+  with_legacy: true
+# probability of injected missing keys [0.0, 1.0]
 - name: mon_scrub_inject_missing_keys
   type: float
   level: dev
@@ -2356,6 +2619,7 @@ options:
   default: 0
   services:
   - mon
+  with_legacy: true
 - name: mon_config_key_max_entry_size
   type: size
   level: advanced
@@ -2363,6 +2627,7 @@ options:
   default: 64_K
   services:
   - mon
+  with_legacy: true
 - name: mon_sync_timeout
   type: float
   level: advanced
@@ -2370,6 +2635,7 @@ options:
   default: 1_min
   services:
   - mon
+  with_legacy: true
 - name: mon_sync_max_payload_size
   type: size
   level: advanced
@@ -2377,6 +2643,7 @@ options:
   default: 1_M
   services:
   - mon
+  with_legacy: true
 - name: mon_sync_max_payload_keys
   type: int
   level: advanced
@@ -2384,6 +2651,7 @@ options:
   default: 2000
   services:
   - mon
+  with_legacy: true
 - name: mon_sync_debug
   type: bool
   level: dev
@@ -2391,6 +2659,7 @@ options:
   default: false
   services:
   - mon
+  with_legacy: true
 - name: mon_inject_sync_get_chunk_delay
   type: float
   level: dev
@@ -2398,6 +2667,7 @@ options:
   default: 0
   services:
   - mon
+  with_legacy: true
 - name: mon_osd_min_down_reporters
   type: uint
   level: advanced
@@ -2426,6 +2696,8 @@ options:
   default: 32768
   services:
   - mon
+  with_legacy: true
+# force mon to trim maps to this point, regardless of min_last_epoch_clean (dangerous)
 - name: mon_osd_force_trim_to
   type: int
   level: dev
@@ -2433,6 +2705,8 @@ options:
   default: 0
   services:
   - mon
+  with_legacy: true
+# force mon to trim mdsmaps to this point (dangerous)
 - name: mon_mds_force_trim_to
   type: int
   level: dev
@@ -2440,6 +2714,8 @@ options:
   default: 0
   services:
   - mon
+  with_legacy: true
+# skip safety assertions on FSMap (in case of bugs where we want to continue anyway)
 - name: mon_mds_skip_sanity
   type: bool
   level: advanced
@@ -2447,6 +2723,7 @@ options:
   default: false
   services:
   - mon
+  with_legacy: true
 - name: mon_debug_extra_checks
   type: bool
   level: dev
@@ -2472,6 +2749,7 @@ options:
   default: false
   services:
   - mon
+  with_legacy: true
 - name: mon_debug_dump_transactions
   type: bool
   level: dev
@@ -2481,6 +2759,7 @@ options:
   - mon
   see_also:
   - mon_debug_dump_location
+  with_legacy: true
 - name: mon_debug_dump_json
   type: bool
   level: dev
@@ -2490,6 +2769,7 @@ options:
   - mon
   see_also:
   - mon_debug_dump_transactions
+  with_legacy: true
 - name: mon_debug_dump_location
   type: str
   level: dev
@@ -2499,6 +2779,7 @@ options:
   - mon
   see_also:
   - mon_debug_dump_transactions
+  with_legacy: true
 - name: mon_debug_no_require_pacific
   type: bool
   level: dev
@@ -2524,6 +2805,7 @@ options:
   default: false
   services:
   - mon
+  with_legacy: true
 - name: mon_debug_no_initial_persistent_features
   type: bool
   level: dev
@@ -2533,6 +2815,7 @@ options:
   - mon
   flags:
   - cluster_create
+  with_legacy: true
 - name: mon_inject_transaction_delay_max
   type: float
   level: dev
@@ -2540,6 +2823,8 @@ options:
   default: 10
   services:
   - mon
+  with_legacy: true
+# range [0, 1]
 - name: mon_inject_transaction_delay_probability
   type: float
   level: dev
@@ -2547,6 +2832,7 @@ options:
   default: 0
   services:
   - mon
+  with_legacy: true
 - name: mon_inject_pg_merge_bounce_probability
   type: float
   level: dev
@@ -2554,6 +2840,7 @@ options:
   default: 0
   services:
   - mon
+# kill the sync provider at a specific point in the work flow
 - name: mon_sync_provider_kill_at
   type: int
   level: dev
@@ -2561,6 +2848,8 @@ options:
   default: 0
   services:
   - mon
+  with_legacy: true
+# kill the sync requester at a specific point in the work flow
 - name: mon_sync_requester_kill_at
   type: int
   level: dev
@@ -2568,6 +2857,8 @@ options:
   default: 0
   services:
   - mon
+  with_legacy: true
+# force monitor to join quorum even if it has been previously removed from the map
 - name: mon_force_quorum_join
   type: bool
   level: advanced
@@ -2575,6 +2866,8 @@ options:
   default: false
   services:
   - mon
+  with_legacy: true
+# type of keyvaluedb backend
 - name: mon_keyvaluedb
   type: str
   level: advanced
@@ -2587,12 +2880,15 @@ options:
   - rocksdb
   flags:
   - create
+  with_legacy: true
+# UNSAFE -- TESTING ONLY! Allows addition of a cache tier with preexisting snaps
 - name: mon_debug_unsafe_allow_tier_with_nonempty_snaps
   type: bool
   level: dev
   default: false
   services:
   - mon
+  with_legacy: true
 - name: mon_osd_blocklist_default_expire
   type: float
   level: advanced
@@ -2600,6 +2896,7 @@ options:
   default: 1_hr
   services:
   - mon
+  with_legacy: true
 - name: mon_mds_blocklist_interval
   type: float
   level: dev
@@ -2629,6 +2926,7 @@ options:
   default: true
   services:
   - mon
+  with_legacy: true
 - name: mon_smart_report_timeout
   type: uint
   level: advanced
@@ -2662,60 +2960,78 @@ options:
   default: 7_day
   services:
   - mon
+# how often (in commits) to stash a full copy of the PaxosService state
 - name: paxos_stash_full_interval
   type: int
   level: advanced
   default: 25
   services:
   - mon
+  with_legacy: true
+# max paxos iterations before we must first sync the monitor stores
 - name: paxos_max_join_drift
   type: int
   level: advanced
   default: 10
   services:
   - mon
+  with_legacy: true
+# gather updates for this long before proposing a map update
 - name: paxos_propose_interval
   type: float
   level: advanced
   default: 1
   services:
   - mon
+  with_legacy: true
+# min time to gather updates for after period of inactivity
 - name: paxos_min_wait
   type: float
   level: advanced
   default: 0.05
   services:
   - mon
+  with_legacy: true
+# minimum number of paxos states to keep around
 - name: paxos_min
   type: int
   level: advanced
   default: 500
   services:
   - mon
+  with_legacy: true
+# number of extra proposals tolerated before trimming
 - name: paxos_trim_min
   type: int
   level: advanced
   default: 250
   services:
   - mon
+  with_legacy: true
+# maximum amount of versions to trim during a single proposal (0 disables it)
 - name: paxos_trim_max
   type: int
   level: advanced
   default: 500
   services:
   - mon
+  with_legacy: true
+# minimum amount of versions to trigger a trim (0 disables it)
 - name: paxos_service_trim_min
   type: uint
   level: advanced
   default: 250
   services:
   - mon
+  with_legacy: true
+# maximum amount of versions to trim during a single proposal (0 disables it)
 - name: paxos_service_trim_max
   type: uint
   level: advanced
   default: 500
   services:
   - mon
+  with_legacy: true
 - name: paxos_service_trim_max_multiplier
   type: uint
   level: advanced
@@ -2733,30 +3049,40 @@ options:
   default: 0
   services:
   - mon
+  with_legacy: true
+# required of mon, mds, osd daemons
 - name: auth_cluster_required
   type: str
   level: advanced
   desc: authentication methods required by the cluster
   default: cephx
+  with_legacy: true
+# required by daemons of clients
 - name: auth_service_required
   type: str
   level: advanced
   desc: authentication methods required by service daemons
   default: cephx
+  with_legacy: true
+# what clients require of daemons
 - name: auth_client_required
   type: str
   level: advanced
   desc: authentication methods allowed by clients
   default: cephx, none
+  with_legacy: true
+# deprecated; default value for above if they are not defined.
 - name: auth_supported
   type: str
   level: advanced
   desc: authentication methods required (deprecated)
+  with_legacy: true
 - name: max_rotating_auth_attempts
   type: int
   level: advanced
   desc: number of attempts to initialize rotating keys before giving up
   default: 10
+  with_legacy: true
 - name: rotating_keys_bootstrap_timeout
   type: int
   level: advanced
@@ -2771,41 +3097,52 @@ options:
   type: bool
   level: advanced
   default: false
+  with_legacy: true
 - name: cephx_require_version
   type: int
   level: advanced
   desc: Cephx version required (1 = pre-mimic, 2 = mimic+)
   default: 2
+  with_legacy: true
 - name: cephx_cluster_require_signatures
   type: bool
   level: advanced
   default: false
+  with_legacy: true
 - name: cephx_cluster_require_version
   type: int
   level: advanced
   desc: Cephx version required by the cluster from clients (1 = pre-mimic, 2 = mimic+)
   default: 2
+  with_legacy: true
 - name: cephx_service_require_signatures
   type: bool
   level: advanced
   default: false
+  with_legacy: true
 - name: cephx_service_require_version
   type: int
   level: advanced
   desc: Cephx version required from ceph services (1 = pre-mimic, 2 = mimic+)
   default: 2
+  with_legacy: true
+# Default to signing session messages if supported
 - name: cephx_sign_messages
   type: bool
   level: advanced
   default: true
+  with_legacy: true
 - name: auth_mon_ticket_ttl
   type: float
   level: advanced
   default: 72_hr
+  default: 12_hr
+  with_legacy: true
 - name: auth_service_ticket_ttl
   type: float
   level: advanced
   default: 1_hr
+  with_legacy: true
 - name: auth_allow_insecure_global_id_reclaim
   type: bool
   level: advanced
@@ -2824,6 +3161,7 @@ options:
   - mon_warn_on_insecure_global_id_reclaim
   - mon_warn_on_insecure_global_id_reclaim_allowed
   - auth_expose_insecure_global_id_reclaim
+  with_legacy: true
 - name: auth_expose_insecure_global_id_reclaim
   type: bool
   level: advanced
@@ -2839,52 +3177,70 @@ options:
   - mon_warn_on_insecure_global_id_reclaim
   - mon_warn_on_insecure_global_id_reclaim_allowed
   - auth_allow_insecure_global_id_reclaim
+  with_legacy: true
+# if true, assert when weird things happen
 - name: auth_debug
   type: bool
   level: dev
   default: false
+  with_legacy: true
+# how many mons to try to connect to in parallel during hunt
 - name: mon_client_hunt_parallel
   type: uint
   level: advanced
   default: 3
+  with_legacy: true
+# try new mon every N seconds until we connect
 - name: mon_client_hunt_interval
   type: float
   level: advanced
   default: 3
+  with_legacy: true
+# send logs every N seconds
 - name: mon_client_log_interval
   type: float
   level: advanced
   desc: How frequently we send queued cluster log messages to mon
   default: 1
+  with_legacy: true
+# ping every N seconds
 - name: mon_client_ping_interval
   type: float
   level: advanced
   default: 10
+  with_legacy: true
+# fail if we don't hear back
 - name: mon_client_ping_timeout
   type: float
   level: advanced
   default: 30
+  with_legacy: true
 - name: mon_client_hunt_interval_backoff
   type: float
   level: advanced
   default: 1.5
+  with_legacy: true
 - name: mon_client_hunt_interval_min_multiple
   type: float
   level: advanced
   default: 1
+  with_legacy: true
 - name: mon_client_hunt_interval_max_multiple
   type: float
   level: advanced
   default: 10
+  with_legacy: true
 - name: mon_client_max_log_entries_per_message
   type: int
   level: advanced
   default: 1000
+  with_legacy: true
 - name: mon_client_directed_command_retry
   type: int
   level: dev
   desc: Number of times to try sending a command directed at a specific monitor
   default: 2
+  with_legacy: true
 - name: mon_max_pool_pg_num
   type: uint
   level: advanced
@@ -2903,63 +3259,81 @@ options:
   default: 0
   services:
   - mgr
+# whitespace-separated list of key=value pairs describing crush location
 - name: crush_location
   type: str
   level: advanced
+  with_legacy: true
 - name: crush_location_hook
   type: str
   level: advanced
+  with_legacy: true
 - name: crush_location_hook_timeout
   type: int
   level: advanced
   default: 10
+  with_legacy: true
 - name: objecter_tick_interval
   type: float
   level: dev
   default: 5
+  with_legacy: true
+# before we ask for a map
 - name: objecter_timeout
   type: float
   level: advanced
   desc: Seconds before in-flight op is considered 'laggy' and we query mon for the
     latest OSDMap
   default: 10
+  with_legacy: true
 - name: objecter_inflight_op_bytes
   type: size
   level: advanced
   desc: Max in-flight data in bytes (both directions)
   default: 100_M
+  with_legacy: true
 - name: objecter_inflight_ops
   type: uint
   level: advanced
   desc: Max in-flight operations
   default: 1_K
+  with_legacy: true
+# num of completion locks per each session, for serializing same object responses
 - name: objecter_completion_locks_per_session
   type: uint
   level: dev
   default: 32
+  with_legacy: true
+# suppress watch pings
 - name: objecter_inject_no_watch_ping
   type: bool
   level: dev
   default: false
+  with_legacy: true
+# ignore the first reply for each write, and resend the osd op instead
 - name: objecter_retry_writes_after_first_reply
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: objecter_debug_inject_relock_delay
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: filer_max_purge_ops
   type: uint
   level: advanced
   desc: Max in-flight operations for purging a striped range (e.g., MDS journal)
   default: 10
+  with_legacy: true
 - name: filer_max_truncate_ops
   type: uint
   level: advanced
   desc: Max in-flight operations for truncating/deleting a striped sequence (e.g.,
     MDS journal)
   default: 128
+  with_legacy: true
 - name: journaler_write_head_interval
   type: int
   level: advanced
@@ -3028,21 +3402,25 @@ options:
   level: advanced
   desc: Timeout (in seconds) for smarctl to run, default is set to 5
   default: 5
+# verify backend can support configured max object name length
 - name: osd_check_max_object_name_len_on_startup
   type: bool
   level: dev
   default: true
+  with_legacy: true
 - name: osd_max_backfills
   type: uint
   level: advanced
-  desc: 'Maximum number of concurrent local and remote backfills or recoveries per
-    OSD '
+  desc: Maximum number of concurrent local and remote backfills or recoveries per
+    OSD
   long_desc: There can be osd_max_backfills local reservations AND the same remote
     reservations per OSD. So a value of 1 lets this OSD participate as 1 PG primary
     in recovery and 1 shard of another recovering PG.
   default: 1
   flags:
   - runtime
+  with_legacy: true
+# Minimum recovery priority (255 = max, smaller = lower)
 - name: osd_min_recovery_priority
   type: int
   level: advanced
@@ -3051,28 +3429,33 @@ options:
     work (e.g., rebalancing) below this threshold and focus solely on higher priority
     work (e.g., replicating degraded objects).
   default: 0
+  with_legacy: true
 - name: osd_backfill_retry_interval
   type: float
   level: advanced
   desc: how frequently to retry backfill reservations after being denied (e.g., due
     to a full OSD)
   default: 30
+  with_legacy: true
 - name: osd_recovery_retry_interval
   type: float
   level: advanced
   desc: how frequently to retry recovery reservations after being denied (e.g., due
     to a full OSD)
   default: 30
+  with_legacy: true
 - name: osd_agent_max_ops
   type: int
   level: advanced
   desc: maximum concurrent tiering operations for tiering agent
   default: 4
+  with_legacy: true
 - name: osd_agent_max_low_ops
   type: int
   level: advanced
   desc: maximum concurrent low-priority tiering operations for tiering agent
   default: 2
+  with_legacy: true
 - name: osd_agent_min_evict_effort
   type: float
   level: advanced
@@ -3080,16 +3463,19 @@ options:
   default: 0.1
   min: 0
   max: 0.99
+  with_legacy: true
 - name: osd_agent_quantize_effort
   type: float
   level: advanced
   desc: size of quantize unit for eviction effort
   default: 0.1
+  with_legacy: true
 - name: osd_agent_delay_time
   type: float
   level: advanced
   desc: how long agent should sleep if it has no work to do
   default: 5
+  with_legacy: true
 - name: osd_find_best_info_ignore_history_les
   type: bool
   level: dev
@@ -3100,22 +3486,28 @@ options:
     of a PG's contents even when it is in fact old and stale, typically leading to
     data loss (by believing a stale PG is up to date).
   default: false
+  with_legacy: true
+# decay atime and hist histograms after how many objects go by
 - name: osd_agent_hist_halflife
   type: int
   level: advanced
   desc: halflife of agent atime and temp histograms
   default: 1000
+  with_legacy: true
+# decay atime and hist histograms after how many objects go by
 - name: osd_agent_slop
   type: float
   level: advanced
   desc: slop factor to avoid switching tiering flush and eviction mode
   default: 0.02
+  with_legacy: true
 - name: osd_uuid
   type: uuid
   level: advanced
   desc: uuid label for a new OSD
   flags:
   - create
+  with_legacy: true
 - name: osd_data
   type: str
   level: advanced
@@ -3123,6 +3515,7 @@ options:
   default: /var/lib/ceph/osd/$cluster-$id
   flags:
   - no_mon_update
+  with_legacy: true
 - name: osd_journal
   type: str
   level: advanced
@@ -3130,6 +3523,7 @@ options:
   default: /var/lib/ceph/osd/$cluster-$id/journal
   flags:
   - no_mon_update
+  with_legacy: true
 - name: osd_journal_size
   type: size
   level: advanced
@@ -3137,16 +3531,23 @@ options:
   default: 5_K
   flags:
   - create
+  with_legacy: true
 - name: osd_journal_flush_on_shutdown
   type: bool
   level: advanced
   desc: flush FileStore journal contents during clean OSD shutdown
   default: true
+  with_legacy: true
 - name: osd_compact_on_start
   type: bool
   level: advanced
   desc: compact OSD's object store's OMAP on start
   default: false
+# flags for specific control purpose during osd mount() process.
+# e.g., can be 1 to skip over replaying journal
+# or 2 to skip over mounting omap or 3 to skip over both.
+# This might be helpful in case the journal is totally corrupted
+# and we still want to bring the osd daemon back normally, etc.
 - name: osd_os_flags
   type: uint
   level: dev
@@ -3161,11 +3562,13 @@ options:
     when attempting to write to the cluster.
   default: 90
   min: 4
+  with_legacy: true
 - name: osd_max_pgls
   type: uint
   level: advanced
   desc: maximum number of results when listing objects in a pool
   default: 1_K
+  with_legacy: true
 - name: osd_client_message_size_cap
   type: size
   level: advanced
@@ -3173,11 +3576,13 @@ options:
   long_desc: If this value is exceeded, the OSD will not read any new client data
     off of the network until memory is freed.
   default: 500_M
+  with_legacy: true
 - name: osd_client_message_cap
   type: uint
   level: advanced
   desc: maximum number of in-flight client requests
   default: 0
+  with_legacy: true
 - name: osd_crush_update_weight_set
   type: bool
   level: advanced
@@ -3188,6 +3593,8 @@ options:
     will leave it to the balancer to (slowly, presumably) adjust weights to approach
     the new target value.
   default: true
+  with_legacy: true
+# 1 = host
 - name: osd_crush_chooseleaf_type
   type: int
   level: dev
@@ -3195,28 +3602,35 @@ options:
   default: 1
   flags:
   - cluster_create
+  with_legacy: true
+# try to use gmt for hitset archive names if all osds in cluster support it
 - name: osd_pool_use_gmt_hitset
   type: bool
   level: dev
   desc: use UTC for hitset timestamps
   long_desc: This setting only exists for compatibility with hammer (and older) clusters.
   default: true
+  with_legacy: true
 - name: osd_crush_update_on_start
   type: bool
   level: advanced
   desc: update OSD CRUSH location on startup
   default: true
+  with_legacy: true
 - name: osd_class_update_on_start
   type: bool
   level: advanced
   desc: set OSD device class on startup
   default: true
+  with_legacy: true
 - name: osd_crush_initial_weight
   type: float
   level: advanced
   desc: if >= 0, initial CRUSH weight for newly created OSDs
   long_desc: If this value is negative, the size of the OSD in TiB is used.
   default: -1
+  with_legacy: true
+# whether turn on fast read on the pool or not
 - name: osd_pool_default_ec_fast_read
   type: bool
   level: advanced
@@ -3224,6 +3638,7 @@ options:
   default: false
   services:
   - mon
+  with_legacy: true
 - name: osd_pool_default_crush_rule
   type: int
   level: advanced
@@ -3315,6 +3730,8 @@ options:
   - osd
   flags:
   - startup
+  with_legacy: true
+# Allows the "peered" state for recovery and backfill below min_size
 - name: osd_allow_recovery_below_min_size
   type: bool
   level: dev
@@ -3322,6 +3739,7 @@ options:
   default: true
   services:
   - osd
+  with_legacy: true
 - name: osd_pool_default_flags
   type: int
   level: dev
@@ -3329,6 +3747,8 @@ options:
   default: 0
   services:
   - mon
+  with_legacy: true
+# use new pg hashing to prevent pool/pg overlap
 - name: osd_pool_default_flag_hashpspool
   type: bool
   level: advanced
@@ -3336,6 +3756,8 @@ options:
   default: true
   services:
   - mon
+  with_legacy: true
+# pool can't be deleted
 - name: osd_pool_default_flag_nodelete
   type: bool
   level: advanced
@@ -3343,6 +3765,8 @@ options:
   default: false
   services:
   - mon
+  with_legacy: true
+# pool's pg and pgp num can't be changed
 - name: osd_pool_default_flag_nopgchange
   type: bool
   level: advanced
@@ -3350,6 +3774,8 @@ options:
   default: false
   services:
   - mon
+  with_legacy: true
+# pool's size and min size can't be changed
 - name: osd_pool_default_flag_nosizechange
   type: bool
   level: advanced
@@ -3357,6 +3783,7 @@ options:
   default: false
   services:
   - mon
+  with_legacy: true
 - name: osd_pool_default_hit_set_bloom_fpp
   type: float
   level: advanced
@@ -3365,30 +3792,40 @@ options:
   - mon
   see_also:
   - osd_tier_default_cache_hit_set_type
+  with_legacy: true
 - name: osd_pool_default_cache_target_dirty_ratio
   type: float
   level: advanced
   default: 0.4
+  with_legacy: true
 - name: osd_pool_default_cache_target_dirty_high_ratio
   type: float
   level: advanced
   default: 0.6
+  with_legacy: true
 - name: osd_pool_default_cache_target_full_ratio
   type: float
   level: advanced
   default: 0.8
+  with_legacy: true
+# seconds
 - name: osd_pool_default_cache_min_flush_age
   type: int
   level: advanced
   default: 0
+  with_legacy: true
+# seconds
 - name: osd_pool_default_cache_min_evict_age
   type: int
   level: advanced
   default: 0
+  with_legacy: true
+# max size to check for eviction
 - name: osd_pool_default_cache_max_evict_check_size
   type: int
   level: advanced
   default: 10
+  with_legacy: true
 - name: osd_pool_default_pg_autoscale_mode
   type: str
   level: advanced
@@ -3411,26 +3848,36 @@ options:
   - osd_heartbeat_grace
   flags:
   - runtime
+  with_legacy: true
+# min target size for a HitSet
 - name: osd_hit_set_min_size
   type: int
   level: advanced
   default: 1000
+  with_legacy: true
+# max target size for a HitSet
 - name: osd_hit_set_max_size
   type: int
   level: advanced
   default: 100000
+  with_legacy: true
+# rados namespace for hit_set tracking
 - name: osd_hit_set_namespace
   type: str
   level: advanced
   default: .ceph-internal
+  with_legacy: true
+# conservative default throttling values
 - name: osd_tier_promote_max_objects_sec
   type: uint
   level: advanced
   default: 25
+  with_legacy: true
 - name: osd_tier_promote_max_bytes_sec
   type: size
   level: advanced
   default: 5_M
+  with_legacy: true
 - name: osd_tier_default_cache_mode
   type: str
   level: advanced
@@ -3487,28 +3934,35 @@ options:
   default: 1
   flags:
   - startup
+  with_legacy: true
 - name: osd_map_dedup
   type: bool
   level: advanced
   default: true
+  with_legacy: true
 - name: osd_map_cache_size
   type: int
   level: advanced
   default: 50
+  with_legacy: true
 - name: osd_map_message_max
   type: int
   level: advanced
   desc: maximum number of OSDMaps to include in a single message
   default: 40
+  with_legacy: true
 - name: osd_map_message_max_bytes
   type: size
   level: advanced
   desc: maximum number of bytes worth of OSDMaps to include in a single message
   default: 10_M
+  with_legacy: true
+# cap on # of inc maps we send to peers, clients
 - name: osd_map_share_max_epochs
   type: int
   level: advanced
   default: 40
+  with_legacy: true
 - name: osd_pg_epoch_max_lag_factor
   type: float
   level: advanced
@@ -3520,30 +3974,39 @@ options:
   type: float
   level: dev
   default: 0
+  with_legacy: true
 - name: osd_inject_failure_on_pg_removal
   type: bool
   level: dev
   default: false
+  with_legacy: true
+# shutdown the OSD if stuatus flipping more than max_markdown_count times in recent max_markdown_period seconds
 - name: osd_max_markdown_period
   type: int
   level: advanced
   default: 10_min
+  with_legacy: true
 - name: osd_max_markdown_count
   type: int
   level: advanced
   default: 5
+  with_legacy: true
 - name: osd_op_pq_max_tokens_per_priority
   type: uint
   level: advanced
   default: 4_M
+  with_legacy: true
 - name: osd_op_pq_min_cost
   type: size
   level: advanced
   default: 64_K
+  with_legacy: true
+# preserve clone_overlap during recovery/migration
 - name: osd_recover_clone_overlap
   type: bool
   level: advanced
   default: true
+  with_legacy: true
 - name: osd_num_cache_shards
   type: size
   level: advanced
@@ -3557,6 +4020,7 @@ options:
   default: 0
   flags:
   - startup
+  with_legacy: true
 - name: osd_op_num_threads_per_shard_hdd
   type: int
   level: advanced
@@ -3565,6 +4029,7 @@ options:
   - osd_op_num_threads_per_shard
   flags:
   - startup
+  with_legacy: true
 - name: osd_op_num_threads_per_shard_ssd
   type: int
   level: advanced
@@ -3573,12 +4038,14 @@ options:
   - osd_op_num_threads_per_shard
   flags:
   - startup
+  with_legacy: true
 - name: osd_op_num_shards
   type: int
   level: advanced
   default: 0
   flags:
   - startup
+  with_legacy: true
 - name: osd_op_num_shards_hdd
   type: int
   level: advanced
@@ -3587,6 +4054,7 @@ options:
   - osd_op_num_shards
   flags:
   - startup
+  with_legacy: true
 - name: osd_op_num_shards_ssd
   type: int
   level: advanced
@@ -3595,12 +4063,20 @@ options:
   - osd_op_num_shards
   flags:
   - startup
+  with_legacy: true
 - name: osd_skip_data_digest
   type: bool
   level: dev
   desc: Do not store full-object checksums if the backend (bluestore) does its own
     checksums.  Only usable with all BlueStore OSDs.
   default: false
+# PrioritzedQueue (prio), Weighted Priority Queue (wpq ; default),
+# mclock_opclass, mclock_client, or debug_random. "mclock_opclass"
+# and "mclock_client" are based on the mClock/dmClock algorithm
+# (Gulati, et al. 2010). "mclock_opclass" prioritizes based on the
+# class the operation belongs to. "mclock_client" does the same but
+# also works to ienforce fairness between clients. "debug_random"
+# chooses among all four with equal probability.
 - name: osd_op_queue
   type: str
   level: advanced
@@ -3614,6 +4090,8 @@ options:
   - wpq
   - mclock_scheduler
   - debug_random
+  with_legacy: true
+# Min priority to go to strict queue. (low, high)
 - name: osd_op_queue_cut_off
   type: str
   level: advanced
@@ -3628,6 +4106,7 @@ options:
   - low
   - high
   - debug_random
+  with_legacy: true
 - name: osd_mclock_scheduler_client_res
   type: uint
   level: advanced
@@ -3820,14 +4299,20 @@ options:
   - custom
   flags:
   - runtime
+# do not assert on divergent_prior entries which aren't in the log and whose on-disk objects are newer
 - name: osd_ignore_stale_divergent_priors
   type: bool
   level: advanced
   default: false
+  with_legacy: true
+# Set to true for testing.  Users should NOT set this.
+# If set to true even after reading enough shards to
+# decode the object, any error will be reported.
 - name: osd_read_ec_check_for_errors
   type: bool
   level: advanced
   default: false
+  with_legacy: true
 # Only use clone_overlap for recovery if there are fewer than
 # osd_recover_clone_overlap_limit entries in the overlap set
 - name: osd_recover_clone_overlap_limit
@@ -3841,22 +4326,27 @@ options:
   level: dev
   desc: Feed a pullee, and force primary to pull a currently missing object from it
   default: -1
+  with_legacy: true
 - name: osd_backfill_scan_min
   type: int
   level: advanced
   default: 64
+  with_legacy: true
 - name: osd_backfill_scan_max
   type: int
   level: advanced
   default: 512
+  with_legacy: true
 - name: osd_op_thread_timeout
   type: int
   level: advanced
   default: 15
+  with_legacy: true
 - name: osd_op_thread_suicide_timeout
   type: int
   level: advanced
   default: 150
+  with_legacy: true
 - name: osd_recovery_sleep
   type: float
   level: advanced
@@ -3864,6 +4354,7 @@ options:
   default: 0
   flags:
   - runtime
+  with_legacy: true
 - name: osd_recovery_sleep_hdd
   type: float
   level: advanced
@@ -3871,6 +4362,7 @@ options:
   default: 0.1
   flags:
   - runtime
+  with_legacy: true
 - name: osd_recovery_sleep_ssd
   type: float
   level: advanced
@@ -3880,6 +4372,7 @@ options:
   - osd_recovery_sleep
   flags:
   - runtime
+  with_legacy: true
 - name: osd_recovery_sleep_hybrid
   type: float
   level: advanced
@@ -3895,6 +4388,7 @@ options:
   level: advanced
   desc: Time in seconds to sleep before next snap trim (overrides values below)
   default: 0
+  with_legacy: true
 - name: osd_snap_trim_sleep_hdd
   type: float
   level: advanced
@@ -3915,14 +4409,17 @@ options:
   type: bool
   level: advanced
   default: true
+  with_legacy: true
 - name: osd_command_thread_timeout
   type: int
   level: advanced
   default: 10_min
+  with_legacy: true
 - name: osd_command_thread_suicide_timeout
   type: int
   level: advanced
   default: 15_min
+  with_legacy: true
 - name: osd_heartbeat_interval
   type: int
   level: dev
@@ -3930,10 +4427,14 @@ options:
   default: 6
   min: 1
   max: 1_min
+  with_legacy: true
+# (seconds) how long before we decide a peer has failed
+# This setting is read by the MONs and OSDs and has to be set to a equal value in both settings of the configuration
 - name: osd_heartbeat_grace
   type: int
   level: advanced
   default: 20
+  with_legacy: true
 - name: osd_heartbeat_stale
   type: int
   level: advanced
@@ -3942,59 +4443,82 @@ options:
     them down. The primary benefit is that OSD doesn't need to keep a flood of blocked
     heartbeat messages around in memory.
   default: 10_min
+# minimum number of peers
 - name: osd_heartbeat_min_peers
   type: int
   level: advanced
   default: 10
+  with_legacy: true
+# prio the heartbeat tcp socket and set dscp as CS6 on it if true
 - name: osd_heartbeat_use_min_delay_socket
   type: bool
   level: advanced
   default: false
+  with_legacy: true
+# the minimum size of OSD heartbeat messages to send
 - name: osd_heartbeat_min_size
   type: size
   level: advanced
   desc: Minimum heartbeat packet size in bytes. Will add dummy payload if heartbeat
     packet is smaller than this.
   default: 2000
+  with_legacy: true
+# max number of parallel snap trims/pg
 - name: osd_pg_max_concurrent_snap_trims
   type: uint
   level: advanced
   default: 2
+  with_legacy: true
+# max number of trimming pgs
 - name: osd_max_trimming_pgs
   type: uint
   level: advanced
   default: 2
+  with_legacy: true
+# minimum number of peers that must be reachable to mark ourselves
+# back up after being wrongly marked down.
 - name: osd_heartbeat_min_healthy_ratio
   type: float
   level: advanced
   default: 0
+  with_legacy: true
+# (seconds) how often to ping monitor if no peers
 - name: osd_mon_heartbeat_interval
   type: int
   level: advanced
   default: 30
+  with_legacy: true
 - name: osd_mon_heartbeat_stat_stale
   type: int
   level: advanced
   desc: Stop reporting on heartbeat ping times not updated for this many seconds.
   long_desc: Stop reporting on old heartbeat information unless this is set to zero
   default: 1_hr
+# failures, up_thru, boot.
 - name: osd_mon_report_interval
   type: int
   level: advanced
   desc: Frequency of OSD reports to mon for peer failures, fullness status changes
   default: 5
+  with_legacy: true
+# max updates in flight
 - name: osd_mon_report_max_in_flight
   type: int
   level: advanced
   default: 2
+  with_legacy: true
+# (second) how often to send beacon message to monitor
 - name: osd_beacon_report_interval
   type: int
   level: advanced
   default: 5_min
+  with_legacy: true
+# report pg stats for any given pg at least this often
 - name: osd_pg_stat_report_interval_max
   type: int
   level: advanced
   default: 500
+  with_legacy: true
 - name: osd_mon_ack_timeout
   type: float
   level: advanced
@@ -4007,11 +4531,13 @@ options:
   type: float
   level: advanced
   default: 0.9
+# Max number of snap intervals to report to mgr in pg_stat_t
 - name: osd_max_snap_prune_intervals_per_epoch
   type: uint
   level: dev
   desc: Max number of snap intervals to report to mgr in pg_stat_t
   default: 512
+  with_legacy: true
 - name: osd_default_data_pool_replay_window
   type: int
   level: advanced
@@ -4020,10 +4546,12 @@ options:
   type: bool
   level: advanced
   default: false
+  with_legacy: true
 - name: osd_recovery_delay_start
   type: float
   level: advanced
   default: 0
+  with_legacy: true
 - name: osd_recovery_max_active
   type: uint
   level: advanced
@@ -4035,6 +4563,7 @@ options:
   - osd_recovery_max_active_ssd
   flags:
   - runtime
+  with_legacy: true
 - name: osd_recovery_max_active_hdd
   type: uint
   level: advanced
@@ -4046,6 +4575,7 @@ options:
   - osd_recovery_max_active_ssd
   flags:
   - runtime
+  with_legacy: true
 - name: osd_recovery_max_active_ssd
   type: uint
   level: advanced
@@ -4057,49 +4587,66 @@ options:
   - osd_recovery_max_active_hdd
   flags:
   - runtime
+  with_legacy: true
 - name: osd_recovery_max_single_start
   type: uint
   level: advanced
   default: 1
+  with_legacy: true
+# max size of push chunk
 - name: osd_recovery_max_chunk
   type: size
   level: advanced
   default: 8_M
+  with_legacy: true
+# max number of omap entries per chunk; 0 to disable limit
 - name: osd_recovery_max_omap_entries_per_chunk
   type: uint
   level: advanced
   default: 8096
+  with_legacy: true
+# max size of a COPYFROM chunk
 - name: osd_copyfrom_max_chunk
   type: size
   level: advanced
   default: 8_M
+  with_legacy: true
+# push cost per object
 - name: osd_push_per_object_cost
   type: size
   level: advanced
   default: 1000
+  with_legacy: true
+# max size of push message
 - name: osd_max_push_cost
   type: size
   level: advanced
   default: 8_M
+  with_legacy: true
+# max objects in single push op
 - name: osd_max_push_objects
   type: uint
   level: advanced
   default: 10
+  with_legacy: true
 - name: osd_max_scrubs
   type: int
   level: advanced
   desc: Maximum concurrent scrubs on a single OSD
   default: 1
+  with_legacy: true
 - name: osd_scrub_during_recovery
   type: bool
   level: advanced
   desc: Allow scrubbing when PGs on the OSD are undergoing recovery
   default: false
+  with_legacy: true
 - name: osd_repair_during_recovery
   type: bool
   level: advanced
   desc: Allow requested repairing when PGs on the OSD are undergoing recovery
   default: false
+  with_legacy: true
 - name: osd_scrub_begin_hour
   type: int
   level: advanced
@@ -4110,6 +4657,7 @@ options:
   - osd_scrub_end_hour
   min: 0
   max: 23
+  with_legacy: true
 - name: osd_scrub_end_hour
   type: int
   level: advanced
@@ -4120,6 +4668,7 @@ options:
   - osd_scrub_begin_hour
   min: 0
   max: 23
+  with_legacy: true
 - name: osd_scrub_begin_week_day
   type: int
   level: advanced
@@ -4131,6 +4680,7 @@ options:
   - osd_scrub_end_week_day
   min: 0
   max: 6
+  with_legacy: true
 - name: osd_scrub_end_week_day
   type: int
   level: advanced
@@ -4142,11 +4692,14 @@ options:
   - osd_scrub_begin_week_day
   min: 0
   max: 6
+  with_legacy: true
 - name: osd_scrub_load_threshold
   type: float
   level: advanced
   desc: Allow scrubbing when system load divided by number of CPUs is below this value
   default: 0.5
+  with_legacy: true
+# if load is low
 - name: osd_scrub_min_interval
   type: float
   level: advanced
@@ -4154,6 +4707,8 @@ options:
   default: 1_day
   see_also:
   - osd_scrub_max_interval
+  with_legacy: true
+# regardless of load
 - name: osd_scrub_max_interval
   type: float
   level: advanced
@@ -4161,6 +4716,8 @@ options:
   default: 7_day
   see_also:
   - osd_scrub_min_interval
+  with_legacy: true
+# randomize the scheduled scrub in the span of [min,min*(1+randomize_ratio))
 - name: osd_scrub_interval_randomize_ratio
   type: float
   level: advanced
@@ -4170,6 +4727,8 @@ options:
   default: 0.5
   see_also:
   - osd_scrub_min_interval
+  with_legacy: true
+# the probability to back off the scheduled scrub
 - name: osd_scrub_backoff_ratio
   type: float
   level: dev
@@ -4177,6 +4736,7 @@ options:
   long_desc: This is the precentage of ticks that do NOT schedule scrubs, 66% means
     that 1 out of 3 ticks will schedule scrubs
   default: 0.66
+  with_legacy: true
 - name: osd_scrub_chunk_min
   type: int
   level: advanced
@@ -4184,6 +4744,7 @@ options:
   default: 5
   see_also:
   - osd_scrub_chunk_max
+  with_legacy: true
 - name: osd_scrub_chunk_max
   type: int
   level: advanced
@@ -4191,11 +4752,15 @@ options:
   default: 25
   see_also:
   - osd_scrub_chunk_min
+  with_legacy: true
+# sleep between [deep]scrub ops
 - name: osd_scrub_sleep
   type: float
   level: advanced
   desc: Duration to inject a delay during scrubbing
   default: 0
+  with_legacy: true
+# more sleep between [deep]scrub ops
 - name: osd_scrub_extended_sleep
   type: float
   level: advanced
@@ -4206,11 +4771,15 @@ options:
   - osd_scrub_end_hour
   - osd_scrub_begin_week_day
   - osd_scrub_end_week_day
+  with_legacy: true
+# whether auto-repair inconsistencies upon deep-scrubbing
 - name: osd_scrub_auto_repair
   type: bool
   level: advanced
   desc: Automatically repair damaged objects detected during scrub
   default: false
+  with_legacy: true
+# only auto-repair when number of errors is below this threshold
 - name: osd_scrub_auto_repair_num_errors
   type: uint
   level: advanced
@@ -4218,6 +4787,7 @@ options:
   default: 5
   see_also:
   - osd_scrub_auto_repair
+  with_legacy: true
 - name: osd_scrub_max_preemptions
   type: uint
   level: advanced
@@ -4231,6 +4801,7 @@ options:
   level: advanced
   desc: Deep scrub each PG (i.e., verify data checksums) at least this often
   default: 7_day
+  with_legacy: true
 - name: osd_deep_scrub_randomize_ratio
   type: float
   level: advanced
@@ -4239,22 +4810,27 @@ options:
   long_desc: This prevents a deep scrub 'stampede' by spreading deep scrubs so they
     are uniformly distributed over the week
   default: 0.15
+  with_legacy: true
 - name: osd_deep_scrub_stride
   type: size
   level: advanced
   desc: Number of bytes to read from an object at a time during deep scrub
   default: 512_K
+  with_legacy: true
 - name: osd_deep_scrub_keys
   type: int
   level: advanced
   desc: Number of keys to read from an object at a time during deep scrub
   default: 1024
+  with_legacy: true
+# objects must be this old (seconds) before we update the whole-object digest on scrub
 - name: osd_deep_scrub_update_digest_min_age
   type: int
   level: advanced
   desc: Update overall object digest only if object was last modified longer ago than
     this
   default: 2_hr
+  with_legacy: true
 - name: osd_deep_scrub_large_omap_object_key_threshold
   type: uint
   level: advanced
@@ -4264,6 +4840,7 @@ options:
   - osd
   see_also:
   - osd_deep_scrub_large_omap_object_value_sum_threshold
+  with_legacy: true
 - name: osd_deep_scrub_large_omap_object_value_sum_threshold
   type: size
   level: advanced
@@ -4273,49 +4850,65 @@ options:
   - osd
   see_also:
   - osd_deep_scrub_large_omap_object_key_threshold
+  with_legacy: true
+# where rados plugins are stored
 - name: osd_class_dir
   type: str
   level: advanced
   default: @CMAKE_INSTALL_LIBDIR@/rados-classes
+  with_legacy: true
 - name: osd_open_classes_on_start
   type: bool
   level: advanced
   default: true
+  with_legacy: true
+# list of object classes allowed to be loaded (allow all: *)
 - name: osd_class_load_list
   type: str
   level: advanced
   default: cephfs hello journal lock log numops otp rbd refcount rgw rgw_gc timeindex
     user version cas cmpomap queue 2pc_queue fifo
+  with_legacy: true
+# list of object classes with default execute perm (allow all: *)
 - name: osd_class_default_list
   type: str
   level: advanced
   default: cephfs hello journal lock log numops otp rbd refcount rgw rgw_gc timeindex
     user version cas cmpomap queue 2pc_queue fifo
+  with_legacy: true
 - name: osd_check_for_log_corruption
   type: bool
   level: advanced
   default: false
+  with_legacy: true
 - name: osd_use_stale_snap
   type: bool
   level: advanced
   default: false
+  with_legacy: true
 - name: osd_rollback_to_cluster_snap
   type: str
   level: advanced
+  with_legacy: true
 - name: osd_default_notify_timeout
   type: uint
   level: advanced
   desc: default number of seconds after which notify propagation times out. used if
     a client has not specified other value
   default: 30
+  with_legacy: true
 - name: osd_kill_backfill_at
   type: int
   level: dev
   default: 0
+  with_legacy: true
+# Bounds how infrequently a new map epoch will be persisted for a pg
+# make this < map_cache_size!
 - name: osd_pg_epoch_persisted_max_stale
   type: uint
   level: advanced
   default: 40
+  with_legacy: true
 - name: osd_target_pg_log_entries_per_osd
   type: uint
   level: dev
@@ -4325,6 +4918,7 @@ options:
   see_also:
   - osd_max_pg_log_entries
   - osd_min_pg_log_entries
+  with_legacy: true
 - name: osd_min_pg_log_entries
   type: uint
   level: dev
@@ -4336,6 +4930,7 @@ options:
   - osd_max_pg_log_entries
   - osd_pg_log_dups_tracked
   - osd_target_pg_log_entries_per_osd
+  with_legacy: true
 - name: osd_max_pg_log_entries
   type: uint
   level: dev
@@ -4347,6 +4942,7 @@ options:
   - osd_min_pg_log_entries
   - osd_pg_log_dups_tracked
   - osd_target_pg_log_entries_per_osd
+  with_legacy: true
 - name: osd_pg_log_dups_tracked
   type: uint
   level: dev
@@ -4359,6 +4955,7 @@ options:
   see_also:
   - osd_min_pg_log_entries
   - osd_max_pg_log_entries
+  with_legacy: true
 - name: osd_object_clean_region_max_num_intervals
   type: int
   level: dev
@@ -4369,10 +4966,13 @@ options:
   default: 10
   services:
   - osd
+  with_legacy: true
+# max entries factor before force recovery
 - name: osd_force_recovery_pg_log_entries_factor
   type: float
   level: dev
   default: 1.3
+  with_legacy: true
 - name: osd_pg_log_trim_min
   type: uint
   level: dev
@@ -4382,6 +4982,7 @@ options:
   see_also:
   - osd_max_pg_log_entries
   - osd_min_pg_log_entries
+  with_legacy: true
 - name: osd_force_auth_primary_missing_objects
   type: uint
   level: advanced
@@ -4416,149 +5017,199 @@ options:
   see_also:
   - osd_min_pg_log_entries
   - osd_max_pg_log_entries
+  with_legacy: true
+# how many seconds old makes an op complaint-worthy
 - name: osd_op_complaint_time
   type: float
   level: advanced
   default: 30
+  with_legacy: true
 - name: osd_command_max_records
   type: int
   level: advanced
   default: 256
+  with_legacy: true
+# max peer osds to report that are blocking our progress
 - name: osd_max_pg_blocked_by
   type: uint
   level: advanced
   default: 16
+  with_legacy: true
 - name: osd_op_log_threshold
   type: int
   level: advanced
   default: 5
+  with_legacy: true
 - name: osd_backoff_on_unfound
   type: bool
   level: advanced
   default: true
+  with_legacy: true
+# [mainly for debug?] object unreadable/writeable
 - name: osd_backoff_on_degraded
   type: bool
   level: advanced
   default: false
+  with_legacy: true
+# [debug] pg peering
 - name: osd_backoff_on_peering
   type: bool
   level: advanced
   default: false
+  with_legacy: true
 - name: osd_debug_shutdown
   type: bool
   level: dev
   desc: Turn up debug levels during shutdown
   default: false
+  with_legacy: true
+# crash osd if client ignores a backoff; useful for debugging
 - name: osd_debug_crash_on_ignored_backoff
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: osd_debug_inject_dispatch_delay_probability
   type: float
   level: dev
   default: 0
+  with_legacy: true
 - name: osd_debug_inject_dispatch_delay_duration
   type: float
   level: dev
   default: 0.1
+  with_legacy: true
 - name: osd_debug_drop_ping_probability
   type: float
   level: dev
   default: 0
+  with_legacy: true
 - name: osd_debug_drop_ping_duration
   type: int
   level: dev
   default: 0
+  with_legacy: true
 - name: osd_debug_op_order
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: osd_debug_verify_missing_on_start
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: osd_debug_verify_snaps
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: osd_debug_verify_stray_on_activate
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: osd_debug_skip_full_check_in_backfill_reservation
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: osd_debug_reject_backfill_probability
   type: float
   level: dev
   default: 0
+  with_legacy: true
+# inject failure during copyfrom completion
 - name: osd_debug_inject_copyfrom_error
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: osd_debug_misdirected_ops
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: osd_debug_skip_full_check_in_recovery
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: osd_debug_random_push_read_error
   type: float
   level: dev
   default: 0
+  with_legacy: true
 - name: osd_debug_verify_cached_snaps
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: osd_debug_deep_scrub_sleep
   type: float
   level: dev
   desc: Inject an expensive sleep during deep scrub IO to make it easier to induce
     preemption
   default: 0
+  with_legacy: true
 - name: osd_debug_no_acting_change
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: osd_debug_no_purge_strays
   type: bool
   level: dev
   default: false
+  with_legacy: truen
 - name: osd_debug_pretend_recovery_active
   type: bool
   level: dev
   default: false
+  with_legacy: true
+# enable/disable OSD op tracking
 - name: osd_enable_op_tracker
   type: bool
   level: advanced
   default: true
+  with_legacy: true
+# The number of shards for holding the ops
 - name: osd_num_op_tracker_shard
   type: uint
   level: advanced
   default: 32
+  with_legacy: true
+# Max number of completed ops to track
 - name: osd_op_history_size
   type: uint
   level: advanced
   default: 20
+  with_legacy: true
+# Oldest completed op to track
 - name: osd_op_history_duration
   type: uint
   level: advanced
   default: 600
+  with_legacy: true
+# Max number of slow ops to track
 - name: osd_op_history_slow_op_size
   type: uint
   level: advanced
   default: 20
+  with_legacy: true
+# track the op if over this threshold
 - name: osd_op_history_slow_op_threshold
   type: float
   level: advanced
   default: 10
+  with_legacy: true
+# to adjust various transactions that batch smaller items
 - name: osd_target_transaction_size
   type: int
   level: advanced
   default: 30
+  with_legacy: true
+  with_legacy: true
 - name: osd_delete_sleep
   type: float
   level: advanced
@@ -4581,10 +5232,12 @@ options:
   desc: Time in seconds to sleep before next removal transaction when data is on HDD
     and journal is on SSD
   default: 1
+# what % full makes an OSD "full" (failsafe)
 - name: osd_failsafe_full_ratio
   type: float
   level: advanced
   default: 0.97
+  with_legacy: true
 - name: osd_fast_shutdown
   type: bool
   level: advanced
@@ -4593,6 +5246,7 @@ options:
     when it receives a SIGINT or SIGTERM or when shutting down for any other reason.  That
     slow shutdown is primarilyy useful for doing memory leak checking with valgrind.
   default: true
+  with_legacy: true
 - name: osd_fast_shutdown_notify_mon
   type: bool
   level: advanced
@@ -4603,124 +5257,169 @@ options:
   see_also:
   - osd_fast_shutdown
   - osd_mon_shutdown_timeout
+  with_legacy: true
+# immediately mark OSDs as down once they refuse to accept connections
 - name: osd_fast_fail_on_connection_refused
   type: bool
   level: advanced
   default: true
+  with_legacy: true
 - name: osd_pg_object_context_cache_count
   type: int
   level: advanced
   default: 64
+  with_legacy: true
+# true if LTTng-UST tracepoints should be enabled
 - name: osd_tracing
   type: bool
   level: advanced
   default: false
+  with_legacy: true
+# true if function instrumentation should use LTTng
 - name: osd_function_tracing
   type: bool
   level: advanced
   default: false
+  with_legacy: true
+# use fast info attr, if we can
 - name: osd_fast_info
   type: bool
   level: advanced
   default: true
+  with_legacy: true
+# determines whether PGLog::check() compares written out log to stored log
 - name: osd_debug_pg_log_writeout
   type: bool
   level: dev
   default: false
+  with_legacy: true
+# Max number of loop before we reset thread-pool's handle
 - name: osd_loop_before_reset_tphandle
   type: uint
   level: advanced
   default: 64
+  with_legacy: true
+# default timeout while caling WaitInterval on an empty queue
 - name: threadpool_default_timeout
   type: int
   level: advanced
   default: 1_min
+  with_legacy: true
+# default wait time for an empty queue before pinging the hb timeout
 - name: threadpool_empty_queue_max_wait
   type: int
   level: advanced
   default: 2
+  with_legacy: true
 - name: leveldb_log_to_ceph_log
   type: bool
   level: advanced
   default: true
+  with_legacy: true
 - name: leveldb_write_buffer_size
   type: size
   level: advanced
   default: 8_M
+  with_legacy: true
 - name: leveldb_cache_size
   type: size
   level: advanced
   default: 128_M
+  with_legacy: true
 - name: leveldb_block_size
   type: size
   level: advanced
   default: 0
+  with_legacy: true
 - name: leveldb_bloom_size
   type: int
   level: advanced
   default: 0
+  with_legacy: true
 - name: leveldb_max_open_files
   type: int
   level: advanced
   default: 0
+  with_legacy: true
 - name: leveldb_compression
   type: bool
   level: advanced
   default: true
+  with_legacy: true
 - name: leveldb_paranoid
   type: bool
   level: advanced
   default: false
+  with_legacy: true
 - name: leveldb_log
   type: str
   level: advanced
   default: /dev/null
+  with_legacy: true
 - name: leveldb_compact_on_mount
   type: bool
   level: advanced
   default: false
+  with_legacy: true
 - name: rocksdb_log_to_ceph_log
   type: bool
   level: advanced
   default: true
+  with_legacy: true
 - name: rocksdb_cache_size
   type: size
   level: advanced
   default: 512_M
   flags:
   - runtime
+  with_legacy: true
+# ratio of cache for row (vs block)
 - name: rocksdb_cache_row_ratio
   type: float
   level: advanced
   default: 0
+  with_legacy: true
+# rocksdb block cache shard bits, 4 bit -> 16 shards
 - name: rocksdb_cache_shard_bits
   type: int
   level: advanced
   default: 4
+  with_legacy: true
+# 'lru' or 'clock'
 - name: rocksdb_cache_type
   type: str
   level: advanced
   default: binned_lru
+  with_legacy: true
 - name: rocksdb_block_size
   type: size
   level: advanced
   default: 4_K
+  with_legacy: true
+# Enabling this will have 5-10% impact on performance for the stats collection
 - name: rocksdb_perf
   type: bool
   level: advanced
   default: false
+  with_legacy: true
+# For rocksdb, this behavior will be an overhead of 5%~10%, collected only rocksdb_perf is enabled.
 - name: rocksdb_collect_compaction_stats
   type: bool
   level: advanced
   default: false
+  with_legacy: true
+# For rocksdb, this behavior will be an overhead of 5%~10%, collected only rocksdb_perf is enabled.
 - name: rocksdb_collect_extended_stats
   type: bool
   level: advanced
   default: false
+  with_legacy: true
+# For rocksdb, this behavior will be an overhead of 5%~10%, collected only rocksdb_perf is enabled.
 - name: rocksdb_collect_memory_stats
   type: bool
   level: advanced
   default: false
+  with_legacy: true
 - name: rocksdb_delete_range_threshold
   type: uint
   level: advanced
@@ -4802,99 +5501,141 @@ options:
   type: str
   level: advanced
   default: write_buffer_size=33554432,compression=kNoCompression,level_compaction_dynamic_level_bytes=true
+  with_legacy: true
+# osd_*_priority adjust the relative priority of client io, recovery io,
+# snaptrim io, etc
+#
+# osd_*_priority determines the ratio of available io between client and
+# recovery.  Each option may be set between
+# 1..63.
 - name: osd_client_op_priority
   type: uint
   level: advanced
   default: 63
+  with_legacy: true
 - name: osd_recovery_op_priority
   type: uint
   level: advanced
   desc: Priority to use for recovery operations if not specified for the pool
   default: 3
+  with_legacy: true
 - name: osd_peering_op_priority
   type: uint
   level: dev
   default: 255
+  with_legacy: true
 - name: osd_snap_trim_priority
   type: uint
   level: advanced
   default: 5
+  with_legacy: true
 - name: osd_snap_trim_cost
   type: size
   level: advanced
   default: 1_M
+  with_legacy: true
 - name: osd_pg_delete_priority
   type: uint
   level: advanced
   default: 5
+  with_legacy: true
 - name: osd_pg_delete_cost
   type: size
   level: advanced
   default: 1_M
+  with_legacy: true
 - name: osd_scrub_priority
   type: uint
   level: advanced
   desc: Priority for scrub operations in work queue
   default: 5
+  with_legacy: true
 - name: osd_scrub_cost
   type: size
   level: advanced
   desc: Cost for scrub operations in work queue
   default: 50_M
+  with_legacy: true
+# set requested scrub priority higher than scrub priority to make the
+# requested scrubs jump the queue of scheduled scrubs
 - name: osd_requested_scrub_priority
   type: uint
   level: advanced
   default: 120
+  with_legacy: true
 - name: osd_recovery_priority
   type: uint
   level: advanced
   desc: Priority of recovery in the work queue
   long_desc: Not related to a pool's recovery_priority
   default: 5
+  with_legacy: true
+# set default cost equal to 20MB io
 - name: osd_recovery_cost
   type: size
   level: advanced
   default: 20_M
+  with_legacy: true
+# osd_recovery_op_warn_multiple scales the normal warning threshold,
+# osd_op_complaint_time, so that slow recovery ops won't cause noise
 - name: osd_recovery_op_warn_multiple
   type: uint
   level: advanced
   default: 16
+  with_legacy: true
+# Max time to wait between notifying mon of shutdown and shutting down
 - name: osd_mon_shutdown_timeout
   type: float
   level: advanced
   default: 5
+  with_legacy: true
+# crash if the OSD has stray PG refs on shutdown
 - name: osd_shutdown_pgref_assert
   type: bool
   level: advanced
   default: false
+  with_legacy: true
+# OSD's maximum object size
 - name: osd_max_object_size
   type: size
   level: advanced
   default: 128_M
+  with_legacy: true
+# max rados object name len
 - name: osd_max_object_name_len
   type: uint
   level: advanced
   default: 2_K
+  with_legacy: true
+# max rados object namespace len
 - name: osd_max_object_namespace_len
   type: uint
   level: advanced
   default: 256
+  with_legacy: true
+# max rados attr name len; cannot go higher than 100 chars for file system backends
 - name: osd_max_attr_name_len
   type: uint
   level: advanced
   default: 100
+  with_legacy: true
 - name: osd_max_attr_size
   type: uint
   level: advanced
   default: 0
+  with_legacy: true
 - name: osd_max_omap_entries_per_request
   type: uint
   level: advanced
   default: 1_K
+  with_legacy: true
 - name: osd_max_omap_bytes_per_request
   type: size
   level: advanced
   default: 1_G
+  with_legacy: true
+# osd_recovery_op_warn_multiple scales the normal warning threshold,
+# osd_op_complaint_time, so that slow recovery ops won't cause noise
 - name: osd_max_write_op_reply_len
   type: size
   level: advanced
@@ -4902,6 +5643,7 @@ options:
   long_desc: This value caps the amount of data (per op; a request may have many ops)
     that will be sent back to the client and recorded in the PG log.
   default: 32
+  with_legacy: true
 - name: osd_objectstore
   type: str
   level: advanced
@@ -4914,42 +5656,56 @@ options:
   - kstore
   flags:
   - create
+  with_legacy: true
+# true if LTTng-UST tracepoints should be enabled
 - name: osd_objectstore_tracing
   type: bool
   level: advanced
   default: false
+  with_legacy: true
 - name: osd_objectstore_fuse
   type: bool
   level: advanced
   default: false
+  with_legacy: true
 - name: osd_bench_small_size_max_iops
   type: uint
   level: advanced
   default: 100
+  with_legacy: true
 - name: osd_bench_large_size_max_throughput
   type: size
   level: advanced
   default: 100_M
+  with_legacy: true
 - name: osd_bench_max_block_size
   type: size
   level: advanced
   default: 64_M
+  with_legacy: true
+# duration of 'osd bench', capped at 30s to avoid triggering timeouts
 - name: osd_bench_duration
   type: uint
   level: advanced
   default: 30
+  with_legacy: true
+# create a blkin trace for all osd requests
 - name: osd_blkin_trace_all
   type: bool
   level: advanced
   default: false
+  with_legacy: true
+# create a blkin trace for all objecter requests
 - name: osdc_blkin_trace_all
   type: bool
   level: advanced
   default: false
+  with_legacy: true
 - name: osd_discard_disconnected_ops
   type: bool
   level: advanced
   default: true
+  with_legacy: true
 - name: osd_memory_target
   type: size
   level: basic
@@ -5020,14 +5776,17 @@ options:
   type: size
   level: advanced
   default: 1_G
+  with_legacy: true
 - name: memstore_page_set
   type: bool
   level: advanced
   default: false
+  with_legacy: true
 - name: memstore_page_size
   type: size
   level: advanced
   default: 64_K
+  with_legacy: true
 - name: memstore_debug_omit_block_device_write
   type: bool
   level: dev
@@ -5035,66 +5794,88 @@ options:
   default: false
   see_also:
   - bluestore_debug_omit_block_device_write
+  with_legacy: true
 - name: objectstore_blackhole
   type: bool
   level: advanced
   default: false
+  with_legacy: true
 - name: bdev_debug_inflight_ios
   type: bool
   level: dev
   default: false
+  with_legacy: true
+# if N>0, then ~ 1/N IOs will complete before we crash on flush
 - name: bdev_inject_crash
   type: int
   level: dev
   default: 0
+  with_legacy: true
+# wait N more seconds on flush
 - name: bdev_inject_crash_flush_delay
   type: int
   level: dev
   default: 2
+  with_legacy: true
 - name: bdev_aio
   type: bool
   level: advanced
   default: true
+  with_legacy: true
+# milliseconds
 - name: bdev_aio_poll_ms
   type: int
   level: advanced
   default: 250
+  with_legacy: true
 - name: bdev_aio_max_queue_depth
   type: int
   level: advanced
   default: 1024
+  with_legacy: true
 - name: bdev_aio_reap_max
   type: int
   level: advanced
   default: 16
+  with_legacy: true
 - name: bdev_block_size
   type: size
   level: advanced
   default: 4_K
+  with_legacy: true
 - name: bdev_debug_aio
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: bdev_debug_aio_suicide_timeout
   type: float
   level: dev
   default: 1_min
+  with_legacy: true
 - name: bdev_debug_aio_log_age
   type: float
   level: dev
   default: 5
+  with_legacy: true
+# if yes, osd will unbind all NVMe devices from kernel driver and bind them
+# to the uio_pci_generic driver. The purpose is to prevent the case where
+# NVMe driver is loaded while osd is running.
 - name: bdev_nvme_unbind_from_kernel
   type: bool
   level: advanced
   default: false
+  with_legacy: true
 - name: bdev_enable_discard
   type: bool
   level: advanced
   default: false
+  with_legacy: true
 - name: bdev_async_discard
   type: bool
   level: advanced
   default: false
+  with_legacy: true
 - name: bdev_flock_retry_interval
   type: float
   level: advanced
@@ -5112,39 +5893,54 @@ options:
   level: advanced
   desc: Allocation unit size for DB and WAL devices
   default: 1_M
+  with_legacy: true
 - name: bluefs_shared_alloc_size
   type: size
   level: advanced
   desc: Allocation unit size for primary/shared device
   default: 64_K
+  with_legacy: true
 - name: bluefs_max_prefetch
   type: size
   level: advanced
   default: 1_M
+  with_legacy: true
+# alloc when we get this low
 - name: bluefs_min_log_runway
   type: size
   level: advanced
   default: 1_M
+  with_legacy: true
+# alloc this much at a time
 - name: bluefs_max_log_runway
   type: size
   level: advanced
   default: 4_M
+  with_legacy: true
+# before we consider
 - name: bluefs_log_compact_min_ratio
   type: float
   level: advanced
   default: 5
+  with_legacy: true
+# before we consider
 - name: bluefs_log_compact_min_size
   type: size
   level: advanced
   default: 16_M
+  with_legacy: true
+# ignore flush until its this big
 - name: bluefs_min_flush_size
   type: size
   level: advanced
   default: 512_K
+  with_legacy: true
+# sync or async log compaction
 - name: bluefs_compact_log_sync
   type: bool
   level: advanced
   default: false
+  with_legacy: true
 - name: bluefs_buffered_io
   type: bool
   level: advanced
@@ -5155,10 +5951,12 @@ options:
     enough to hold blocks from the compressed SST files itself, they can be read from
     page cache instead of from the disk.
   default: true
+  with_legacy: true
 - name: bluefs_sync_write
   type: bool
   level: advanced
   default: false
+  with_legacy: true
 - name: bluefs_allocator
   type: str
   level: dev
@@ -5168,11 +5966,13 @@ options:
   - stupid
   - avl
   - hybrid
+  with_legacy: true
 - name: bluefs_log_replay_check_allocations
   type: bool
   level: advanced
   desc: Enables checks for allocations consistency during log replay
   default: true
+  with_legacy: true
 - name: bluefs_replay_recovery
   type: bool
   level: dev
@@ -5181,10 +5981,12 @@ options:
     unreadable. This options enables heuristics that scans devices for missing data.
     DO NOT ENABLE BY DEFAULT
   default: false
+  with_legacy: true
 - name: bluefs_replay_recovery_disable_compact
   type: bool
   level: advanced
   default: false
+  with_legacy: true
 - name: bluefs_check_for_zeros
   type: bool
   level: dev
@@ -5197,6 +5999,7 @@ options:
   - bluestore_retry_disk_reads
   flags:
   - runtime
+  with_legacy: true
 - name: bluestore_bluefs
   type: bool
   level: dev
@@ -5207,6 +6010,8 @@ options:
   default: true
   flags:
   - create
+  with_legacy: true
+# mirror to normal Env for debug
 - name: bluestore_bluefs_env_mirror
   type: bool
   level: dev
@@ -5214,6 +6019,7 @@ options:
   default: false
   flags:
   - create
+  with_legacy: true
 - name: bluestore_bluefs_min
   type: size
   level: advanced
@@ -5259,6 +6065,7 @@ options:
   level: advanced
   desc: How frequently (in seconds) to dump allocator onBlueFS space allocation failure
   default: 0
+  with_legacy: true
 - name: bluestore_spdk_mem
   type: size
   level: dev
@@ -5284,12 +6091,19 @@ options:
   level: dev
   desc: Time period to wait if there is no completed I/O from polling
   default: 5
+# If you want to use spdk driver, you need to specify NVMe serial number here
+# with "spdk:" prefix.
+# Users can use 'lspci -vvv -d 8086:0953 | grep "Device Serial Number"' to
+# get the serial number of Intel(R) Fultondale NVMe controllers.
+# Example:
+# bluestore_block_path = spdk:55cd2e404bd73932
 - name: bluestore_block_path
   type: str
   level: dev
   desc: Path to block device/file
   flags:
   - create
+  with_legacy: true
 - name: bluestore_block_size
   type: size
   level: dev
@@ -5297,6 +6111,7 @@ options:
   default: 100_G
   flags:
   - create
+  with_legacy: true
 - name: bluestore_block_create
   type: bool
   level: dev
@@ -5307,12 +6122,15 @@ options:
   - bluestore_block_size
   flags:
   - create
+  with_legacy: true
 - name: bluestore_block_db_path
   type: str
   level: dev
   desc: Path for db block device
   flags:
   - create
+  with_legacy: true
+# rocksdb ssts (hot/warm)
 - name: bluestore_block_db_size
   type: uint
   level: dev
@@ -5320,6 +6138,7 @@ options:
   default: 0
   flags:
   - create
+  with_legacy: true
 - name: bluestore_block_db_create
   type: bool
   level: dev
@@ -5330,12 +6149,15 @@ options:
   - bluestore_block_db_size
   flags:
   - create
+  with_legacy: true
 - name: bluestore_block_wal_path
   type: str
   level: dev
   desc: Path to block device/file backing bluefs wal
   flags:
   - create
+  with_legacy: true
+# rocksdb wal
 - name: bluestore_block_wal_size
   type: size
   level: dev
@@ -5343,6 +6165,7 @@ options:
   default: 96_M
   flags:
   - create
+  with_legacy: true
 - name: bluestore_block_wal_create
   type: bool
   level: dev
@@ -5353,6 +6176,8 @@ options:
   - bluestore_block_wal_size
   flags:
   - create
+  with_legacy: true
+# whether preallocate space if block/db_path/wal_path is file rather that block device.
 - name: bluestore_block_preallocate_file
   type: bool
   level: dev
@@ -5360,6 +6185,7 @@ options:
   default: false
   flags:
   - create
+  with_legacy: true
 - name: bluestore_ignore_data_csum
   type: bool
   level: dev
@@ -5367,6 +6193,7 @@ options:
   default: false
   flags:
   - runtime
+  with_legacy: true
 - name: bluestore_csum_type
   type: str
   level: advanced
@@ -5383,6 +6210,7 @@ options:
   - xxhash64
   flags:
   - runtime
+  with_legacy: true
 - name: bluestore_retry_disk_reads
   type: uint
   level: advanced
@@ -5394,6 +6222,7 @@ options:
   max: 255
   flags:
   - runtime
+  with_legacy: true
 - name: bluestore_min_alloc_size
   type: uint
   level: advanced
@@ -5407,6 +6236,7 @@ options:
   default: 0
   flags:
   - create
+  with_legacy: true
 - name: bluestore_min_alloc_size_hdd
   type: size
   level: advanced
@@ -5416,6 +6246,7 @@ options:
   - bluestore_min_alloc_size
   flags:
   - create
+  with_legacy: true
 - name: bluestore_min_alloc_size_ssd
   type: size
   level: advanced
@@ -5425,6 +6256,7 @@ options:
   - bluestore_min_alloc_size
   flags:
   - create
+  with_legacy: true
 - name: bluestore_max_alloc_size
   type: size
   level: advanced
@@ -5432,6 +6264,7 @@ options:
   default: 0
   flags:
   - create
+  with_legacy: true
 - name: bluestore_prefer_deferred_size
   type: size
   level: advanced
@@ -5442,6 +6275,7 @@ options:
   default: 0
   flags:
   - runtime
+  with_legacy: true
 - name: bluestore_prefer_deferred_size_hdd
   type: size
   level: advanced
@@ -5451,6 +6285,7 @@ options:
   - bluestore_prefer_deferred_size
   flags:
   - runtime
+  with_legacy: true
 - name: bluestore_prefer_deferred_size_ssd
   type: size
   level: advanced
@@ -5460,6 +6295,7 @@ options:
   - bluestore_prefer_deferred_size
   flags:
   - runtime
+  with_legacy: true
 - name: bluestore_compression_mode
   type: str
   level: advanced
@@ -5476,6 +6312,7 @@ options:
   - force
   flags:
   - runtime
+  with_legacy: true
 - name: bluestore_compression_algorithm
   type: str
   level: advanced
@@ -5492,6 +6329,7 @@ options:
   - lz4
   flags:
   - runtime
+  with_legacy: true
 - name: bluestore_compression_min_blob_size
   type: size
   level: advanced
@@ -5501,6 +6339,7 @@ options:
   default: 0
   flags:
   - runtime
+  with_legacy: true
 - name: bluestore_compression_min_blob_size_hdd
   type: size
   level: advanced
@@ -5510,6 +6349,7 @@ options:
   - bluestore_compression_min_blob_size
   flags:
   - runtime
+  with_legacy: true
 - name: bluestore_compression_min_blob_size_ssd
   type: size
   level: advanced
@@ -5520,6 +6360,7 @@ options:
   - bluestore_compression_min_blob_size
   flags:
   - runtime
+  with_legacy: true
 - name: bluestore_compression_max_blob_size
   type: size
   level: advanced
@@ -5529,6 +6370,7 @@ options:
   default: 0
   flags:
   - runtime
+  with_legacy: true
 - name: bluestore_compression_max_blob_size_hdd
   type: size
   level: advanced
@@ -5538,6 +6380,7 @@ options:
   - bluestore_compression_max_blob_size
   flags:
   - runtime
+  with_legacy: true
 - name: bluestore_compression_max_blob_size_ssd
   type: size
   level: advanced
@@ -5548,18 +6391,25 @@ options:
   - bluestore_compression_max_blob_size
   flags:
   - runtime
+  with_legacy: true
+# Specifies minimum expected amount of saved allocation units
+# per single blob to enable compressed blobs garbage collection
 - name: bluestore_gc_enable_blob_threshold
   type: int
   level: dev
   default: 0
   flags:
   - runtime
+  with_legacy: true
+# Specifies minimum expected amount of saved allocation units
+# per all blobsb to enable compressed blobs garbage collection
 - name: bluestore_gc_enable_total_threshold
   type: int
   level: dev
   default: 0
   flags:
   - runtime
+  with_legacy: true
 - name: bluestore_max_blob_size
   type: size
   level: dev
@@ -5570,6 +6420,7 @@ options:
   default: 0
   flags:
   - runtime
+  with_legacy: true
 - name: bluestore_max_blob_size_hdd
   type: size
   level: dev
@@ -5578,6 +6429,7 @@ options:
   - bluestore_max_blob_size
   flags:
   - runtime
+  with_legacy: true
 - name: bluestore_max_blob_size_ssd
   type: size
   level: dev
@@ -5586,6 +6438,10 @@ options:
   - bluestore_max_blob_size
   flags:
   - runtime
+  with_legacy: true
+# Require the net gain of compression at least to be at this ratio,
+# otherwise we don't compress.
+# And ask for compressing at least 12.5%(1/8) off, by default.
 - name: bluestore_compression_required_ratio
   type: float
   level: advanced
@@ -5595,42 +6451,50 @@ options:
   default: 0.875
   flags:
   - runtime
+  with_legacy: true
 - name: bluestore_extent_map_shard_max_size
   type: size
   level: dev
   desc: Max size (bytes) for a single extent map shard before splitting
   default: 1200
+  with_legacy: true
 - name: bluestore_extent_map_shard_target_size
   type: size
   level: dev
   desc: Target size (bytes) for a single extent map shard
   default: 500
+  with_legacy: true
 - name: bluestore_extent_map_shard_min_size
   type: size
   level: dev
   desc: Min size (bytes) for a single extent map shard before merging
   default: 150
+  with_legacy: true
 - name: bluestore_extent_map_shard_target_size_slop
   type: float
   level: dev
   desc: Ratio above/below target for a shard when trying to align to an existing extent
     or blob boundary
   default: 0.2
+  with_legacy: true
 - name: bluestore_extent_map_inline_shard_prealloc_size
   type: size
   level: dev
   desc: Preallocated buffer for inline shards
   default: 256
+  with_legacy: true
 - name: bluestore_cache_trim_interval
   type: float
   level: advanced
   desc: How frequently we trim the bluestore cache
   default: 0.05
+  with_legacy: true
 - name: bluestore_cache_trim_max_skip_pinned
   type: uint
   level: dev
   desc: Max pinned cache entries we consider before giving up
   default: 64
+  with_legacy: true
 - name: bluestore_cache_type
   type: str
   level: dev
@@ -5639,16 +6503,19 @@ options:
   enum_values:
   - 2q
   - lru
+  with_legacy: true
 - name: bluestore_2q_cache_kin_ratio
   type: float
   level: dev
   desc: 2Q paper suggests .5
   default: 0.5
+  with_legacy: true
 - name: bluestore_2q_cache_kout_ratio
   type: float
   level: dev
   desc: 2Q paper suggests .5
   default: 0.5
+  with_legacy: true
 - name: bluestore_cache_size
   type: size
   level: dev
@@ -5656,6 +6523,7 @@ options:
   long_desc: This includes data and metadata cached by BlueStore as well as memory
     devoted to rocksdb's cache(s).
   default: 0
+  with_legacy: true
 - name: bluestore_cache_size_hdd
   type: size
   level: dev
@@ -5663,6 +6531,7 @@ options:
   default: 1_G
   see_also:
   - bluestore_cache_size
+  with_legacy: true
 - name: bluestore_cache_size_ssd
   type: size
   level: dev
@@ -5670,6 +6539,7 @@ options:
   default: 3_G
   see_also:
   - bluestore_cache_size
+  with_legacy: true
 - name: bluestore_cache_meta_ratio
   type: float
   level: dev
@@ -5677,6 +6547,7 @@ options:
   default: 0.4
   see_also:
   - bluestore_cache_size
+  with_legacy: true
 - name: bluestore_cache_kv_ratio
   type: float
   level: dev
@@ -5684,6 +6555,7 @@ options:
   default: 0
   see_also:
   - bluestore_cache_size
+  with_legacy: true
 - name: bluestore_cache_kv_onode_ratio
   type: float
   level: dev
@@ -5711,6 +6583,7 @@ options:
   level: dev
   desc: The period (in second) for logging allocation statistics.
   default: 1_day
+  with_legacy: true
 - name: bluestore_kvbackend
   type: str
   level: dev
@@ -5718,6 +6591,7 @@ options:
   default: rocksdb
   flags:
   - create
+  with_legacy: true
 - name: bluestore_allocator
   type: str
   level: advanced
@@ -5730,40 +6604,48 @@ options:
   - avl
   - hybrid
   - zoned
+  with_legacy: true
 - name: bluestore_freelist_blocks_per_key
   type: size
   level: dev
   desc: Block (and bits) per database key
   default: 128
+  with_legacy: true
 - name: bluestore_bitmapallocator_blocks_per_zone
   type: size
   level: dev
   default: 1_K
+  with_legacy: true
 - name: bluestore_bitmapallocator_span_size
   type: size
   level: dev
   default: 1_K
+  with_legacy: true
 - name: bluestore_max_deferred_txc
   type: uint
   level: advanced
   desc: Max transactions with deferred writes that can accumulate before we force
     flush deferred writes
   default: 32
+  with_legacy: true
 - name: bluestore_max_defer_interval
   type: float
   level: advanced
   desc: max duration to force deferred submit
   default: 3
+  with_legacy: true
 - name: bluestore_rocksdb_options
   type: str
   level: advanced
   desc: Full set of rocksdb settings to override
   default: compression=kNoCompression,max_write_buffer_number=4,min_write_buffer_number_to_merge=1,recycle_log_file_num=4,write_buffer_size=268435456,writable_file_max_buffer_size=0,compaction_readahead_size=2097152,max_background_compactions=2,max_total_wal_size=1073741824
+  with_legacy: true
 - name: bluestore_rocksdb_options_annex
   type: str
   level: advanced
   desc: An addition to bluestore_rocksdb_options. Allows setting rocksdb options without
     repeating the existing defaults.
+  with_legacy: true
 - name: bluestore_rocksdb_cf
   type: bool
   level: advanced
@@ -5801,41 +6683,49 @@ options:
   level: dev
   desc: Run fsck at mount
   default: false
+  with_legacy: true
 - name: bluestore_fsck_on_mount_deep
   type: bool
   level: dev
   desc: Run deep fsck at mount when bluestore_fsck_on_mount is set to true
   default: false
+  with_legacy: true
 - name: bluestore_fsck_quick_fix_on_mount
   type: bool
   level: dev
   desc: Do quick-fix for the store at mount
   default: false
+  with_legacy: true
 - name: bluestore_fsck_on_umount
   type: bool
   level: dev
   desc: Run fsck at umount
   default: false
+  with_legacy: true
 - name: bluestore_fsck_on_umount_deep
   type: bool
   level: dev
   desc: Run deep fsck at umount when bluestore_fsck_on_umount is set to true
   default: false
+  with_legacy: true
 - name: bluestore_fsck_on_mkfs
   type: bool
   level: dev
   desc: Run fsck after mkfs
   default: true
+  with_legacy: true
 - name: bluestore_fsck_on_mkfs_deep
   type: bool
   level: dev
   desc: Run deep fsck after mkfs
   default: false
+  with_legacy: true
 - name: bluestore_sync_submit_transaction
   type: bool
   level: dev
   desc: Try to submit metadata transaction to rocksdb in queuing thread context
   default: false
+  with_legacy: true
 - name: bluestore_fsck_read_bytes_cap
   type: size
   level: advanced
@@ -5843,11 +6733,13 @@ options:
   default: 64_M
   flags:
   - runtime
+  with_legacy: true
 - name: bluestore_fsck_quick_fix_threads
   type: int
   level: advanced
   desc: Number of additional threads to perform quick-fix (shallow fsck) command
   default: 2
+  with_legacy: true
 - name: bluestore_throttle_bytes
   type: size
   level: advanced
@@ -5855,6 +6747,7 @@ options:
   default: 64_M
   flags:
   - runtime
+  with_legacy: true
 - name: bluestore_throttle_deferred_bytes
   type: size
   level: advanced
@@ -5862,6 +6755,7 @@ options:
   default: 128_M
   flags:
   - runtime
+  with_legacy: true
 - name: bluestore_throttle_cost_per_io
   type: size
   level: advanced
@@ -5869,6 +6763,7 @@ options:
   default: 0
   flags:
   - runtime
+  with_legacy: true
 - name: bluestore_throttle_cost_per_io_hdd
   type: uint
   level: advanced
@@ -5878,6 +6773,7 @@ options:
   - bluestore_throttle_cost_per_io
   flags:
   - runtime
+  with_legacy: true
 - name: bluestore_throttle_cost_per_io_ssd
   type: uint
   level: advanced
@@ -5887,6 +6783,7 @@ options:
   - bluestore_throttle_cost_per_io
   flags:
   - runtime
+  with_legacy: true
 - name: bluestore_deferred_batch_ops
   type: uint
   level: advanced
@@ -5896,6 +6793,7 @@ options:
   max: 65535
   flags:
   - runtime
+  with_legacy: true
 - name: bluestore_deferred_batch_ops_hdd
   type: uint
   level: advanced
@@ -5907,6 +6805,7 @@ options:
   max: 65535
   flags:
   - runtime
+  with_legacy: true
 - name: bluestore_deferred_batch_ops_ssd
   type: uint
   level: advanced
@@ -5918,16 +6817,19 @@ options:
   max: 65535
   flags:
   - runtime
+  with_legacy: true
 - name: bluestore_nid_prealloc
   type: int
   level: dev
   desc: Number of unique object ids to preallocate at a time
   default: 1024
+  with_legacy: true
 - name: bluestore_blobid_prealloc
   type: uint
   level: dev
   desc: Number of unique blob ids to preallocate at a time
   default: 10_K
+  with_legacy: true
 - name: bluestore_clone_cow
   type: bool
   level: advanced
@@ -5936,6 +6838,7 @@ options:
   default: true
   flags:
   - runtime
+  with_legacy: true
 - name: bluestore_default_buffered_read
   type: bool
   level: advanced
@@ -5943,6 +6846,7 @@ options:
   default: true
   flags:
   - runtime
+  with_legacy: true
 - name: bluestore_default_buffered_write
   type: bool
   level: advanced
@@ -5950,124 +6854,151 @@ options:
   default: false
   flags:
   - runtime
+  with_legacy: true
 - name: bluestore_debug_no_reuse_blocks
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: bluestore_debug_small_allocations
   type: int
   level: dev
   default: 0
+  with_legacy: true
 - name: bluestore_debug_too_many_blobs_threshold
   type: int
   level: dev
   default: 24576
+  with_legacy: true
 - name: bluestore_debug_freelist
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: bluestore_debug_prefill
   type: float
   level: dev
   desc: simulate fragmentation
   default: 0
+  with_legacy: true
 - name: bluestore_debug_prefragment_max
   type: size
   level: dev
   default: 1_M
+  with_legacy: true
 - name: bluestore_debug_inject_read_err
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: bluestore_debug_randomize_serial_transaction
   type: int
   level: dev
   default: 0
+  with_legacy: true
 - name: bluestore_debug_omit_block_device_write
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: bluestore_debug_fsck_abort
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: bluestore_debug_omit_kv_commit
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: bluestore_debug_permit_any_bdev_label
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: bluestore_debug_random_read_err
   type: float
   level: dev
   default: 0
+  with_legacy: true
 - name: bluestore_debug_inject_bug21040
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: bluestore_debug_inject_csum_err_probability
   type: float
   level: dev
   desc: inject crc verification errors into bluestore device reads
   default: 0
+  with_legacy: true
 - name: bluestore_fsck_error_on_no_per_pool_stats
   type: bool
   level: advanced
   desc: Make fsck error (instead of warn) when bluestore lacks per-pool stats, e.g.,
     after an upgrade
   default: false
+  with_legacy: true
 - name: bluestore_warn_on_bluefs_spillover
   type: bool
   level: advanced
   desc: Enable health indication on bluefs slow device usage
   default: true
+  with_legacy: true
 - name: bluestore_warn_on_legacy_statfs
   type: bool
   level: advanced
   desc: Enable health indication on lack of per-pool statfs reporting from bluestore
   default: true
+  with_legacy: true
 - name: bluestore_warn_on_spurious_read_errors
   type: bool
   level: advanced
   desc: Enable health indication when spurious read errors are observed by OSD
   default: true
+  with_legacy: true
 - name: bluestore_fsck_error_on_no_per_pool_omap
   type: bool
   level: advanced
   desc: Make fsck error (instead of warn) when objects without per-pool omap are found
   default: false
+  with_legacy: true
 - name: bluestore_fsck_error_on_no_per_pg_omap
   type: bool
   level: advanced
   desc: Make fsck error (instead of warn) when objects without per-pg omap are found
   default: false
+  with_legacy: true
 - name: bluestore_warn_on_no_per_pool_omap
   type: bool
   level: advanced
   desc: Enable health indication on lack of per-pool omap
   default: true
+  with_legacy: true
 - name: bluestore_warn_on_no_per_pg_omap
   type: bool
   level: advanced
   desc: Enable health indication on lack of per-pg omap
   default: false
+  with_legacy: true
 - name: bluestore_log_op_age
   type: float
   level: advanced
   desc: log operation if it's slower than this age (seconds)
   default: 5
+  with_legacy: true
 - name: bluestore_log_omap_iterator_age
   type: float
   level: advanced
   desc: log omap iteration operation if it's slower than this age (seconds)
   default: 5
+  with_legacy: true
 - name: bluestore_log_collection_list_age
   type: float
   level: advanced
   desc: log collection list operation if it's slower than this age (seconds)
   default: 1_min
+  with_legacy: true
 - name: bluestore_debug_enforce_settings
   type: str
   level: dev
@@ -6080,6 +7011,7 @@ options:
   - default
   - hdd
   - ssd
+  with_legacy: true
 - name: bluestore_avl_alloc_bf_threshold
   type: uint
   level: dev
@@ -6129,6 +7061,7 @@ options:
   - rocksdb_original
   - use_some_extra
   - fit_to_fast
+  with_legacy: true
 - name: bluestore_volume_selection_reserved_factor
   type: float
   level: advanced
@@ -6138,6 +7071,7 @@ options:
   default: 2
   flags:
   - startup
+  with_legacy: true
 - name: bluestore_volume_selection_reserved
   type: int
   level: advanced
@@ -6147,6 +7081,7 @@ options:
   default: 0
   flags:
   - startup
+  with_legacy: true
 - name: bdev_ioring
   type: bool
   level: advanced
@@ -6171,58 +7106,72 @@ options:
   default: 10
   flags:
   - runtime
+  with_legacy: true
 - name: kstore_max_ops
   type: uint
   level: advanced
   default: 512
+  with_legacy: true
 - name: kstore_max_bytes
   type: size
   level: advanced
   default: 64_M
+  with_legacy: true
 - name: kstore_backend
   type: str
   level: advanced
   default: rocksdb
+  with_legacy: true
 - name: kstore_rocksdb_options
   type: str
   level: advanced
   desc: Options to pass through when RocksDB is used as the KeyValueDB for kstore.
   default: compression=kNoCompression
+  with_legacy: true
 - name: kstore_fsck_on_mount
   type: bool
   level: advanced
   desc: Whether or not to run fsck on mount for kstore.
   default: false
+  with_legacy: true
 - name: kstore_fsck_on_mount_deep
   type: bool
   level: advanced
   desc: Whether or not to run deep fsck on mount for kstore
   default: true
+  with_legacy: true
 - name: kstore_nid_prealloc
   type: uint
   level: advanced
   default: 1_K
+  with_legacy: true
 - name: kstore_sync_transaction
   type: bool
   level: advanced
   default: false
+  with_legacy: true
 - name: kstore_sync_submit_transaction
   type: bool
   level: advanced
   default: false
+  with_legacy: true
 - name: kstore_onode_map_size
   type: uint
   level: advanced
   default: 1_K
+  with_legacy: true
 - name: kstore_default_stripe_size
   type: size
   level: advanced
   default: 64_K
+  with_legacy: true
+# rocksdb options that will be used for omap(if omap_backend is rocksdb)
 - name: filestore_rocksdb_options
   type: str
   level: dev
   desc: Options to pass through when RocksDB is used as the KeyValueDB for filestore.
   default: max_background_jobs=10,compaction_readahead_size=2097152,compression=kNoCompression
+  with_legacy: true
 - name: filestore_omap_backend
   type: str
   level: dev
@@ -6231,430 +7180,573 @@ options:
   enum_values:
   - leveldb
   - rocksdb
+  with_legacy: true
 - name: filestore_omap_backend_path
   type: str
   level: dev
   desc: The path where the filestore KeyValueDB should store it's database(s).
+  with_legacy: true
+# filestore wb throttle limits
 - name: filestore_wbthrottle_enable
   type: bool
   level: advanced
   desc: Enabling throttling of operations to backing file system
   default: true
+  with_legacy: true
 - name: filestore_wbthrottle_btrfs_bytes_start_flusher
   type: size
   level: advanced
   desc: Start flushing (fsyncing) when this many bytes are written(btrfs)
   default: 40_M
+  with_legacy: true
 - name: filestore_wbthrottle_btrfs_bytes_hard_limit
   type: size
   level: advanced
   desc: Block writes when this many bytes haven't been flushed (fsynced) (btrfs)
   default: 400_M
+  with_legacy: true
 - name: filestore_wbthrottle_btrfs_ios_start_flusher
   type: uint
   level: advanced
   desc: Start flushing (fsyncing) when this many IOs are written (brtrfs)
   default: 500
+  with_legacy: true
 - name: filestore_wbthrottle_btrfs_ios_hard_limit
   type: uint
   level: advanced
   desc: Block writes when this many IOs haven't been flushed (fsynced) (btrfs)
   default: 5000
+  with_legacy: true
 - name: filestore_wbthrottle_btrfs_inodes_start_flusher
   type: uint
   level: advanced
   desc: Start flushing (fsyncing) when this many distinct inodes have been modified
     (btrfs)
   default: 500
+  with_legacy: true
 - name: filestore_wbthrottle_xfs_bytes_start_flusher
   type: size
   level: advanced
   desc: Start flushing (fsyncing) when this many bytes are written(xfs)
   default: 40_M
+  with_legacy: true
 - name: filestore_wbthrottle_xfs_bytes_hard_limit
   type: size
   level: advanced
   desc: Block writes when this many bytes haven't been flushed (fsynced) (xfs)
   default: 400_M
+  with_legacy: true
 - name: filestore_wbthrottle_xfs_ios_start_flusher
   type: uint
   level: advanced
   desc: Start flushing (fsyncing) when this many IOs are written (xfs)
   default: 500
+  with_legacy: true
 - name: filestore_wbthrottle_xfs_ios_hard_limit
   type: uint
   level: advanced
   desc: Block writes when this many IOs haven't been flushed (fsynced) (xfs)
   default: 5000
+  with_legacy: true
 - name: filestore_wbthrottle_xfs_inodes_start_flusher
   type: uint
   level: advanced
   desc: Start flushing (fsyncing) when this many distinct inodes have been modified
     (xfs)
   default: 500
+  with_legacy: true
+# These must be less than the fd limit
 - name: filestore_wbthrottle_btrfs_inodes_hard_limit
   type: uint
   level: advanced
   desc: Block writing when this many inodes have outstanding writes (btrfs)
   default: 5000
+  with_legacy: true
 - name: filestore_wbthrottle_xfs_inodes_hard_limit
   type: uint
   level: advanced
   desc: Block writing when this many inodes have outstanding writes (xfs)
   default: 5000
+  with_legacy: true
+# Introduce a O_DSYNC write in the filestore
 - name: filestore_odsync_write
   type: bool
   level: dev
   desc: Write with O_DSYNC
   default: false
+  with_legacy: true
+# Tests index failure paths
 - name: filestore_index_retry_probability
   type: float
   level: dev
   default: 0
+  with_legacy: true
+# Allow object read error injection
 - name: filestore_debug_inject_read_err
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: filestore_debug_random_read_err
   type: float
   level: dev
   default: 0
+  with_legacy: true
+# Expensive debugging check on sync
 - name: filestore_debug_omap_check
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: filestore_omap_header_cache_size
   type: size
   level: dev
   default: 1_K
+  with_legacy: true
+# Use omap for xattrs for attrs over
+# filestore_max_inline_xattr_size or
 - name: filestore_max_inline_xattr_size
   type: size
   level: dev
   default: 0
+  with_legacy: true
 - name: filestore_max_inline_xattr_size_xfs
   type: size
   level: dev
   default: 64_K
+  with_legacy: true
 - name: filestore_max_inline_xattr_size_btrfs
   type: size
   level: dev
   default: 2_K
+  with_legacy: true
 - name: filestore_max_inline_xattr_size_other
   type: size
   level: dev
   default: 512
+  with_legacy: true
+# for more than filestore_max_inline_xattrs attrs
 - name: filestore_max_inline_xattrs
   type: uint
   level: dev
   default: 0
+  with_legacy: true
 - name: filestore_max_inline_xattrs_xfs
   type: uint
   level: dev
   default: 10
+  with_legacy: true
 - name: filestore_max_inline_xattrs_btrfs
   type: uint
   level: dev
   default: 10
+  with_legacy: true
 - name: filestore_max_inline_xattrs_other
   type: uint
   level: dev
   default: 2
+  with_legacy: true
 - name: filestore_max_xattr_value_size
   type: size
   level: dev
   default: 0
+  with_legacy: true
 - name: filestore_max_xattr_value_size_xfs
   type: size
   level: dev
   default: 64_K
+  with_legacy: true
 - name: filestore_max_xattr_value_size_btrfs
   type: size
   level: dev
   default: 64_K
+  with_legacy: true
+# ext4 allows 4k xattrs total including some smallish extra fields and the
+# keys.  We're allowing 2 512 inline attrs in addition some some filestore
+# replay attrs.  After accounting for those, we still need to fit up to
+# two attrs of this value.  That means we need this value to be around 1k
+# to be safe.  This is hacky, but it's not worth complicating the code
+# to work around ext4's total xattr limit.
 - name: filestore_max_xattr_value_size_other
   type: size
   level: dev
   default: 1_K
+  with_legacy: true
+# track sloppy crcs
 - name: filestore_sloppy_crc
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: filestore_sloppy_crc_block_size
   type: size
   level: dev
   default: 64_K
+  with_legacy: true
 - name: filestore_max_alloc_hint_size
   type: size
   level: dev
   default: 1_M
+  with_legacy: true
+# seconds
 - name: filestore_max_sync_interval
   type: float
   level: advanced
   desc: Period between calls to syncfs(2) and journal trims (seconds)
   default: 5
+  with_legacy: true
+# seconds
 - name: filestore_min_sync_interval
   type: float
   level: dev
   desc: Minimum period between calls to syncfs(2)
   default: 0.01
+  with_legacy: true
 - name: filestore_btrfs_snap
   type: bool
   level: dev
   default: true
+  with_legacy: true
 - name: filestore_btrfs_clone_range
   type: bool
   level: advanced
   desc: Use btrfs clone_range ioctl to efficiently duplicate objects
   default: true
+  with_legacy: true
+# zfsonlinux is still unstable
 - name: filestore_zfs_snap
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: filestore_fsync_flushes_journal_data
   type: bool
   level: dev
   default: false
+  with_legacy: true
+# (try to) use fiemap
 - name: filestore_fiemap
   type: bool
   level: advanced
   desc: Use fiemap ioctl(2) to determine which parts of objects are sparse
   default: false
+  with_legacy: true
 - name: filestore_punch_hole
   type: bool
   level: advanced
   desc: Use fallocate(2) FALLOC_FL_PUNCH_HOLE to efficiently zero ranges of objects
   default: false
+  with_legacy: true
+# (try to) use seek_data/hole
 - name: filestore_seek_data_hole
   type: bool
   level: advanced
   desc: Use lseek(2) SEEK_HOLE and SEEK_DATA to determine which parts of objects are
     sparse
   default: false
+  with_legacy: true
 - name: filestore_splice
   type: bool
   level: advanced
   desc: Use splice(2) to more efficiently copy data between files
   default: false
+  with_legacy: true
 - name: filestore_fadvise
   type: bool
   level: advanced
   desc: Use posix_fadvise(2) to pass hints to file system
   default: true
+  with_legacy: true
+# collect device partition information for management application to use
 - name: filestore_collect_device_partition_information
   type: bool
   level: advanced
   desc: Collect metadata about the backing file system on OSD startup
   default: true
+  with_legacy: true
+# (try to) use extsize for alloc hint NOTE: extsize seems to trigger
+# data corruption in xfs prior to kernel 3.5.  filestore will
+# implicitly disable this if it cannot confirm the kernel is newer
+# than that.
+# NOTE: This option involves a tradeoff: When disabled, fragmentation is
+# worse, but large sequential writes are faster. When enabled, large
+# sequential writes are slower, but fragmentation is reduced.
 - name: filestore_xfs_extsize
   type: bool
   level: advanced
   desc: Use XFS extsize ioctl(2) to hint allocator about expected write sizes
   default: false
+  with_legacy: true
 - name: filestore_journal_parallel
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: filestore_journal_writeahead
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: filestore_journal_trailing
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: filestore_queue_max_ops
   type: uint
   level: advanced
   desc: Max IO operations in flight
   default: 50
+  with_legacy: true
 - name: filestore_queue_max_bytes
   type: size
   level: advanced
   desc: Max (written) bytes in flight
   default: 100_M
+  with_legacy: true
 - name: filestore_caller_concurrency
   type: int
   level: dev
   default: 10
+  with_legacy: true
+# Expected filestore throughput in B/s
 - name: filestore_expected_throughput_bytes
   type: float
   level: advanced
   desc: Expected throughput of backend device (aids throttling calculations)
   default: 209715200
+  with_legacy: true
+# Expected filestore throughput in ops/s
 - name: filestore_expected_throughput_ops
   type: float
   level: advanced
   desc: Expected through of backend device in IOPS (aids throttling calculations)
   default: 200
+  with_legacy: true
+# Filestore max delay multiple.  Defaults to 0 (disabled)
 - name: filestore_queue_max_delay_multiple
   type: float
   level: dev
   default: 0
+  with_legacy: true
+# Filestore high delay multiple.  Defaults to 0 (disabled)
 - name: filestore_queue_high_delay_multiple
   type: float
   level: dev
   default: 0
+  with_legacy: true
+# Filestore max delay multiple ops.  Defaults to 0 (disabled)
 - name: filestore_queue_max_delay_multiple_bytes
   type: float
   level: dev
   default: 0
+  with_legacy: true
+# Filestore high delay multiple bytes.  Defaults to 0 (disabled)
 - name: filestore_queue_high_delay_multiple_bytes
   type: float
   level: dev
   default: 0
+  with_legacy: true
+# Filestore max delay multiple ops.  Defaults to 0 (disabled)
 - name: filestore_queue_max_delay_multiple_ops
   type: float
   level: dev
   default: 0
+  with_legacy: true
+# Filestore high delay multiple ops.  Defaults to 0 (disabled)
 - name: filestore_queue_high_delay_multiple_ops
   type: float
   level: dev
   default: 0
+  with_legacy: true
 - name: filestore_queue_low_threshhold
   type: float
   level: dev
   default: 0.3
+  with_legacy: true
 - name: filestore_queue_high_threshhold
   type: float
   level: dev
+  with_legacy: true
   default: 0.9
 - name: filestore_op_threads
   type: int
   level: advanced
   desc: Threads used to apply changes to backing file system
   default: 2
+  with_legacy: true
 - name: filestore_op_thread_timeout
   type: int
   level: advanced
   desc: Seconds before a worker thread is considered stalled
   default: 1_min
+  with_legacy: true
 - name: filestore_op_thread_suicide_timeout
   type: int
   level: advanced
   desc: Seconds before a worker thread is considered dead
   default: 3_min
+  with_legacy: true
 - name: filestore_commit_timeout
   type: float
   level: advanced
   desc: Seconds before backing file system is considered hung
   default: 10_min
+  with_legacy: true
 - name: filestore_fiemap_threshold
   type: size
   level: dev
   default: 4_K
+  with_legacy: true
 - name: filestore_merge_threshold
   type: int
   level: dev
   default: -10
+  with_legacy: true
 - name: filestore_split_multiple
   type: int
   level: dev
   default: 2
+  with_legacy: true
 - name: filestore_split_rand_factor
   type: uint
   level: dev
   default: 20
+  with_legacy: true
 - name: filestore_update_to
   type: int
   level: dev
   default: 1000
+  with_legacy: true
 - name: filestore_blackhole
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: filestore_fd_cache_size
   type: int
   level: dev
   default: 128
+  with_legacy: true
 - name: filestore_fd_cache_shards
   type: int
   level: dev
   default: 16
+  with_legacy: true
 - name: filestore_ondisk_finisher_threads
   type: int
   level: dev
   default: 1
+  with_legacy: true
 - name: filestore_apply_finisher_threads
   type: int
   level: dev
   default: 1
+  with_legacy: true
+# file onto which store transaction dumps
 - name: filestore_dump_file
   type: str
   level: dev
+  with_legacy: true
+# inject a failure at the n'th opportunity
 - name: filestore_kill_at
   type: int
   level: dev
   default: 0
+  with_legacy: true
+# artificially stall for N seconds in op queue thread
 - name: filestore_inject_stall
   type: int
   level: dev
   default: 0
+  with_legacy: true
+# fail/crash on EIO
 - name: filestore_fail_eio
   type: bool
   level: dev
   default: true
+  with_legacy: true
 - name: filestore_debug_verify_split
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: journal_dio
   type: bool
   level: dev
   default: true
+  with_legacy: true
 - name: journal_aio
   type: bool
   level: dev
   default: true
+  with_legacy: true
 - name: journal_force_aio
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: journal_block_size
   type: size
   level: dev
   default: 4_K
+  with_legacy: true
 - name: journal_block_align
   type: bool
   level: dev
   default: true
+  with_legacy: true
 - name: journal_write_header_frequency
   type: uint
   level: dev
   default: 0
+  with_legacy: true
 - name: journal_max_write_bytes
   type: size
   level: advanced
   desc: Max bytes in flight to journal
   default: 10_M
+  with_legacy: true
 - name: journal_max_write_entries
   type: int
   level: advanced
   desc: Max IOs in flight to journal
   default: 100
+  with_legacy: true
+# Target range for journal fullness
 - name: journal_throttle_low_threshhold
   type: float
   level: dev
   default: 0.6
+  with_legacy: true
 - name: journal_throttle_high_threshhold
   type: float
   level: dev
   default: 0.9
+  with_legacy: true
+# Multiple over expected at high_threshhold. Defaults to 0 (disabled).
 - name: journal_throttle_high_multiple
   type: float
   level: dev
   default: 0
+  with_legacy: true
+# Multiple over expected at max.  Defaults to 0 (disabled).
 - name: journal_throttle_max_multiple
   type: float
   level: dev
   default: 0
+  with_legacy: true
+# align data payloads >= this.
 - name: journal_align_min_size
   type: size
   level: dev
   default: 64_K
+  with_legacy: true
 - name: journal_replay_from
   type: int
   level: dev
   default: 0
+  with_legacy: true
 - name: mgr_stats_threshold
   type: int
   level: advanced
@@ -6668,18 +7760,25 @@ options:
   type: bool
   level: dev
   default: false
+  with_legacy: true
+# assume journal is not corrupt
 - name: journal_ignore_corruption
   type: bool
   level: dev
   default: false
+  with_legacy: true
+# using ssd disk as journal, whether support discard nouse journal-data.
 - name: journal_discard
   type: bool
   level: dev
   default: false
+  with_legacy: true
+# fio data directory for fio-objectstore
 - name: fio_dir
   type: str
   level: advanced
   default: /tmp/fio
+  with_legacy: true
 - name: rados_mon_op_timeout
   type: secs
   level: advanced
@@ -6696,10 +7795,12 @@ options:
   min: 0
   flags:
   - runtime
+# true if LTTng-UST tracepoints should be enabled
 - name: rados_tracing
   type: bool
   level: advanced
   default: false
+  with_legacy: true
 - name: cephadm_path
   type: str
   level: advanced
@@ -6880,10 +7981,12 @@ options:
   type: bool
   level: advanced
   default: true
+  with_legacy: true
 - name: event_tracing
   type: bool
   level: advanced
   default: false
+  with_legacy: true
 - name: bluestore_tracing
   type: bool
   level: advanced
@@ -6898,6 +8001,7 @@ options:
   type: bool
   level: dev
   default: false
+  with_legacy: true
 - name: debug_asserts_on_shutdown
   type: bool
   level: dev
@@ -6908,6 +8012,7 @@ options:
   level: dev
   desc: allow commands 'assert' and 'abort' via asok for testing crash dumps etc
   default: false
+  with_legacy: true
 - name: target_max_misplaced_ratio
   type: float
   level: basic
diff --git a/src/common/options/legacy_config_opts.h b/src/common/options/legacy_config_opts.h
new file mode 100644 (file)
index 0000000..d515632
--- /dev/null
@@ -0,0 +1,8 @@
+#include "global_legacy_options.h"
+#include "cephfs-mirror_legacy_options.h"
+#include "mds_legacy_options.h"
+#include "mds-client_legacy_options.h"
+#include "rbd_legacy_options.h"
+#include "rbd-mirror_legacy_options.h"
+#include "immutable-object-cache_legacy_options.h"
+#include "rgw_legacy_options.h"
index a0d17d153a563a77d9427478990a4c7349b04506..6cae41a8ed25e760cb09646b793f16a772584c86 100644 (file)
@@ -9,6 +9,7 @@ options:
   default: 16_K
   services:
   - mds_client
+  with_legacy: true
 - name: client_cache_mid
   type: float
   level: advanced
@@ -16,6 +17,7 @@ options:
   default: 0.75
   services:
   - mds_client
+  with_legacy: true
 - name: client_use_random_mds
   type: bool
   level: dev
@@ -23,6 +25,7 @@ options:
   default: false
   services:
   - mds_client
+  with_legacy: true
 - name: client_mount_timeout
   type: float
   level: advanced
@@ -30,6 +33,7 @@ options:
   default: 5_min
   services:
   - mds_client
+  with_legacy: true
 - name: client_tick_interval
   type: secs
   level: dev
@@ -43,6 +47,7 @@ options:
   desc: file containing trace of client operations
   services:
   - mds_client
+  with_legacy: true
 - name: client_readahead_min
   type: size
   level: advanced
@@ -50,6 +55,7 @@ options:
   default: 128_K
   services:
   - mds_client
+  with_legacy: true
 - name: client_readahead_max_bytes
   type: size
   level: advanced
@@ -57,6 +63,8 @@ options:
   default: 0
   services:
   - mds_client
+  with_legacy: true
+# as multiple of file layout period (object size * num stripes)
 - name: client_readahead_max_periods
   type: int
   level: advanced
@@ -64,6 +72,7 @@ options:
   default: 4
   services:
   - mds_client
+  with_legacy: true
 - name: client_reconnect_stale
   type: bool
   level: advanced
@@ -78,6 +87,7 @@ options:
   default: .snap
   services:
   - mds_client
+  with_legacy: true
 - name: client_mountpoint
   type: str
   level: advanced
@@ -92,6 +102,7 @@ options:
   default: -1
   services:
   - mds_client
+  with_legacy: true
 - name: client_mount_gid
   type: int
   level: advanced
@@ -99,24 +110,28 @@ options:
   default: -1
   services:
   - mds_client
+  with_legacy: true
 - name: client_notify_timeout
   type: int
   level: dev
   default: 10
   services:
   - mds_client
+  with_legacy: true
 - name: osd_client_watch_timeout
   type: int
   level: dev
   default: 30
   services:
   - mds_client
+  with_legacy: true
 - name: client_caps_release_delay
   type: int
   level: dev
   default: 5
   services:
   - mds_client
+  with_legacy: true
 - name: client_quota_df
   type: bool
   level: advanced
@@ -124,6 +139,7 @@ options:
   default: true
   services:
   - mds_client
+  with_legacy: true
 - name: client_oc
   type: bool
   level: advanced
@@ -131,6 +147,7 @@ options:
   default: true
   services:
   - mds_client
+  with_legacy: true
 - name: client_oc_size
   type: size
   level: advanced
@@ -140,6 +157,8 @@ options:
   - mds_client
   flags:
   - runtime
+  with_legacy: true
+# MB * n  (dirty OR tx.. bigish)
 - name: client_oc_max_dirty
   type: size
   level: advanced
@@ -149,6 +168,8 @@ options:
   - mds_client
   flags:
   - runtime
+  with_legacy: true
+# target dirty (keep this smallish)
 - name: client_oc_target_dirty
   type: size
   level: advanced
@@ -158,6 +179,7 @@ options:
   - mds_client
   flags:
   - runtime
+  with_legacy: true
 - name: client_oc_max_dirty_age
   type: float
   level: advanced
@@ -167,6 +189,7 @@ options:
   - mds_client
   flags:
   - runtime
+  with_legacy: true
 - name: client_oc_max_objects
   type: int
   level: advanced
@@ -176,18 +199,23 @@ options:
   - mds_client
   flags:
   - runtime
+  with_legacy: true
+# check if MDS reply contains wanted caps
 - name: client_debug_getattr_caps
   type: bool
   level: dev
   default: false
   services:
   - mds_client
+  with_legacy: true
+# always read synchronously (go to osds)
 - name: client_debug_force_sync_read
   type: bool
   level: dev
   default: false
   services:
   - mds_client
+  with_legacy: true
 - name: client_debug_inject_tick_delay
   type: secs
   level: dev
@@ -200,30 +228,37 @@ options:
   default: 4_K
   services:
   - mds_client
+  with_legacy: true
+# synthetic client bug for testing
 - name: client_inject_release_failure
   type: bool
   level: dev
   default: false
   services:
   - mds_client
+  with_legacy: true
+# synthetic client bug for testing
 - name: client_inject_fixed_oldest_tid
   type: bool
   level: dev
   default: false
   services:
   - mds_client
+  with_legacy: true
 - name: client_metadata
   type: str
   level: advanced
   desc: metadata key=value comma-delimited pairs appended to session metadata
   services:
   - mds_client
+  with_legacy: true
 - name: client_acl_type
   type: str
   level: advanced
   desc: ACL type to enforce (none or "posix_acl")
   services:
   - mds_client
+  with_legacy: true
 - name: client_permissions
   type: bool
   level: advanced
@@ -231,6 +266,7 @@ options:
   default: true
   services:
   - mds_client
+  with_legacy: true
 - name: client_dirsize_rbytes
   type: bool
   level: advanced
@@ -241,6 +277,7 @@ options:
   default: true
   services:
   - mds_client
+  with_legacy: true
 - name: client_force_lazyio
   type: bool
   level: advanced
@@ -360,12 +397,14 @@ options:
   default: true
   services:
   - mds_client
+# the client should try to use dentry invaldation instead of remounting, on kernels it believes that will work for
 - name: client_try_dentry_invalidate
   type: bool
   level: dev
   default: false
   services:
   - mds_client
+  with_legacy: true
 - name: client_die_on_failed_remount
   type: bool
   level: dev
@@ -390,12 +429,14 @@ options:
   default: true
   services:
   - mds_client
+  with_legacy: true
 - name: client_use_faked_inos
   type: bool
   level: dev
   default: false
   services:
   - mds_client
+  with_legacy: true
 - name: client_fs
   type: str
   level: advanced
@@ -422,6 +463,8 @@ options:
   default: 0
   services:
   - mds_client
+  with_legacy: true
+# XXX: mon
 - name: debug_allow_any_pool_priority
   type: bool
   level: dev
@@ -429,6 +472,7 @@ options:
   default: false
   services:
   - mds_client
+  with_legacy: true
 - name: client_asio_thread_count
   type: uint
   level: advanced
index e9219e4ec6c5d44c5f99dc8f1c4b11b59a342590..734258646e05193579860f414a355ba0bc0f94ad 100644 (file)
@@ -37,6 +37,7 @@ options:
   - mds
   flags:
   - no_mon_update
+  with_legacy: true
 - name: mds_join_fs
   type: str
   level: basic
@@ -48,6 +49,7 @@ options:
   - mds
   flags:
   - runtime
+# max xattr kv pairs size for each dir/file
 - name: mds_max_xattr_pairs_size
   type: size
   level: advanced
@@ -55,6 +57,7 @@ options:
   default: 64_K
   services:
   - mds
+  with_legacy: true
 - name: mds_cache_trim_interval
   type: secs
   level: advanced
@@ -136,6 +139,7 @@ options:
   default: 32
   services:
   - mds
+  with_legacy: true
 - name: mds_dir_max_commit_size
   type: int
   level: advanced
@@ -143,6 +147,7 @@ options:
   default: 10
   services:
   - mds
+  with_legacy: true
 - name: mds_dir_keys_per_op
   type: int
   level: advanced
@@ -150,6 +155,7 @@ options:
   default: 16384
   services:
   - mds
+  with_legacy: true
 - name: mds_decay_halflife
   type: float
   level: advanced
@@ -157,6 +163,7 @@ options:
   default: 5
   services:
   - mds
+  with_legacy: true
 - name: mds_beacon_interval
   type: float
   level: advanced
@@ -164,6 +171,7 @@ options:
   default: 4
   services:
   - mds
+  with_legacy: true
 - name: mds_beacon_grace
   type: float
   level: advanced
@@ -171,6 +179,7 @@ options:
   default: 15
   services:
   - mds
+  with_legacy: true
 - name: mds_heartbeat_grace
   type: float
   level: advanced
@@ -185,6 +194,8 @@ options:
   default: true
   services:
   - mds
+  with_legacy: true
+# whether to blocklist clients whose sessions are dropped due to timeout
 - name: mds_session_blocklist_on_timeout
   type: bool
   level: advanced
@@ -192,6 +203,8 @@ options:
   default: true
   services:
   - mds
+  with_legacy: true
+# whether to blocklist clients whose sessions are dropped via admin commands
 - name: mds_session_blocklist_on_evict
   type: bool
   level: advanced
@@ -199,6 +212,8 @@ options:
   default: true
   services:
   - mds
+  with_legacy: true
+# how many sessions should I try to load/store in a single OMAP operation?
 - name: mds_sessionmap_keys_per_op
   type: uint
   level: advanced
@@ -206,6 +221,7 @@ options:
   default: 1_K
   services:
   - mds
+  with_legacy: true
 - name: mds_recall_max_caps
   type: size
   level: advanced
@@ -326,12 +342,15 @@ options:
   default: 0.5
   services:
   - mds
+# detecting freeze tree deadlock
 - name: mds_freeze_tree_timeout
   type: float
   level: dev
   default: 30
   services:
   - mds
+  with_legacy: true
+# collapse N-client health metrics to a single 'many'
 - name: mds_health_summarize_threshold
   type: int
   level: advanced
@@ -339,6 +358,9 @@ options:
   default: 10
   services:
   - mds
+  with_legacy: true
+# seconds to wait for clients during mds restart
+# make it (mdsmap.session_timeout - mds_beacon_grace)
 - name: mds_reconnect_timeout
   type: float
   level: advanced
@@ -347,6 +369,7 @@ options:
   default: 45
   services:
   - mds
+  with_legacy: true
 - name: mds_deny_all_reconnect
   type: bool
   level: advanced
@@ -363,12 +386,16 @@ options:
   default: 5
   services:
   - mds
+  with_legacy: true
+# try to avoid propagating more often than this
 - name: mds_dirstat_min_interval
   type: float
   level: dev
   default: 1
   services:
   - mds
+  with_legacy: true
+# how quickly dirstat changes propagate up the hierarchy
 - name: mds_scatter_nudge_interval
   type: float
   level: advanced
@@ -376,6 +403,7 @@ options:
   default: 5
   services:
   - mds
+  with_legacy: true
 - name: mds_client_prealloc_inos
   type: int
   level: advanced
@@ -383,6 +411,7 @@ options:
   default: 1000
   services:
   - mds
+  with_legacy: true
 - name: mds_client_delegate_inos_pct
   type: uint
   level: advanced
@@ -400,6 +429,7 @@ options:
   default: true
   services:
   - mds
+  with_legacy: true
 - name: mds_replay_unsafe_with_closed_session
   type: bool
   level: advanced
@@ -418,18 +448,21 @@ options:
   default: 2
   services:
   - mds
+  with_legacy: true
 - name: mds_log_pause
   type: bool
   level: dev
   default: false
   services:
   - mds
+  with_legacy: true
 - name: mds_log_skip_corrupt_events
   type: bool
   level: dev
   default: false
   services:
   - mds
+  with_legacy: true
 - name: mds_log_max_events
   type: int
   level: advanced
@@ -437,6 +470,7 @@ options:
   default: -1
   services:
   - mds
+  with_legacy: true
 - name: mds_log_events_per_segment
   type: int
   level: advanced
@@ -444,6 +478,8 @@ options:
   default: 1024
   services:
   - mds
+  with_legacy: true
+# segment size for mds log, default to default file_layout_t
 - name: mds_log_segment_size
   type: size
   level: advanced
@@ -451,6 +487,7 @@ options:
   default: 0
   services:
   - mds
+  with_legacy: true
 - name: mds_log_max_segments
   type: uint
   level: advanced
@@ -458,6 +495,7 @@ options:
   default: 128
   services:
   - mds
+  with_legacy: true
 - name: mds_log_warn_factor
   type: float
   level: advanced
@@ -476,6 +514,7 @@ options:
   default: true
   services:
   - mds
+  with_legacy: true
 - name: mds_export_ephemeral_random
   type: bool
   level: advanced
@@ -530,6 +569,7 @@ options:
   default: 3
   services:
   - mds
+  with_legacy: true
 - name: mds_bal_replicate_threshold
   type: float
   level: advanced
@@ -537,6 +577,7 @@ options:
   default: 8000
   services:
   - mds
+  with_legacy: true
 - name: mds_bal_unreplicate_threshold
   type: float
   level: advanced
@@ -544,6 +585,7 @@ options:
   default: 0
   services:
   - mds
+  with_legacy: true
 - name: mds_bal_split_size
   type: int
   level: advanced
@@ -551,6 +593,7 @@ options:
   default: 10000
   services:
   - mds
+  with_legacy: true
 - name: mds_bal_split_rd
   type: float
   level: advanced
@@ -558,6 +601,7 @@ options:
   default: 25000
   services:
   - mds
+  with_legacy: true
 - name: mds_bal_split_wr
   type: float
   level: advanced
@@ -565,6 +609,7 @@ options:
   default: 10000
   services:
   - mds
+  with_legacy: true
 - name: mds_bal_split_bits
   type: int
   level: advanced
@@ -574,6 +619,7 @@ options:
   - mds
   min: 1
   max: 24
+  with_legacy: true
 - name: mds_bal_merge_size
   type: int
   level: advanced
@@ -581,6 +627,7 @@ options:
   default: 50
   services:
   - mds
+  with_legacy: true
 - name: mds_bal_interval
   type: int
   level: advanced
@@ -595,6 +642,7 @@ options:
   default: 5
   services:
   - mds
+# order of magnitude higher than split size
 - name: mds_bal_fragment_size_max
   type: int
   level: advanced
@@ -602,6 +650,8 @@ options:
   default: 100000
   services:
   - mds
+  with_legacy: true
+# multiple of size_max that triggers immediate split
 - name: mds_bal_fragment_fast_factor
   type: float
   level: advanced
@@ -609,6 +659,7 @@ options:
   default: 1.5
   services:
   - mds
+  with_legacy: true
 - name: mds_bal_fragment_dirs
   type: bool
   level: advanced
@@ -628,24 +679,29 @@ options:
   default: 0
   services:
   - mds
+  with_legacy: true
 - name: mds_bal_max
   type: int
   level: dev
   default: -1
   services:
   - mds
+  with_legacy: true
 - name: mds_bal_max_until
   type: int
   level: dev
   default: -1
   services:
   - mds
+  with_legacy: true
 - name: mds_bal_mode
   type: int
   level: dev
   default: 0
   services:
   - mds
+  with_legacy: true
+# must be this much above average before we export anything
 - name: mds_bal_min_rebalance
   type: float
   level: dev
@@ -653,36 +709,47 @@ options:
   default: 0.1
   services:
   - mds
+  with_legacy: true
+# if we need less than this, we don't do anything
 - name: mds_bal_min_start
   type: float
   level: dev
   default: 0.2
   services:
   - mds
+  with_legacy: true
+# take within this range of what we need
 - name: mds_bal_need_min
   type: float
   level: dev
   default: 0.8
   services:
   - mds
+  with_legacy: true
 - name: mds_bal_need_max
   type: float
   level: dev
   default: 1.2
   services:
   - mds
+  with_legacy: true
+# any sub bigger than this taken in full
 - name: mds_bal_midchunk
   type: float
   level: dev
   default: 0.3
   services:
   - mds
+  with_legacy: true
+# never take anything smaller than this
 - name: mds_bal_minchunk
   type: float
   level: dev
   default: 0.001
   services:
   - mds
+  with_legacy: true
+# target decay half-life in MDSMap (2x larger is approx. 2x slower)
 - name: mds_bal_target_decay
   type: float
   level: advanced
@@ -690,6 +757,7 @@ options:
   default: 10
   services:
   - mds
+  with_legacy: true
 - name: mds_oft_prefetch_dirfrags
   type: bool
   level: advanced
@@ -699,6 +767,7 @@ options:
   - mds
   flags:
   - startup
+# time to wait before starting replay again
 - name: mds_replay_interval
   type: float
   level: advanced
@@ -706,72 +775,84 @@ options:
   default: 1
   services:
   - mds
+  with_legacy: true
 - name: mds_shutdown_check
   type: int
   level: dev
   default: 0
   services:
   - mds
+  with_legacy: true
 - name: mds_thrash_exports
   type: int
   level: dev
   default: 0
   services:
   - mds
+  with_legacy: true
 - name: mds_thrash_fragments
   type: int
   level: dev
   default: 0
   services:
   - mds
+  with_legacy: true
 - name: mds_dump_cache_on_map
   type: bool
   level: dev
   default: false
   services:
   - mds
+  with_legacy: true
 - name: mds_dump_cache_after_rejoin
   type: bool
   level: dev
   default: false
   services:
   - mds
+  with_legacy: true
 - name: mds_verify_scatter
   type: bool
   level: dev
   default: false
   services:
   - mds
+  with_legacy: true
 - name: mds_debug_scatterstat
   type: bool
   level: dev
   default: false
   services:
   - mds
+  with_legacy: true
 - name: mds_debug_frag
   type: bool
   level: dev
   default: false
   services:
   - mds
+  with_legacy: true
 - name: mds_debug_auth_pins
   type: bool
   level: dev
   default: false
   services:
   - mds
+  with_legacy: true
 - name: mds_debug_subtrees
   type: bool
   level: dev
   default: false
   services:
   - mds
+  with_legacy: true
 - name: mds_kill_mdstable_at
   type: int
   level: dev
   default: 0
   services:
   - mds
+  with_legacy: true
 - name: mds_max_export_size
   type: size
   level: dev
@@ -784,30 +865,36 @@ options:
   default: 0
   services:
   - mds
+  with_legacy: true
 - name: mds_kill_import_at
   type: int
   level: dev
   default: 0
   services:
   - mds
+  with_legacy: true
 - name: mds_kill_link_at
   type: int
   level: dev
   default: 0
   services:
   - mds
+  with_legacy: true
 - name: mds_kill_rename_at
   type: int
   level: dev
   default: 0
   services:
   - mds
+  with_legacy: true
 - name: mds_kill_openc_at
   type: int
   level: dev
   default: 0
   services:
   - mds
+  with_legacy: true
+# XXX
 - name: mds_kill_journal_at
   type: int
   level: dev
@@ -820,48 +907,57 @@ options:
   default: 0
   services:
   - mds
+  with_legacy: true
 - name: mds_kill_journal_replay_at
   type: int
   level: dev
   default: 0
   services:
   - mds
+  with_legacy: true
 - name: mds_journal_format
   type: uint
   level: dev
   default: 1
   services:
   - mds
+  with_legacy: true
 - name: mds_kill_create_at
   type: int
   level: dev
   default: 0
   services:
   - mds
+  with_legacy: true
+#  percentage of MDS modify replies to skip sending the client a trace on [0-1]
 - name: mds_inject_traceless_reply_probability
   type: float
   level: dev
   default: 0
   services:
   - mds
+  with_legacy: true
 - name: mds_wipe_sessions
   type: bool
   level: dev
   default: false
   services:
   - mds
+  with_legacy: true
 - name: mds_wipe_ino_prealloc
   type: bool
   level: dev
   default: false
   services:
   - mds
+  with_legacy: true
 - name: mds_skip_ino
   type: int
   level: dev
   default: 0
   services:
   - mds
+  with_legacy: true
 - name: mds_enable_op_tracker
   type: bool
   level: advanced
@@ -869,6 +965,8 @@ options:
   default: true
   services:
   - mds
+  with_legacy: true
+# Max number of completed ops to track
 - name: mds_op_history_size
   type: uint
   level: advanced
@@ -876,6 +974,8 @@ options:
   default: 20
   services:
   - mds
+  with_legacy: true
+# Oldest completed op to track
 - name: mds_op_history_duration
   type: uint
   level: advanced
@@ -883,6 +983,8 @@ options:
   default: 600
   services:
   - mds
+  with_legacy: true
+# how many seconds old makes an op complaint-worthy
 - name: mds_op_complaint_time
   type: float
   level: advanced
@@ -890,12 +992,15 @@ options:
   default: 30
   services:
   - mds
+  with_legacy: true
+# how many op log messages to show in one go
 - name: mds_op_log_threshold
   type: int
   level: dev
   default: 5
   services:
   - mds
+  with_legacy: true
 - name: mds_snap_min_uid
   type: uint
   level: advanced
@@ -903,6 +1008,7 @@ options:
   default: 0
   services:
   - mds
+  with_legacy: true
 - name: mds_snap_max_uid
   type: uint
   level: advanced
@@ -910,6 +1016,7 @@ options:
   default: 4294967294
   services:
   - mds
+  with_legacy: true
 - name: mds_snap_rstat
   type: bool
   level: advanced
@@ -917,24 +1024,29 @@ options:
   default: false
   services:
   - mds
+  with_legacy: true
 - name: mds_verify_backtrace
   type: uint
   level: dev
   default: 1
   services:
   - mds
+  with_legacy: true
+# detect clients which aren't trimming completed requests
 - name: mds_max_completed_flushes
   type: uint
   level: dev
   default: 100000
   services:
   - mds
+  with_legacy: true
 - name: mds_max_completed_requests
   type: uint
   level: dev
   default: 100000
   services:
   - mds
+  with_legacy: true
 - name: mds_action_on_write_error
   type: uint
   level: advanced
@@ -942,6 +1054,7 @@ options:
   default: 1
   services:
   - mds
+  with_legacy: true
 - name: mds_mon_shutdown_timeout
   type: float
   level: advanced
@@ -949,6 +1062,8 @@ options:
   default: 5
   services:
   - mds
+  with_legacy: true
+# Maximum number of concurrent stray files to purge
 - name: mds_max_purge_files
   type: uint
   level: advanced
@@ -956,6 +1071,8 @@ options:
   default: 64
   services:
   - mds
+  with_legacy: true
+# Maximum number of concurrent RADOS ops to issue in purging
 - name: mds_max_purge_ops
   type: uint
   level: advanced
@@ -963,6 +1080,8 @@ options:
   default: 8_K
   services:
   - mds
+  with_legacy: true
+# Maximum number of concurrent RADOS ops to issue in purging, scaled by PG count
 - name: mds_max_purge_ops_per_pg
   type: float
   level: advanced
@@ -970,12 +1089,14 @@ options:
   default: 0.5
   services:
   - mds
+  with_legacy: true
 - name: mds_purge_queue_busy_flush_period
   type: float
   level: dev
   default: 1
   services:
   - mds
+  with_legacy: true
 - name: mds_root_ino_uid
   type: int
   level: advanced
@@ -983,6 +1104,7 @@ options:
   default: 0
   services:
   - mds
+  with_legacy: true
 - name: mds_root_ino_gid
   type: int
   level: advanced
@@ -990,6 +1112,7 @@ options:
   default: 0
   services:
   - mds
+  with_legacy: true
 - name: mds_max_scrub_ops_in_progress
   type: int
   level: advanced
@@ -997,6 +1120,7 @@ options:
   default: 5
   services:
   - mds
+  with_legacy: true
 - name: mds_forward_all_requests_to_auth
   type: bool
   level: advanced
@@ -1006,6 +1130,7 @@ options:
   - mds
   flags:
   - runtime
+# Maximum number of damaged frags/dentries before whole MDS rank goes damaged
 - name: mds_damage_table_max_entries
   type: int
   level: advanced
@@ -1013,6 +1138,8 @@ options:
   default: 10000
   services:
   - mds
+  with_legacy: true
+# Maximum increment for client writable range, counted by number of objects
 - name: mds_client_writeable_range_max_inc_objs
   type: uint
   level: advanced
@@ -1020,6 +1147,7 @@ options:
   default: 1_K
   services:
   - mds
+  with_legacy: true
 - name: mds_min_caps_per_client
   type: uint
   level: advanced
index 5678c48aa9b8ec84a575b788e0aee37e3f766f07..9a7398d5f6dcfa26a0eb157918429007272d105e 100644 (file)
@@ -2,6 +2,8 @@
 ---
 
 options:
+# According to AWS S3(http://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html),
+# An ACL can have up to 100 grants.
 - name: rgw_acl_grants_max_num
   type: int
   level: advanced
@@ -9,6 +11,9 @@ options:
   default: 100
   services:
   - rgw
+  with_legacy: true
+# According to AWS S3(http://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html),
+# An cors can have up to 100 rules.
 - name: rgw_cors_rules_max_num
   type: int
   level: advanced
@@ -16,6 +21,10 @@ options:
   default: 100
   services:
   - rgw
+  with_legacy: true
+# According to AWS S3(https://docs.aws.amazon.com/AmazonS3/latest/dev/DeletingObjects.html),
+# Amazon S3 also provides the Multi-Object Delete API that you can use to delete up to 1000
+# objects in a single HTTP request.
 - name: rgw_delete_multi_obj_max_num
   type: int
   level: advanced
@@ -23,6 +32,8 @@ options:
   default: 1000
   services:
   - rgw
+  with_legacy: true
+# According to AWS S3, An website routing config can have up to 50 rules.
 - name: rgw_website_routing_rules_max_num
   type: int
   level: advanced
@@ -30,6 +41,7 @@ options:
   default: 50
   services:
   - rgw
+  with_legacy: true
 - name: rgw_rados_tracing
   type: bool
   level: advanced
@@ -56,6 +68,7 @@ options:
   default: 4_M
   services:
   - rgw
+  with_legacy: true
 - name: rgw_put_obj_min_window_size
   type: size
   level: advanced
@@ -70,6 +83,7 @@ options:
   see_also:
   - rgw_put_obj_max_window_size
   - rgw_max_chunk_size
+  with_legacy: true
 - name: rgw_put_obj_max_window_size
   type: size
   level: advanced
@@ -82,6 +96,7 @@ options:
   see_also:
   - rgw_put_obj_min_window_size
   - rgw_max_chunk_size
+  with_legacy: true
 - name: rgw_max_put_size
   type: size
   level: advanced
@@ -92,6 +107,7 @@ options:
   default: 5_G
   services:
   - rgw
+  with_legacy: true
 - name: rgw_max_put_param_size
   type: size
   level: advanced
@@ -99,6 +115,7 @@ options:
   default: 1_M
   services:
   - rgw
+  with_legacy: true
 - name: rgw_max_attr_size
   type: size
   level: advanced
@@ -106,6 +123,7 @@ options:
   default: 0
   services:
   - rgw
+  with_legacy: true
 - name: rgw_max_attr_name_len
   type: size
   level: advanced
@@ -113,6 +131,7 @@ options:
   default: 0
   services:
   - rgw
+  with_legacy: true
 - name: rgw_max_attrs_num_in_req
   type: uint
   level: advanced
@@ -120,6 +139,14 @@ options:
   default: 0
   services:
   - rgw
+  with_legacy: true
+# override max bucket index shards in zone configuration (if not zero)
+#
+# Represents the number of shards for the bucket index object, a value of zero
+# indicates there is no sharding. By default (no sharding, the name of the object
+# is '.dir.{marker}', with sharding, the name is '.dir.{markder}.{sharding_id}',
+# sharding_id is zero-based value. It is not recommended to set a too large value
+# (e.g. thousand) as it increases the cost for bucket listing.
 - name: rgw_override_bucket_index_max_shards
   type: uint
   level: dev
@@ -130,6 +157,8 @@ options:
   default: 0
   services:
   - rgw
+  with_legacy: true
+# Represents the maximum AIO pending requests for the bucket index object shards.
 - name: rgw_bucket_index_max_aio
   type: uint
   level: advanced
@@ -137,6 +166,8 @@ options:
   default: 128
   services:
   - rgw
+  with_legacy: true
+# whether or not the quota/gc threads should be started
 - name: rgw_enable_quota_threads
   type: bool
   level: advanced
@@ -152,6 +183,7 @@ options:
   see_also:
   - rgw_enable_gc_threads
   - rgw_enable_lc_threads
+  with_legacy: true
 - name: rgw_enable_gc_threads
   type: bool
   level: advanced
@@ -167,6 +199,7 @@ options:
   see_also:
   - rgw_enable_quota_threads
   - rgw_enable_lc_threads
+  with_legacy: true
 - name: rgw_enable_lc_threads
   type: bool
   level: advanced
@@ -183,6 +216,7 @@ options:
   see_also:
   - rgw_enable_gc_threads
   - rgw_enable_quota_threads
+  with_legacy: true
 - name: rgw_data
   type: str
   level: advanced
@@ -194,6 +228,7 @@ options:
   - rgw
   flags:
   - no_mon_update
+  with_legacy: true
 - name: rgw_enable_apis
   type: str
   level: advanced
@@ -201,6 +236,7 @@ options:
   default: s3, s3website, swift, swift_auth, admin, sts, iam, notifications
   services:
   - rgw
+  with_legacy: true
 - name: rgw_cache_enabled
   type: bool
   level: advanced
@@ -214,6 +250,7 @@ options:
   - rgw
   see_also:
   - rgw_cache_lru_size
+  with_legacy: true
 - name: rgw_cache_lru_size
   type: int
   level: advanced
@@ -224,6 +261,7 @@ options:
   - rgw
   see_also:
   - rgw_cache_enabled
+  with_legacy: true
 - name: rgw_socket_path
   type: str
   level: advanced
@@ -232,6 +270,7 @@ options:
   - rgw
   see_also:
   - rgw_fcgi_socket_backlog
+  with_legacy: true
 - name: rgw_host
   type: str
   level: advanced
@@ -241,6 +280,7 @@ options:
   see_also:
   - rgw_port
   - rgw_fcgi_socket_backlog
+  with_legacy: true
 - name: rgw_port
   type: str
   level: basic
@@ -250,6 +290,7 @@ options:
   see_also:
   - rgw_host
   - rgw_fcgi_socket_backlog
+  with_legacy: true
 - name: rgw_dns_name
   type: str
   level: advanced
@@ -258,6 +299,7 @@ options:
     configured via zonegroup configuration.
   services:
   - rgw
+  with_legacy: true
 - name: rgw_dns_s3website_name
   type: str
   level: advanced
@@ -266,6 +308,7 @@ options:
     zonegroup configuration.
   services:
   - rgw
+  with_legacy: true
 - name: rgw_numa_node
   type: int
   level: advanced
@@ -283,6 +326,7 @@ options:
     contain the name of the provider. This name will be placed in http header 'Server'.
   services:
   - rgw
+  with_legacy: true
 - name: rgw_content_length_compat
   type: bool
   level: advanced
@@ -292,6 +336,7 @@ options:
   default: false
   services:
   - rgw
+  with_legacy: true
 - name: rgw_relaxed_region_enforcement
   type: bool
   level: advanced
@@ -309,12 +354,14 @@ options:
   default: 00:00-06:00
   services:
   - rgw
+  with_legacy: true
 - name: rgw_lc_lock_max_time
   type: int
   level: dev
   default: 90
   services:
   - rgw
+  with_legacy: true
 - name: rgw_lc_thread_delay
   type: int
   level: advanced
@@ -332,6 +379,7 @@ options:
   default: 3
   services:
   - rgw
+  with_legacy: true
 - name: rgw_lc_max_wp_worker
   type: int
   level: advanced
@@ -341,6 +389,7 @@ options:
   default: 3
   services:
   - rgw
+  with_legacy: true
 - name: rgw_lc_max_objs
   type: int
   level: advanced
@@ -350,6 +399,7 @@ options:
   default: 32
   services:
   - rgw
+  with_legacy: true
 - name: rgw_lc_max_rules
   type: uint
   level: advanced
@@ -358,12 +408,14 @@ options:
   default: 1000
   services:
   - rgw
+  with_legacy: true
 - name: rgw_lc_debug_interval
   type: int
   level: dev
   default: -1
   services:
   - rgw
+  with_legacy: true
 - name: rgw_mp_lock_max_time
   type: int
   level: advanced
@@ -379,11 +431,13 @@ options:
   level: dev
   services:
   - rgw
+  with_legacy: true
 - name: rgw_request_uri
   type: str
   level: dev
   services:
   - rgw
+  with_legacy: true
 - name: rgw_ignore_get_invalid_range
   type: bool
   level: advanced
@@ -393,6 +447,7 @@ options:
   default: false
   services:
   - rgw
+  with_legacy: true
 - name: rgw_swift_url
   type: str
   level: advanced
@@ -403,6 +458,7 @@ options:
   - rgw
   see_also:
   - rgw_swift_auth_entry
+  with_legacy: true
 - name: rgw_swift_url_prefix
   type: str
   level: advanced
@@ -411,6 +467,7 @@ options:
   default: swift
   services:
   - rgw
+  with_legacy: true
 - name: rgw_swift_auth_url
   type: str
   level: advanced
@@ -419,6 +476,7 @@ options:
     not using internal swift auth).
   services:
   - rgw
+  with_legacy: true
 - name: rgw_swift_auth_entry
   type: str
   level: advanced
@@ -429,6 +487,7 @@ options:
   - rgw
   see_also:
   - rgw_swift_url
+  with_legacy: true
 - name: rgw_swift_tenant_name
   type: str
   level: advanced
@@ -438,6 +497,7 @@ options:
   - rgw
   see_also:
   - rgw_swift_account_in_url
+  with_legacy: true
 - name: rgw_swift_account_in_url
   type: bool
   level: advanced
@@ -448,6 +508,7 @@ options:
   - rgw
   see_also:
   - rgw_swift_tenant_name
+  with_legacy: true
 - name: rgw_swift_enforce_content_length
   type: bool
   level: advanced
@@ -457,12 +518,14 @@ options:
   default: false
   services:
   - rgw
+  with_legacy: true
 - name: rgw_keystone_url
   type: str
   level: basic
   desc: The URL to the Keystone server.
   services:
   - rgw
+  with_legacy: true
 - name: rgw_keystone_admin_token
   type: str
   level: advanced
@@ -470,6 +533,7 @@ options:
     requests.'
   services:
   - rgw
+  with_legacy: true
 - name: rgw_keystone_admin_token_path
   type: str
   level: advanced
@@ -477,72 +541,84 @@ options:
     the Keystone requests.
   services:
   - rgw
+  with_legacy: true
 - name: rgw_keystone_admin_user
   type: str
   level: advanced
   desc: Keystone admin user.
   services:
   - rgw
+  with_legacy: true
 - name: rgw_keystone_admin_password
   type: str
   level: advanced
   desc: 'DEPRECATED: Keystone admin password.'
   services:
   - rgw
+  with_legacy: true
 - name: rgw_keystone_admin_password_path
   type: str
   level: advanced
   desc: Path to a file containing the Keystone admin password.
   services:
   - rgw
+  with_legacy: true
 - name: rgw_keystone_admin_tenant
   type: str
   level: advanced
   desc: Keystone admin user tenant.
   services:
   - rgw
+  with_legacy: true
 - name: rgw_keystone_admin_project
   type: str
   level: advanced
   desc: Keystone admin user project (for Keystone v3).
   services:
   - rgw
+  with_legacy: true
 - name: rgw_keystone_admin_domain
   type: str
   level: advanced
   desc: Keystone admin user domain (for Keystone v3).
   services:
   - rgw
+  with_legacy: true
 - name: rgw_keystone_barbican_user
   type: str
   level: advanced
   desc: Keystone user to access barbican secrets.
   services:
   - rgw
+  with_legacy: true
 - name: rgw_keystone_barbican_password
   type: str
   level: advanced
   desc: Keystone password for barbican user.
   services:
   - rgw
+  with_legacy: true
 - name: rgw_keystone_barbican_tenant
   type: str
   level: advanced
   desc: Keystone barbican user tenant (Keystone v2.0).
   services:
   - rgw
+  with_legacy: true
 - name: rgw_keystone_barbican_project
   type: str
   level: advanced
   desc: Keystone barbican user project (Keystone v3).
   services:
   - rgw
+  with_legacy: true
 - name: rgw_keystone_barbican_domain
   type: str
   level: advanced
   desc: Keystone barbican user domain.
   services:
   - rgw
+  with_legacy: true
 - name: rgw_keystone_api_version
   type: int
   level: advanced
@@ -550,6 +626,7 @@ options:
   default: 2
   services:
   - rgw
+  with_legacy: true
 - name: rgw_keystone_accepted_roles
   type: str
   level: advanced
@@ -557,12 +634,14 @@ options:
   default: Member, admin
   services:
   - rgw
+  with_legacy: true
 - name: rgw_keystone_accepted_admin_roles
   type: str
   level: advanced
   desc: List of roles allowing user to gain admin privileges (Keystone).
   services:
   - rgw
+  with_legacy: true
 - name: rgw_keystone_token_cache_size
   type: int
   level: advanced
@@ -572,6 +651,7 @@ options:
   default: 10000
   services:
   - rgw
+  with_legacy: true
 - name: rgw_keystone_verify_ssl
   type: bool
   level: advanced
@@ -579,6 +659,7 @@ options:
   default: true
   services:
   - rgw
+  with_legacy: true
 - name: rgw_keystone_implicit_tenants
   type: str
   level: advanced
@@ -597,6 +678,7 @@ options:
   - '0'
   - '1'
   - none
+  with_legacy: true
 - name: rgw_cross_domain_policy
   type: str
   level: advanced
@@ -606,12 +688,14 @@ options:
   default: <allow-access-from domain="*" secure="false" />
   services:
   - rgw
+  with_legacy: true
 - name: rgw_healthcheck_disabling_path
   type: str
   level: dev
   desc: Swift health check api can be disabled if a file can be accessed in this path.
   services:
   - rgw
+  with_legacy: true
 - name: rgw_s3_auth_use_rados
   type: bool
   level: advanced
@@ -619,6 +703,7 @@ options:
   default: true
   services:
   - rgw
+  with_legacy: true
 - name: rgw_s3_auth_use_keystone
   type: bool
   level: advanced
@@ -626,6 +711,7 @@ options:
   default: false
   services:
   - rgw
+  with_legacy: true
 - name: rgw_s3_auth_order
   type: str
   level: advanced
@@ -637,12 +723,15 @@ options:
   default: sts, external, local
   services:
   - rgw
+  with_legacy: true
 - name: rgw_barbican_url
   type: str
   level: advanced
   desc: URL to barbican server.
   services:
   - rgw
+  with_legacy: true
+# OpenLDAP-style LDAP parameter strings
 - name: rgw_ldap_uri
   type: str
   level: advanced
@@ -650,6 +739,7 @@ options:
   default: ldaps://<ldap.your.domain>
   services:
   - rgw
+  with_legacy: true
 - name: rgw_ldap_binddn
   type: str
   level: advanced
@@ -657,6 +747,7 @@ options:
   default: uid=admin,cn=users,dc=example,dc=com
   services:
   - rgw
+  with_legacy: true
 - name: rgw_ldap_searchdn
   type: str
   level: advanced
@@ -664,6 +755,7 @@ options:
   default: cn=users,cn=accounts,dc=example,dc=com
   services:
   - rgw
+  with_legacy: true
 - name: rgw_ldap_dnattr
   type: str
   level: advanced
@@ -671,6 +763,7 @@ options:
   default: uid
   services:
   - rgw
+  with_legacy: true
 - name: rgw_ldap_secret
   type: str
   level: advanced
@@ -678,6 +771,7 @@ options:
   default: /etc/openldap/secret
   services:
   - rgw
+  with_legacy: true
 - name: rgw_s3_auth_use_ldap
   type: bool
   level: advanced
@@ -685,24 +779,28 @@ options:
   default: false
   services:
   - rgw
+  with_legacy: true
 - name: rgw_ldap_searchfilter
   type: str
   level: advanced
   desc: LDAP search filter.
   services:
   - rgw
+  with_legacy: true
 - name: rgw_opa_url
   type: str
   level: advanced
   desc: URL to OPA server.
   services:
   - rgw
+  with_legacy: true
 - name: rgw_opa_token
   type: str
   level: advanced
   desc: The Bearer token OPA uses to authenticate client requests.
   services:
   - rgw
+  with_legacy: true
 - name: rgw_opa_verify_ssl
   type: bool
   level: advanced
@@ -710,6 +808,7 @@ options:
   default: true
   services:
   - rgw
+  with_legacy: true
 - name: rgw_use_opa_authz
   type: bool
   level: advanced
@@ -717,6 +816,7 @@ options:
   default: false
   services:
   - rgw
+  with_legacy: true
 - name: rgw_admin_entry
   type: str
   level: advanced
@@ -724,6 +824,7 @@ options:
   default: admin
   services:
   - rgw
+  with_legacy: true
 - name: rgw_enforce_swift_acls
   type: bool
   level: advanced
@@ -733,6 +834,7 @@ options:
   default: true
   services:
   - rgw
+  with_legacy: true
 - name: rgw_swift_token_expiration
   type: int
   level: advanced
@@ -740,6 +842,7 @@ options:
   default: 1_day
   services:
   - rgw
+  with_legacy: true
 - name: rgw_print_continue
   type: bool
   level: advanced
@@ -749,6 +852,7 @@ options:
   default: true
   services:
   - rgw
+  with_legacy: true
 - name: rgw_print_prohibited_content_length
   type: bool
   level: advanced
@@ -758,6 +862,7 @@ options:
   default: false
   services:
   - rgw
+  with_legacy: true
 - name: rgw_remote_addr_param
   type: str
   level: advanced
@@ -772,6 +877,7 @@ options:
   - rgw
   see_also:
   - rgw_enable_ops_log
+  with_legacy: true
 - name: rgw_op_thread_timeout
   type: int
   level: dev
@@ -779,12 +885,14 @@ options:
   default: 10_min
   services:
   - rgw
+  with_legacy: true
 - name: rgw_op_thread_suicide_timeout
   type: int
   level: dev
   default: 0
   services:
   - rgw
+  with_legacy: true
 - name: rgw_thread_pool_size
   type: int
   level: basic
@@ -796,6 +904,7 @@ options:
   default: 512
   services:
   - rgw
+  with_legacy: true
 - name: rgw_num_control_oids
   type: int
   level: advanced
@@ -808,6 +917,7 @@ options:
   default: 8
   services:
   - rgw
+  with_legacy: true
 - name: rgw_verify_ssl
   type: bool
   level: advanced
@@ -820,30 +930,43 @@ options:
   - rgw
   see_also:
   - rgw_keystone_verify_ssl
+  with_legacy: true
+# The following are tunables for caches of RGW NFS (and other file
+# client) objects.
+#
+# The file handle cache is a partitioned hash table
+# (fhcache_partitions), each with a closed hash part and backing
+# b-tree mapping.  The number of partions is expected to be a small
+# prime, the cache size something larger but less than 5K, the total
+# size of the cache is n_part *  cache_size.
 - name: rgw_nfs_lru_lanes
   type: int
   level: advanced
   default: 5
   services:
   - rgw
+  with_legacy: true
 - name: rgw_nfs_lru_lane_hiwat
   type: int
   level: advanced
   default: 911
   services:
   - rgw
+  with_legacy: true
 - name: rgw_nfs_fhcache_partitions
   type: int
   level: advanced
   default: 3
   services:
   - rgw
+  with_legacy: true
 - name: rgw_nfs_fhcache_size
   type: int
   level: advanced
   default: 2017
   services:
   - rgw
+  with_legacy: true
 - name: rgw_nfs_namespace_expire_secs
   type: int
   level: advanced
@@ -851,6 +974,7 @@ options:
   services:
   - rgw
   min: 1
+  with_legacy: true
 - name: rgw_nfs_max_gc
   type: int
   level: advanced
@@ -858,12 +982,15 @@ options:
   services:
   - rgw
   min: 1
+  with_legacy: true
 - name: rgw_nfs_write_completion_interval_s
   type: int
   level: advanced
   default: 10
   services:
   - rgw
+  with_legacy: true
+# use fast S3 attrs from bucket index--currently assumes NFS mounts are immutable
 - name: rgw_nfs_s3_fast_attrs
   type: bool
   level: advanced
@@ -872,6 +999,8 @@ options:
   default: false
   services:
   - rgw
+  with_legacy: true
+# overrides for librgw/nfs
 - name: rgw_nfs_run_gc_threads
   type: bool
   level: advanced
@@ -879,6 +1008,7 @@ options:
   default: false
   services:
   - rgw
+  with_legacy: true
 - name: rgw_nfs_run_lc_threads
   type: bool
   level: advanced
@@ -886,6 +1016,7 @@ options:
   default: false
   services:
   - rgw
+  with_legacy: true
 - name: rgw_nfs_run_quota_threads
   type: bool
   level: advanced
@@ -893,6 +1024,7 @@ options:
   default: false
   services:
   - rgw
+  with_legacy: true
 - name: rgw_nfs_run_sync_thread
   type: bool
   level: advanced
@@ -900,6 +1032,7 @@ options:
   default: false
   services:
   - rgw
+  with_legacy: true
 - name: rgw_rados_pool_autoscale_bias
   type: float
   level: advanced
@@ -936,6 +1069,7 @@ options:
   see_also:
   - rgw_zonegroup
   - rgw_realm
+  with_legacy: true
 - name: rgw_zone_root_pool
   type: str
   level: advanced
@@ -948,6 +1082,7 @@ options:
   - rgw_zonegroup_root_pool
   - rgw_realm_root_pool
   - rgw_period_root_pool
+  with_legacy: true
 - name: rgw_default_zone_info_oid
   type: str
   level: advanced
@@ -956,6 +1091,7 @@ options:
   default: default.zone
   services:
   - rgw
+  with_legacy: true
 - name: rgw_region
   type: str
   level: advanced
@@ -965,6 +1101,7 @@ options:
   - rgw
   see_also:
   - rgw_zonegroup
+  with_legacy: true
 - name: rgw_region_root_pool
   type: str
   level: advanced
@@ -975,6 +1112,7 @@ options:
   - rgw
   see_also:
   - rgw_zonegroup_root_pool
+  with_legacy: true
 - name: rgw_default_region_info_oid
   type: str
   level: advanced
@@ -986,6 +1124,7 @@ options:
   - rgw
   see_also:
   - rgw_default_zonegroup_info_oid
+  with_legacy: true
 - name: rgw_zonegroup
   type: str
   level: advanced
@@ -995,6 +1134,7 @@ options:
   see_also:
   - rgw_zone
   - rgw_realm
+  with_legacy: true
 - name: rgw_zonegroup_root_pool
   type: str
   level: advanced
@@ -1008,17 +1148,20 @@ options:
   - rgw_zone_root_pool
   - rgw_realm_root_pool
   - rgw_period_root_pool
+  with_legacy: true
 - name: rgw_default_zonegroup_info_oid
   type: str
   level: advanced
   default: default.zonegroup
   services:
   - rgw
+  with_legacy: true
 - name: rgw_realm
   type: str
   level: advanced
   services:
   - rgw
+  with_legacy: true
 - name: rgw_realm_root_pool
   type: str
   level: advanced
@@ -1031,12 +1174,14 @@ options:
   - rgw_zonegroup_root_pool
   - rgw_zone_root_pool
   - rgw_period_root_pool
+  with_legacy: true
 - name: rgw_default_realm_info_oid
   type: str
   level: advanced
   default: default.realm
   services:
   - rgw
+  with_legacy: true
 - name: rgw_period_root_pool
   type: str
   level: advanced
@@ -1050,12 +1195,14 @@ options:
   - rgw_zonegroup_root_pool
   - rgw_zone_root_pool
   - rgw_realm_root_pool
+  with_legacy: true
 - name: rgw_period_latest_epoch_info_oid
   type: str
   level: dev
   default: .latest_epoch
   services:
   - rgw
+  with_legacy: true
 - name: rgw_log_nonexistent_bucket
   type: bool
   level: advanced
@@ -1068,6 +1215,8 @@ options:
   - rgw
   see_also:
   - rgw_enable_ops_log
+  with_legacy: true
+# man date to see codes (a subset are supported)
 - name: rgw_log_object_name
   type: str
   level: advanced
@@ -1079,6 +1228,7 @@ options:
   - rgw
   see_also:
   - rgw_enable_ops_log
+  with_legacy: true
 - name: rgw_log_object_name_utc
   type: bool
   level: advanced
@@ -1091,6 +1241,7 @@ options:
   see_also:
   - rgw_enable_ops_log
   - rgw_log_object_name
+  with_legacy: true
 - name: rgw_usage_max_shards
   type: int
   level: advanced
@@ -1102,6 +1253,7 @@ options:
   - rgw
   see_also:
   - rgw_enable_usage_log
+  with_legacy: true
 - name: rgw_usage_max_user_shards
   type: int
   level: advanced
@@ -1113,6 +1265,8 @@ options:
   see_also:
   - rgw_enable_usage_log
   min: 1
+  with_legacy: true
+# enable logging every rgw operation
 - name: rgw_enable_ops_log
   type: bool
   level: advanced
@@ -1125,6 +1279,8 @@ options:
   - rgw_log_object_name
   - rgw_ops_log_rados
   - rgw_ops_log_socket_path
+  with_legacy: true
+# enable logging bandwidth usage
 - name: rgw_enable_usage_log
   type: bool
   level: advanced
@@ -1134,6 +1290,8 @@ options:
   - rgw
   see_also:
   - rgw_usage_max_shards
+  with_legacy: true
+# whether ops log should go to rados
 - name: rgw_ops_log_rados
   type: bool
   level: advanced
@@ -1144,6 +1302,8 @@ options:
   - rgw
   see_also:
   - rgw_enable_ops_log
+  with_legacy: true
+# path to unix domain socket where ops log can go
 - name: rgw_ops_log_socket_path
   type: str
   level: advanced
@@ -1155,6 +1315,8 @@ options:
   see_also:
   - rgw_enable_ops_log
   - rgw_ops_log_data_backlog
+  with_legacy: true
+# max data backlog for ops log
 - name: rgw_ops_log_data_backlog
   type: size
   level: advanced
@@ -1169,6 +1331,8 @@ options:
   see_also:
   - rgw_enable_ops_log
   - rgw_ops_log_socket_path
+  with_legacy: true
+# socket  backlog for fcgi
 - name: rgw_fcgi_socket_backlog
   type: int
   level: advanced
@@ -1181,6 +1345,7 @@ options:
   see_also:
   - rgw_host
   - rgw_socket_path
+  with_legacy: true
 - name: rgw_usage_log_flush_threshold
   type: int
   level: advanced
@@ -1195,6 +1360,7 @@ options:
   see_also:
   - rgw_enable_usage_log
   - rgw_usage_log_tick_interval
+  with_legacy: true
 - name: rgw_usage_log_tick_interval
   type: int
   level: advanced
@@ -1208,6 +1374,7 @@ options:
   see_also:
   - rgw_enable_usage_log
   - rgw_usage_log_flush_threshold
+  with_legacy: true
 - name: rgw_init_timeout
   type: int
   level: basic
@@ -1218,6 +1385,7 @@ options:
   default: 5_min
   services:
   - rgw
+  with_legacy: true
 - name: rgw_mime_types_file
   type: str
   level: basic
@@ -1228,6 +1396,7 @@ options:
   default: /etc/mime.types
   services:
   - rgw
+  with_legacy: true
 - name: rgw_gc_max_objs
   type: int
   level: advanced
@@ -1242,6 +1411,8 @@ options:
   - rgw_gc_processor_max_time
   - rgw_gc_processor_period
   - rgw_gc_max_concurrent_io
+  with_legacy: true
+# wait time before object may be handled by gc, recommended lower limit is 30 mins
 - name: rgw_gc_obj_min_wait
   type: int
   level: advanced
@@ -1258,6 +1429,7 @@ options:
   - rgw_gc_processor_max_time
   - rgw_gc_processor_period
   - rgw_gc_max_concurrent_io
+  with_legacy: true
 - name: rgw_gc_processor_max_time
   type: int
   level: advanced
@@ -1277,6 +1449,7 @@ options:
   - rgw_gc_obj_min_wait
   - rgw_gc_processor_period
   - rgw_gc_max_concurrent_io
+  with_legacy: true
 - name: rgw_gc_processor_period
   type: int
   level: advanced
@@ -1293,6 +1466,7 @@ options:
   - rgw_gc_processor_max_time
   - rgw_gc_max_concurrent_io
   - rgw_gc_max_trim_chunk
+  with_legacy: true
 - name: rgw_gc_max_concurrent_io
   type: int
   level: advanced
@@ -1307,6 +1481,7 @@ options:
   - rgw_gc_obj_min_wait
   - rgw_gc_processor_max_time
   - rgw_gc_max_trim_chunk
+  with_legacy: true
 - name: rgw_gc_max_trim_chunk
   type: int
   level: advanced
@@ -1319,6 +1494,7 @@ options:
   - rgw_gc_obj_min_wait
   - rgw_gc_processor_max_time
   - rgw_gc_max_concurrent_io
+  with_legacy: true
 - name: rgw_gc_max_deferred_entries_size
   type: uint
   level: advanced
@@ -1326,6 +1502,7 @@ options:
   default: 3_K
   services:
   - rgw
+  with_legacy: true
 - name: rgw_gc_max_queue_size
   type: uint
   level: advanced
@@ -1338,6 +1515,7 @@ options:
   see_also:
   - osd_max_object_size
   - rgw_gc_max_deferred_entries_size
+  with_legacy: true
 - name: rgw_gc_max_deferred
   type: uint
   level: advanced
@@ -1345,6 +1523,7 @@ options:
   default: 50
   services:
   - rgw
+  with_legacy: true
 - name: rgw_s3_success_create_obj_status
   type: int
   level: advanced
@@ -1354,6 +1533,7 @@ options:
   default: 0
   services:
   - rgw
+  with_legacy: true
 - name: rgw_s3_client_max_sig_ver
   type: int
   level: advanced
@@ -1373,6 +1553,7 @@ options:
   default: false
   services:
   - rgw
+  with_legacy: true
 - name: rgw_obj_stripe_size
   type: size
   level: advanced
@@ -1383,6 +1564,8 @@ options:
   default: 4_M
   services:
   - rgw
+  with_legacy: true
+# list of extended attrs that can be set on objects (beyond the default)
 - name: rgw_extended_http_attrs
   type: str
   level: advanced
@@ -1392,6 +1575,7 @@ options:
     set, these attributes will return as HTTP fields when doing GET/HEAD on the object.
   services:
   - rgw
+  with_legacy: true
 - name: rgw_exit_timeout_secs
   type: int
   level: advanced
@@ -1400,6 +1584,7 @@ options:
   default: 2_min
   services:
   - rgw
+  with_legacy: true
 - name: rgw_get_obj_window_size
   type: size
   level: advanced
@@ -1408,6 +1593,7 @@ options:
   default: 16_M
   services:
   - rgw
+  with_legacy: true
 - name: rgw_get_obj_max_req_size
   type: size
   level: advanced
@@ -1416,6 +1602,7 @@ options:
   default: 4_M
   services:
   - rgw
+  with_legacy: true
 - name: rgw_relaxed_s3_bucket_names
   type: bool
   level: advanced
@@ -1424,6 +1611,7 @@ options:
   default: false
   services:
   - rgw
+  with_legacy: true
 - name: rgw_defer_to_bucket_acls
   type: str
   level: advanced
@@ -1433,6 +1621,7 @@ options:
     users that have full control permission on the bucket have access to the object.
   services:
   - rgw
+  with_legacy: true
 - name: rgw_list_buckets_max_chunk
   type: int
   level: advanced
@@ -1443,6 +1632,7 @@ options:
   default: 1000
   services:
   - rgw
+  with_legacy: true
 - name: rgw_md_log_max_shards
   type: int
   level: advanced
@@ -1453,6 +1643,7 @@ options:
   default: 64
   services:
   - rgw
+  with_legacy: true
 - name: rgw_curl_buffersize
   type: int
   level: dev
@@ -1463,12 +1654,14 @@ options:
   - rgw
   min: 1024
   max: 524288
+  with_legacy: true
 - name: rgw_curl_wait_timeout_ms
   type: int
   level: dev
   default: 1000
   services:
   - rgw
+  with_legacy: true
 - name: rgw_curl_low_speed_limit
   type: int
   level: advanced
@@ -1478,6 +1671,7 @@ options:
   default: 1024
   services:
   - rgw
+  with_legacy: true
 - name: rgw_curl_low_speed_time
   type: int
   level: advanced
@@ -1487,6 +1681,7 @@ options:
   default: 5_min
   services:
   - rgw
+  with_legacy: true
 - name: rgw_copy_obj_progress
   type: bool
   level: advanced
@@ -1495,6 +1690,7 @@ options:
   default: true
   services:
   - rgw
+  with_legacy: true
 - name: rgw_copy_obj_progress_every_bytes
   type: size
   level: advanced
@@ -1502,6 +1698,7 @@ options:
   default: 1_M
   services:
   - rgw
+  with_legacy: true
 - name: rgw_sync_obj_etag_verify
   type: bool
   level: advanced
@@ -1513,6 +1710,7 @@ options:
   default: false
   services:
   - rgw
+  with_legacy: true
 - name: rgw_obj_tombstone_cache_size
   type: int
   level: advanced
@@ -1523,6 +1721,7 @@ options:
   default: 1000
   services:
   - rgw
+  with_legacy: true
 - name: rgw_data_log_window
   type: int
   level: advanced
@@ -1533,6 +1732,7 @@ options:
   default: 30
   services:
   - rgw
+  with_legacy: true
 - name: rgw_data_log_changes_size
   type: int
   level: dev
@@ -1542,6 +1742,7 @@ options:
   default: 1000
   services:
   - rgw
+  with_legacy: true
 - name: rgw_data_log_num_shards
   type: int
   level: advanced
@@ -1552,12 +1753,14 @@ options:
   default: 128
   services:
   - rgw
+  with_legacy: true
 - name: rgw_data_log_obj_prefix
   type: str
   level: dev
   default: data_log
   services:
   - rgw
+  with_legacy: true
 - name: rgw_bucket_quota_ttl
   type: int
   level: advanced
@@ -1566,6 +1769,7 @@ options:
   default: 10_min
   services:
   - rgw
+  with_legacy: true
 - name: rgw_bucket_quota_soft_threshold
   type: float
   level: basic
@@ -1577,6 +1781,7 @@ options:
   default: 0.95
   services:
   - rgw
+  with_legacy: true
 - name: rgw_bucket_quota_cache_size
   type: int
   level: advanced
@@ -1585,6 +1790,7 @@ options:
   default: 10000
   services:
   - rgw
+  with_legacy: true
 - name: rgw_bucket_default_quota_max_objects
   type: int
   level: basic
@@ -1594,6 +1800,7 @@ options:
   default: -1
   services:
   - rgw
+  with_legacy: true
 - name: rgw_bucket_default_quota_max_size
   type: int
   level: advanced
@@ -1603,6 +1810,7 @@ options:
   default: -1
   services:
   - rgw
+  with_legacy: true
 - name: rgw_expose_bucket
   type: bool
   level: advanced
@@ -1612,6 +1820,7 @@ options:
   default: false
   services:
   - rgw
+  with_legacy: true
 - name: rgw_frontends
   type: str
   level: basic
@@ -1622,6 +1831,7 @@ options:
   default: beast port=7480
   services:
   - rgw
+  with_legacy: true
 - name: rgw_frontend_defaults
   type: str
   level: advanced
@@ -1638,6 +1848,7 @@ options:
   default: 3_min
   services:
   - rgw
+  with_legacy: true
 - name: rgw_user_quota_sync_interval
   type: int
   level: advanced
@@ -1647,6 +1858,7 @@ options:
   default: 1_day
   services:
   - rgw
+  with_legacy: true
 - name: rgw_user_quota_sync_idle_users
   type: bool
   level: advanced
@@ -1655,6 +1867,7 @@ options:
   default: false
   services:
   - rgw
+  with_legacy: true
 - name: rgw_user_quota_sync_wait_time
   type: int
   level: advanced
@@ -1663,6 +1876,7 @@ options:
   default: 1_day
   services:
   - rgw
+  with_legacy: true
 - name: rgw_user_default_quota_max_objects
   type: int
   level: basic
@@ -1672,6 +1886,7 @@ options:
   default: -1
   services:
   - rgw
+  with_legacy: true
 - name: rgw_user_default_quota_max_size
   type: int
   level: basic
@@ -1681,6 +1896,7 @@ options:
   default: -1
   services:
   - rgw
+  with_legacy: true
 - name: rgw_multipart_min_part_size
   type: size
   level: advanced
@@ -1690,6 +1906,7 @@ options:
   default: 5_M
   services:
   - rgw
+  with_legacy: true
 - name: rgw_multipart_part_upload_limit
   type: int
   level: advanced
@@ -1697,6 +1914,7 @@ options:
   default: 10000
   services:
   - rgw
+  with_legacy: true
 - name: rgw_max_slo_entries
   type: int
   level: advanced
@@ -1704,6 +1922,7 @@ options:
   default: 1000
   services:
   - rgw
+  with_legacy: true
 - name: rgw_olh_pending_timeout_sec
   type: int
   level: dev
@@ -1714,6 +1933,7 @@ options:
   default: 1_hr
   services:
   - rgw
+  with_legacy: true
 - name: rgw_user_max_buckets
   type: int
   level: basic
@@ -1724,6 +1944,7 @@ options:
   default: 1000
   services:
   - rgw
+  with_legacy: true
 - name: rgw_objexp_gc_interval
   type: uint
   level: advanced
@@ -1731,6 +1952,7 @@ options:
   default: 600
   services:
   - rgw
+  with_legacy: true
 - name: rgw_objexp_hints_num_shards
   type: uint
   level: advanced
@@ -1739,12 +1961,15 @@ options:
   default: 127
   services:
   - rgw
+  with_legacy: true
+# maximum number of entries in a single operation when processing objexp data
 - name: rgw_objexp_chunk_size
   type: uint
   level: dev
   default: 100
   services:
   - rgw
+  with_legacy: true
 - name: rgw_enable_static_website
   type: bool
   level: basic
@@ -1755,6 +1980,7 @@ options:
   default: false
   services:
   - rgw
+  with_legacy: true
 - name: rgw_user_unique_email
   type: bool
   level: basic
@@ -1773,6 +1999,7 @@ options:
     (e.g., http_x_forwarded_for).
   services:
   - rgw
+  with_legacy: true
 - name: rgw_num_async_rados_threads
   type: int
   level: advanced
@@ -1783,6 +2010,7 @@ options:
   default: 32
   services:
   - rgw
+  with_legacy: true
 - name: rgw_md_notify_interval_msec
   type: int
   level: advanced
@@ -1793,6 +2021,7 @@ options:
   default: 200
   services:
   - rgw
+  with_legacy: true
 - name: rgw_run_sync_thread
   type: bool
   level: advanced
@@ -1800,12 +2029,14 @@ options:
   default: true
   services:
   - rgw
+  with_legacy: true
 - name: rgw_sync_lease_period
   type: int
   level: dev
   default: 2_min
   services:
   - rgw
+  with_legacy: true
 - name: rgw_sync_log_trim_interval
   type: int
   level: advanced
@@ -1814,6 +2045,7 @@ options:
   default: 20_min
   services:
   - rgw
+  with_legacy: true
 - name: rgw_sync_log_trim_max_buckets
   type: int
   level: advanced
@@ -1860,12 +2092,14 @@ options:
   default: 0
   services:
   - rgw
+  with_legacy: true
 - name: rgw_sync_meta_inject_err_probability
   type: float
   level: dev
   default: 0
   services:
   - rgw
+  with_legacy: true
 - name: rgw_sync_trace_history_size
   type: size
   level: advanced
@@ -1874,6 +2108,7 @@ options:
   default: 4_K
   services:
   - rgw
+  with_legacy: true
 - name: rgw_sync_trace_per_node_log_size
   type: int
   level: advanced
@@ -1882,6 +2117,7 @@ options:
   default: 32
   services:
   - rgw
+  with_legacy: true
 - name: rgw_sync_trace_servicemap_update_interval
   type: int
   level: advanced
@@ -1890,6 +2126,7 @@ options:
   default: 10
   services:
   - rgw
+  with_legacy: true
 - name: rgw_period_push_interval
   type: float
   level: advanced
@@ -1898,6 +2135,7 @@ options:
   default: 2
   services:
   - rgw
+  with_legacy: true
 - name: rgw_period_push_interval_max
   type: float
   level: advanced
@@ -1907,6 +2145,7 @@ options:
   default: 30
   services:
   - rgw
+  with_legacy: true
 - name: rgw_safe_max_objects_per_shard
   type: int
   level: advanced
@@ -1919,6 +2158,8 @@ options:
   - rgw
   see_also:
   - rgw_shard_warning_threshold
+  with_legacy: true
+# pct of safe max at which to warn
 - name: rgw_shard_warning_threshold
   type: float
   level: advanced
@@ -1930,6 +2171,7 @@ options:
   - rgw
   see_also:
   - rgw_safe_max_objects_per_shard
+  with_legacy: true
 - name: rgw_swift_versioning_enabled
   type: bool
   level: advanced
@@ -1937,6 +2179,7 @@ options:
   default: false
   services:
   - rgw
+  with_legacy: true
 - name: rgw_swift_custom_header
   type: str
   level: advanced
@@ -1946,6 +2189,7 @@ options:
     info and it will be available when listing the bucket.
   services:
   - rgw
+  with_legacy: true
 - name: rgw_swift_need_stats
   type: bool
   level: advanced
@@ -1953,6 +2197,7 @@ options:
   default: true
   services:
   - rgw
+  with_legacy: true
 - name: rgw_reshard_num_logs
   type: uint
   level: advanced
@@ -2017,6 +2262,7 @@ options:
   - rgw
   see_also:
   - rgw_crypt_require_ssl
+  with_legacy: true
 - name: rgw_crypt_require_ssl
   type: bool
   level: advanced
@@ -2024,11 +2270,14 @@ options:
   default: true
   services:
   - rgw
+  with_legacy: true
+# base64 encoded key for encryption of rgw objects
 - name: rgw_crypt_default_encryption_key
   type: str
   level: dev
   services:
   - rgw
+  with_legacy: true
 - name: rgw_crypt_s3_kms_backend
   type: str
   level: advanced
@@ -2042,15 +2291,19 @@ options:
   - vault
   - testing
   - kmip
+  with_legacy: true
+# extra keys that may be used for aws:kms
+# defined as map "key1=YmluCmJvb3N0CmJvb3N0LQ== key2=b3V0CnNyYwpUZXN0aW5nCg=="
 - name: rgw_crypt_s3_kms_encryption_keys
   type: str
   level: dev
   services:
   - rgw
+  with_legacy: true
 - name: rgw_crypt_vault_auth
   type: str
   level: advanced
-  desc: 'Type of authentication method to be used with Vault. '
+  desc: Type of authentication method to be used with Vault.
   default: token
   services:
   - rgw
@@ -2061,6 +2314,7 @@ options:
   enum_values:
   - token
   - agent
+  with_legacy: true
 - name: rgw_crypt_vault_token_file
   type: str
   level: advanced
@@ -2072,6 +2326,7 @@ options:
   - rgw_crypt_s3_kms_backend
   - rgw_crypt_vault_auth
   - rgw_crypt_vault_addr
+  with_legacy: true
 - name: rgw_crypt_vault_addr
   type: str
   level: advanced
@@ -2082,6 +2337,8 @@ options:
   - rgw_crypt_s3_kms_backend
   - rgw_crypt_vault_auth
   - rgw_crypt_vault_prefix
+  with_legacy: true
+# Optional URL prefix to Vault secret path
 - name: rgw_crypt_vault_prefix
   type: str
   level: advanced
@@ -2093,6 +2350,8 @@ options:
   - rgw_crypt_s3_kms_backend
   - rgw_crypt_vault_addr
   - rgw_crypt_vault_auth
+  with_legacy: true
+# kv, transit or other supported secret engines
 - name: rgw_crypt_vault_secret_engine
   type: str
   level: advanced
@@ -2104,6 +2363,8 @@ options:
   - rgw_crypt_s3_kms_backend
   - rgw_crypt_vault_auth
   - rgw_crypt_vault_addr
+  with_legacy: true
+#  Vault Namespace (only availabe in Vault Enterprise Version)
 - name: rgw_crypt_vault_namespace
   type: str
   level: advanced
@@ -2114,48 +2375,56 @@ options:
   - rgw_crypt_s3_kms_backend
   - rgw_crypt_vault_auth
   - rgw_crypt_vault_addr
+  with_legacy: true
 - name: rgw_crypt_kmip_addr
   type: str
   level: advanced
   desc: kmip server address
   services:
   - rgw
+  with_legacy: true
 - name: rgw_crypt_kmip_ca_path
   type: str
   level: advanced
   desc: ca for kmip servers
   services:
   - rgw
+  with_legacy: true
 - name: rgw_crypt_kmip_username
   type: str
   level: advanced
   desc: when authenticating via username
   services:
   - rgw
+  with_legacy: true
 - name: rgw_crypt_kmip_password
   type: str
   level: advanced
   desc: optional w/ username
   services:
   - rgw
+  with_legacy: true
 - name: rgw_crypt_kmip_client_cert
   type: str
   level: advanced
   desc: connect using client certificate
   services:
   - rgw
+  with_legacy: true
 - name: rgw_crypt_kmip_client_key
   type: str
   level: advanced
   desc: connect using client certificate
   services:
   - rgw
+  with_legacy: true
 - name: rgw_crypt_kmip_kms_key_template
   type: str
   level: advanced
   desc: sse-kms; kmip key names
   services:
   - rgw
+  with_legacy: true
 - name: rgw_crypt_kmip_s3_key_template
   type: str
   level: advanced
@@ -2163,6 +2432,7 @@ options:
   default: $keyid
   services:
   - rgw
+  with_legacy: true
 - name: rgw_crypt_suppress_logs
   type: bool
   level: advanced
@@ -2170,6 +2440,7 @@ options:
   default: true
   services:
   - rgw
+  with_legacy: true
 - name: rgw_list_bucket_min_readahead
   type: int
   level: advanced
@@ -2177,6 +2448,7 @@ options:
   default: 1000
   services:
   - rgw
+  with_legacy: true
 - name: rgw_rest_getusage_op_compat
   type: bool
   level: advanced
@@ -2184,6 +2456,8 @@ options:
   default: false
   services:
   - rgw
+  with_legacy: true
+# The following are tunables for torrent data
 - name: rgw_torrent_flag
   type: bool
   level: advanced
@@ -2192,30 +2466,35 @@ options:
   default: false
   services:
   - rgw
+  with_legacy: true
 - name: rgw_torrent_tracker
   type: str
   level: advanced
   desc: Torrent field announce and announce list
   services:
   - rgw
+  with_legacy: true
 - name: rgw_torrent_createby
   type: str
   level: advanced
   desc: torrent field created by
   services:
   - rgw
+  with_legacy: true
 - name: rgw_torrent_comment
   type: str
   level: advanced
   desc: Torrent field comment
   services:
   - rgw
+  with_legacy: true
 - name: rgw_torrent_encoding
   type: str
   level: advanced
   desc: torrent field encoding
   services:
   - rgw
+  with_legacy: true
 - name: rgw_data_notify_interval_msec
   type: int
   level: advanced
@@ -2229,12 +2508,14 @@ options:
   desc: Torrent origin
   services:
   - rgw
+  with_legacy: true
 - name: rgw_torrent_sha_unit
   type: size
   level: advanced
   default: 512_K
   services:
   - rgw
+  with_legacy: true
 - name: rgw_dynamic_resharding
   type: bool
   level: basic
@@ -2340,6 +2621,7 @@ options:
   default: sts
   services:
   - rgw
+  with_legacy: true
 - name: rgw_sts_key
   type: str
   level: advanced
@@ -2348,6 +2630,8 @@ options:
   default: sts
   services:
   - rgw
+  with_legacy: true
+# should we try to use sts for s3?
 - name: rgw_s3_auth_use_sts
   type: bool
   level: advanced
@@ -2355,6 +2639,7 @@ options:
   default: false
   services:
   - rgw
+  with_legacy: true
 - name: rgw_sts_max_session_duration
   type: uint
   level: advanced
@@ -2363,6 +2648,7 @@ options:
   default: 43200
   services:
   - rgw
+  with_legacy: true
 - name: rgw_sts_min_session_duration
   type: uint
   level: advanced
@@ -2370,6 +2656,7 @@ options:
   default: 900
   services:
   - rgw
+  with_legacy: true
 - name: rgw_max_listing_results
   type: uint
   level: advanced
@@ -2390,6 +2677,7 @@ options:
   long_desc: URL for introspecting an STS Web Token.
   services:
   - rgw
+  with_legacy: true
 - name: rgw_sts_client_id
   type: str
   level: advanced
@@ -2397,6 +2685,7 @@ options:
   long_desc: Client Id needed for introspecting a Web Token.
   services:
   - rgw
+  with_legacy: true
 - name: rgw_sts_client_secret
   type: str
   level: advanced
@@ -2404,6 +2693,7 @@ options:
   long_desc: Client Secret needed for introspecting a Web Token.
   services:
   - rgw
+  with_legacy: true
 - name: rgw_max_concurrent_requests
   type: int
   level: basic
index 34e2593864e380b1b4aee1ad4f650510d9bcf5bd..8064177296f23be380c197df5527d9bbf8752d58 100755 (executable)
@@ -6,6 +6,7 @@ import math
 import os
 import sys
 
+# flake8: noqa: E127
 
 def type_to_cxx(t):
     return f'Option::TYPE_{t.upper()}'
@@ -185,6 +186,21 @@ def yaml_to_cxx(opt, indent):
     return cxx
 
 
+def type_to_h(t):
+    if t == 'uint':
+        return 'OPT_U32'
+    return f'OPT_{t.upper()}'
+
+
+def yaml_to_h(opt):
+    if opt.get('with_legacy', False):
+        name = opt['name']
+        typ = opt['type']
+        htyp = type_to_h(typ)
+        return f'OPTION({name}, {htyp})'
+    else:
+        return ''
+
 TEMPLATE_CC = '''#include "common/options.h"
 {headers}
 
@@ -208,21 +224,24 @@ def translate(opts):
         name = os.path.split(opts.input)[-1]
         name = name.rsplit('.', 1)[0]
     name = name.replace('-', '_')
-    with open(opts.input) as infile, open(opts.output, 'w') as outfile:
+    # noqa: E127
+    with open(opts.input) as infile, \
+         open(opts.output, 'w') as cc_file, \
+         open(opts.legacy, 'w') as h_file:
         yml = yaml.safe_load(infile)
         headers = yml.get('headers', '')
-        outfile.write(prelude.format(name=name, headers=headers))
+        cc_file.write(prelude.format(name=name, headers=headers))
         options = yml['options']
         for option in options:
             try:
-                cxx = yaml_to_cxx(option, opts.indent)
-                outfile.write(cxx)
-                outfile.write('\n')
+                cc_file.write(yaml_to_cxx(option, opts.indent) + '\n')
+                if option.get('with_legacy', False):
+                    h_file.write(yaml_to_h(option) + '\n')
             except ValueError as e:
                 print(f'failed to translate option "{name}": {e}',
                       file=sys.stderr)
                 return 1
-        outfile.write(epilogue.replace("}}", "}"))
+        cc_file.write(epilogue.replace("}}", "}"))
 
 
 def readable_size(value, typ):
@@ -302,6 +321,9 @@ def main():
     parser.add_argument('-o', '--output', dest='output',
                         default='options',
                         help='the path to the generated .cc file')
+    parser.add_argument('--legacy', dest='legacy',
+                        default='legacy_options',
+                        help='the path to the generated legacy .h file')
     parser.add_argument('--indent', type=int,
                         default=4,
                         help='the number of spaces added before each line')