]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
common,rbd,rgw,osd: extract config values into ConfigValues
authorKefu Chai <kchai@redhat.com>
Fri, 6 Jul 2018 09:20:32 +0000 (17:20 +0800)
committerKefu Chai <kchai@redhat.com>
Tue, 10 Jul 2018 14:51:22 +0000 (22:51 +0800)
this change introduce three classes: ConfigValues, ConfigProxy and
ConfigReader. in seastar port of OSD, each CPU shard will hold its own
reference of configuration, and upon changes of settings, each
shard will be updated with the new setting in async. so this forces us
to be able to keep two set of configuration at the same time. so we
need to extract the changeable part of md_config_t out. so we can
replace the old one with new one on demand, and let different shards
share the same unchanged part, amon the other things, the Options map
and the lookup tables. that's why we need ConfigValues. we will add
a policy template for this class, so we can specialize for Seastar
implementation to allow different ConfigProxy instances to point
md_config_impl<> to different ConfigValues.

because the observer interface is still using md_config_t, to minimise
the impact of this change, handle_conf_change() and
handle_subsys_change() are not changed. but as it accepts a `const
md_config_t`, which cannot be used to create/reference the ConfigProxy
holding it, we need to introduce ConfigReader for reading the updated
setting from md_config_t in a simpler way, without exposing the
internal "values" member variable.

Signed-off-by: Kefu Chai <kchai@redhat.com>
173 files changed:
src/CMakeLists.txt
src/auth/KeyRing.cc
src/ceph_mon.cc
src/ceph_osd.cc
src/ceph_syn.cc
src/client/Client.cc
src/common/HeartbeatMap.cc
src/common/LogClient.cc
src/common/PluginRegistry.cc
src/common/TracepointProvider.cc
src/common/TracepointProvider.h
src/common/WorkQueue.cc
src/common/ceph_context.cc
src/common/ceph_context.h
src/common/common_init.cc
src/common/config.cc
src/common/config.h
src/common/config_cacher.h
src/common/config_fwd.h
src/common/config_proxy.h [new file with mode: 0644]
src/common/config_values.cc [new file with mode: 0644]
src/common/config_values.h [new file with mode: 0644]
src/common/pick_address.cc
src/common/shared_cache.hpp
src/crush/CrushWrapper.cc
src/global/global_context.cc
src/global/global_context.h
src/global/global_init.cc
src/global/pidfile.cc
src/global/pidfile.h
src/global/signal_handler.cc
src/krbd.cc
src/kv/LevelDBStore.cc
src/kv/RocksDBStore.cc
src/libcephfs.cc
src/librados/RadosClient.h
src/librados/librados.cc
src/librbd/ImageCtx.cc
src/librbd/ImageState.cc
src/librbd/ImageWatcher.cc
src/librbd/Journal.cc
src/librbd/Utils.cc
src/librbd/deep_copy/ImageCopyRequest.cc
src/librbd/image/CloneRequest.cc
src/librbd/image/CreateRequest.cc
src/librbd/internal.cc
src/librbd/librbd.cc
src/log/Log.cc
src/log/Log.h
src/log/SubsystemMap.h
src/mds/Beacon.cc
src/mds/CDir.cc
src/mds/CDir.h
src/mds/CInode.cc
src/mds/CInode.h
src/mds/DamageTable.cc
src/mds/FSMap.cc
src/mds/Locker.cc
src/mds/MDBalancer.cc
src/mds/MDCache.cc
src/mds/MDCache.h
src/mds/MDLog.cc
src/mds/MDSDaemon.cc
src/mds/MDSRank.cc
src/mds/MDSTableClient.cc
src/mds/MDSTableServer.cc
src/mds/Migrator.cc
src/mds/Migrator.h
src/mds/PurgeQueue.cc
src/mds/RecoveryQueue.cc
src/mds/ScrubStack.cc
src/mds/Server.cc
src/mds/SessionMap.cc
src/mds/journal.cc
src/mgr/ActivePyModules.cc
src/mgr/BaseMgrModule.cc
src/mgr/BaseMgrStandbyModule.cc
src/mgr/DaemonServer.cc
src/mgr/MgrClient.cc
src/mgr/MgrStandby.cc
src/mgr/PyModule.cc
src/mgr/PyModuleRegistry.cc
src/mgr/PyModuleRunner.cc
src/mon/AuthMonitor.cc
src/mon/ConfigKeyService.cc
src/mon/ConfigMonitor.cc
src/mon/Elector.cc
src/mon/FSCommands.cc
src/mon/HealthMonitor.cc
src/mon/LogMonitor.cc
src/mon/LogMonitor.h
src/mon/MDSMonitor.cc
src/mon/MgrMonitor.cc
src/mon/MonClient.cc
src/mon/MonMap.cc
src/mon/Monitor.cc
src/mon/Monitor.h
src/mon/MonitorDBStore.h
src/mon/MonmapMonitor.cc
src/mon/OSDMonitor.cc
src/mon/PGMap.cc
src/mon/Paxos.cc
src/mon/Paxos.h
src/mon/PaxosService.cc
src/mon/QuorumService.h
src/msg/Messenger.cc
src/msg/Messenger.h
src/msg/Policy.h
src/msg/async/AsyncConnection.cc
src/msg/async/AsyncMessenger.cc
src/msg/simple/Accepter.cc
src/msg/simple/Pipe.cc
src/os/FuseStore.cc
src/os/bluestore/BlueFS.h
src/os/bluestore/BlueStore.cc
src/os/bluestore/NVMEDevice.cc
src/os/filestore/FDCache.h
src/os/filestore/FileJournal.h
src/os/filestore/FileStore.cc
src/os/filestore/WBThrottle.cc
src/osd/ECBackend.cc
src/osd/OSD.cc
src/osd/OSD.h
src/osd/OSDMap.cc
src/osd/PG.cc
src/osd/PGBackend.cc
src/osd/PrimaryLogPG.cc
src/osd/ReplicatedBackend.cc
src/osd/Session.cc
src/osd/SnapMapper.cc
src/osdc/Journaler.cc
src/osdc/Objecter.cc
src/perfglue/heap_profiler.cc
src/rgw/rgw_cache.h
src/rgw/rgw_client_io_filters.h
src/rgw/rgw_cr_rados.cc
src/rgw/rgw_lc.cc
src/rgw/rgw_op.cc
src/rgw/rgw_op.h
src/rgw/rgw_rados.cc
src/rgw/rgw_rados.h
src/rgw/rgw_rest.cc
src/rgw/rgw_rest_s3.cc
src/rgw/rgw_sync_log_trim.cc
src/rgw/rgw_torrent.cc
src/test/confutils.cc
src/test/daemon_config.cc
src/test/librados_test_stub/LibradosTestStub.cc
src/test/librbd/journal/test_Entries.cc
src/test/librbd/test_internal.cc
src/test/objectstore/store_test_fixture.cc
src/test/rbd_mirror/image_map/test_Policy.cc
src/test/rbd_mirror/test_ImageReplayer.cc
src/tools/ceph_authtool.cc
src/tools/ceph_conf.cc
src/tools/monmaptool.cc
src/tools/rbd/Utils.cc
src/tools/rbd_mirror/ImageDeleter.cc
src/tools/rbd_mirror/ImageMap.cc
src/tools/rbd_mirror/ImageReplayer.cc
src/tools/rbd_mirror/ImageSync.cc
src/tools/rbd_mirror/ImageSyncThrottler.cc
src/tools/rbd_mirror/InstanceReplayer.cc
src/tools/rbd_mirror/InstanceWatcher.cc
src/tools/rbd_mirror/Instances.cc
src/tools/rbd_mirror/LeaderWatcher.cc
src/tools/rbd_mirror/Mirror.cc
src/tools/rbd_mirror/PoolReplayer.cc
src/tools/rbd_mirror/Threads.cc
src/tools/rbd_mirror/image_map/Policy.cc
src/tools/rbd_mirror/image_replayer/CreateImageRequest.cc
src/tools/rbd_mirror/image_replayer/PrepareRemoteImageRequest.cc
src/tools/rbd_nbd/rbd-nbd.cc

index 3868956ba5ae723f8f3712442d36b9b58701551f..c0db73d7a804b178b7b79d4ab913a2e84ede512a 100644 (file)
@@ -517,6 +517,7 @@ set(libcommon_files
   common/ceph_frag.cc
   common/options.cc
   common/config.cc
+  common/config_values.cc
   common/utf8.c
   common/mime.c
   common/strtol.cc
index c9e092e440074a1b2c83664930304c2701fcc71f..01bb9c761a29b5fa7b6504da23f61ba5d15cb752 100644 (file)
@@ -30,7 +30,7 @@
 
 int KeyRing::from_ceph_context(CephContext *cct)
 {
-  const md_config_t *conf = cct->_conf;
+  const auto& conf = cct->_conf;
   string filename;
 
   int ret = ceph_resolve_file_search(conf->keyring, filename);
index a195452a60f539671ded066847895d62e318c89d..efbdf3b6d2498c9b9277c0734ef9b385d094dd46 100644 (file)
@@ -104,7 +104,7 @@ int obtain_monmap(MonitorDBStore &store, bufferlist &bl)
 
 int check_mon_data_exists()
 {
-  string mon_data = g_conf->mon_data;
+  string mon_data = g_conf()->mon_data;
   struct stat buf;
   if (::stat(mon_data.c_str(), &buf)) {
     if (errno != ENOENT) {
@@ -128,7 +128,7 @@ int check_mon_data_exists()
  */
 int check_mon_data_empty()
 {
-  string mon_data = g_conf->mon_data;
+  string mon_data = g_conf()->mon_data;
 
   DIR *dir = ::opendir(mon_data.c_str());
   if (!dir) {
@@ -286,12 +286,12 @@ int main(int argc, const char **argv)
     exit(1);
   }
 
-  if (g_conf->mon_data.empty()) {
+  if (g_conf()->mon_data.empty()) {
     cerr << "must specify '--mon-data=foo' data path" << std::endl;
     exit(1);
   }
 
-  if (g_conf->name.get_id().empty()) {
+  if (g_conf()->name.get_id().empty()) {
     cerr << "must specify id (--id <id> or --name mon.<id>)" << std::endl;
     exit(1);
   }
@@ -301,13 +301,13 @@ int main(int argc, const char **argv)
 
     int err = check_mon_data_exists();
     if (err == -ENOENT) {
-      if (::mkdir(g_conf->mon_data.c_str(), 0755)) {
-       derr << "mkdir(" << g_conf->mon_data << ") : "
+      if (::mkdir(g_conf()->mon_data.c_str(), 0755)) {
+       derr << "mkdir(" << g_conf()->mon_data << ") : "
             << cpp_strerror(errno) << dendl;
        exit(1);
       }
     } else if (err < 0) {
-      derr << "error opening '" << g_conf->mon_data << "': "
+      derr << "error opening '" << g_conf()->mon_data << "': "
            << cpp_strerror(-err) << dendl;
       exit(-err);
     }
@@ -315,11 +315,11 @@ int main(int argc, const char **argv)
     err = check_mon_data_empty();
     if (err == -ENOTEMPTY) {
       // Mon may exist.  Let the user know and exit gracefully.
-      derr << "'" << g_conf->mon_data << "' already exists and is not empty"
+      derr << "'" << g_conf()->mon_data << "' already exists and is not empty"
            << ": monitor may already exist" << dendl;
       exit(0);
     } else if (err < 0) {
-      derr << "error checking if '" << g_conf->mon_data << "' is empty: "
+      derr << "error checking if '" << g_conf()->mon_data << "' is empty: "
            << cpp_strerror(-err) << dendl;
       exit(-err);
     }
@@ -334,7 +334,7 @@ int main(int argc, const char **argv)
     MonMap monmap;
 
     // load or generate monmap
-    const auto monmap_fn = g_conf->get_val<string>("monmap");
+    const auto monmap_fn = g_conf().get_val<string>("monmap");
     if (monmap_fn.length()) {
       int err = monmapbl.read_file(monmap_fn.c_str(), &error);
       if (err < 0) {
@@ -360,19 +360,19 @@ int main(int argc, const char **argv)
       }
 
       // am i part of the initial quorum?
-      if (monmap.contains(g_conf->name.get_id())) {
+      if (monmap.contains(g_conf()->name.get_id())) {
        // hmm, make sure the ip listed exists on the current host?
        // maybe later.
-      } else if (!g_conf->public_addr.is_blank_ip()) {
-       entity_addr_t a = g_conf->public_addr;
+      } else if (!g_conf()->public_addr.is_blank_ip()) {
+       entity_addr_t a = g_conf()->public_addr;
        if (a.get_port() == 0)
          a.set_port(CEPH_MON_PORT_LEGACY);
        if (monmap.contains(a)) {
          string name;
          monmap.get_addr_name(a, name);
-         monmap.rename(name, g_conf->name.get_id());
+         monmap.rename(name, g_conf()->name.get_id());
          dout(0) << argv[0] << ": renaming mon." << name << " " << a
-              << " to mon." << g_conf->name.get_id() << dendl;
+                 << " to mon." << g_conf()->name.get_id() << dendl;
        }
       } else {
        // is a local address listed without a name?  if so, name myself.
@@ -386,8 +386,8 @@ int main(int argc, const char **argv)
 
          if (name.compare(0, 7, "noname-") == 0) {
            dout(0) << argv[0] << ": mon." << name << " " << local
-                << " is local, renaming to mon." << g_conf->name.get_id() << dendl;
-           monmap.rename(name, g_conf->name.get_id());
+                   << " is local, renaming to mon." << g_conf()->name.get_id() << dendl;
+           monmap.rename(name, g_conf()->name.get_id());
          } else {
            dout(0) << argv[0] << ": mon." << name << " " << local
                 << " is local, but not 'noname-' + something; not assuming it's me" << dendl;
@@ -396,7 +396,7 @@ int main(int argc, const char **argv)
       }
     }
 
-    const auto fsid = g_conf->get_val<uuid_d>("fsid");
+    const auto fsid = g_conf().get_val<uuid_d>("fsid");
     if (!fsid.is_zero()) {
       monmap.fsid = fsid;
       dout(0) << argv[0] << ": set fsid to " << fsid << dendl;
@@ -420,49 +420,49 @@ int main(int argc, const char **argv)
     }
 
     // go
-    MonitorDBStore store(g_conf->mon_data);
+    MonitorDBStore store(g_conf()->mon_data);
     ostringstream oss;
     int r = store.create_and_open(oss);
     if (oss.tellp())
       derr << oss.str() << dendl;
     if (r < 0) {
       derr << argv[0] << ": error opening mon data directory at '"
-           << g_conf->mon_data << "': " << cpp_strerror(r) << dendl;
+           << g_conf()->mon_data << "': " << cpp_strerror(r) << dendl;
       exit(1);
     }
     assert(r == 0);
 
-    Monitor mon(g_ceph_context, g_conf->name.get_id(), &store, 0, 0, &monmap);
+    Monitor mon(g_ceph_context, g_conf()->name.get_id(), &store, 0, 0, &monmap);
     r = mon.mkfs(osdmapbl);
     if (r < 0) {
       derr << argv[0] << ": error creating monfs: " << cpp_strerror(r) << dendl;
       exit(1);
     }
     store.close();
-    dout(0) << argv[0] << ": created monfs at " << g_conf->mon_data 
-        << " for " << g_conf->name << dendl;
+    dout(0) << argv[0] << ": created monfs at " << g_conf()->mon_data 
+           << " for " << g_conf()->name << dendl;
     return 0;
   }
 
   err = check_mon_data_exists();
   if (err < 0 && err == -ENOENT) {
-    derr << "monitor data directory at '" << g_conf->mon_data << "'"
+    derr << "monitor data directory at '" << g_conf()->mon_data << "'"
          << " does not exist: have you run 'mkfs'?" << dendl;
     exit(1);
   } else if (err < 0) {
     derr << "error accessing monitor data directory at '"
-         << g_conf->mon_data << "': " << cpp_strerror(-err) << dendl;
+         << g_conf()->mon_data << "': " << cpp_strerror(-err) << dendl;
     exit(1);
   }
 
   err = check_mon_data_empty();
   if (err == 0) {
-    derr << "monitor data directory at '" << g_conf->mon_data
+    derr << "monitor data directory at '" << g_conf()->mon_data
       << "' is empty: have you run 'mkfs'?" << dendl;
     exit(1);
   } else if (err < 0 && err != -ENOTEMPTY) {
     // we don't want an empty data dir by now
-    derr << "error accessing '" << g_conf->mon_data << "': "
+    derr << "error accessing '" << g_conf()->mon_data << "': "
          << cpp_strerror(-err) << dendl;
     exit(1);
   }
@@ -470,18 +470,18 @@ int main(int argc, const char **argv)
   {
     // check fs stats. don't start if it's critically close to full.
     ceph_data_stats_t stats;
-    int err = get_fs_stats(stats, g_conf->mon_data.c_str());
+    int err = get_fs_stats(stats, g_conf()->mon_data.c_str());
     if (err < 0) {
       derr << "error checking monitor data's fs stats: " << cpp_strerror(err)
            << dendl;
       exit(-err);
     }
-    if (stats.avail_percent <= g_conf->mon_data_avail_crit) {
+    if (stats.avail_percent <= g_conf()->mon_data_avail_crit) {
       derr << "error: monitor data filesystem reached concerning levels of"
            << " available storage space (available: "
            << stats.avail_percent << "% " << byte_u_t(stats.byte_avail)
            << ")\nyou may adjust 'mon data avail crit' to a lower value"
-           << " to make this go away (default: " << g_conf->mon_data_avail_crit
+           << " to make this go away (default: " << g_conf()->mon_data_avail_crit
            << "%)\n" << dendl;
       exit(ENOSPC);
     }
@@ -517,7 +517,7 @@ int main(int argc, const char **argv)
   init_async_signal_handler();
   register_async_signal_handler(SIGHUP, sighup_handler);
 
-  MonitorDBStore *store = new MonitorDBStore(g_conf->mon_data);
+  MonitorDBStore *store = new MonitorDBStore(g_conf()->mon_data);
   {
     ostringstream oss;
     err = store->open(oss);
@@ -525,7 +525,7 @@ int main(int argc, const char **argv)
       derr << oss.str() << dendl;
     if (err < 0) {
       derr << "error opening mon data directory at '"
-           << g_conf->mon_data << "': " << cpp_strerror(err) << dendl;
+           << g_conf()->mon_data << "': " << cpp_strerror(err) << dendl;
       prefork.exit(1);
     }
   }
@@ -621,15 +621,15 @@ int main(int argc, const char **argv)
   // this is what i will bind to
   entity_addr_t ipaddr;
 
-  if (monmap.contains(g_conf->name.get_id())) {
-    ipaddr = monmap.get_addr(g_conf->name.get_id());
+  if (monmap.contains(g_conf()->name.get_id())) {
+    ipaddr = monmap.get_addr(g_conf()->name.get_id());
 
     // print helpful warning if the conf file doesn't match
     entity_addr_t conf_addr;
     std::vector <std::string> my_sections;
-    g_conf->get_my_sections(my_sections);
+    g_conf().get_my_sections(my_sections);
     std::string mon_addr_str;
-    if (g_conf->get_val_from_conf_file(my_sections, "mon addr",
+    if (g_conf().get_val_from_conf_file(my_sections, "mon addr",
                                       mon_addr_str, true) == 0) {
       if (conf_addr.parse(mon_addr_str.c_str())) {
         if (conf_addr.get_port() == 0)
@@ -644,14 +644,14 @@ int main(int argc, const char **argv)
                << "         continuing with monmap configuration" << dendl;
     }
   } else {
-    dout(0) << g_conf->name << " does not exist in monmap, will attempt to join an existing cluster" << dendl;
+    dout(0) << g_conf()->name << " does not exist in monmap, will attempt to join an existing cluster" << dendl;
 
     pick_addresses(g_ceph_context, CEPH_PICK_ADDRESS_PUBLIC);
-    if (!g_conf->public_addr.is_blank_ip()) {
-      ipaddr = g_conf->public_addr;
+    if (!g_conf()->public_addr.is_blank_ip()) {
+      ipaddr = g_conf()->public_addr;
       if (ipaddr.get_port() == 0)
        ipaddr.set_port(CEPH_MON_PORT_LEGACY);
-      dout(0) << "using public_addr " << g_conf->public_addr << " -> "
+      dout(0) << "using public_addr " << g_conf()->public_addr << " -> "
              << ipaddr << dendl;
     } else {
       MonMap tmpmap;
@@ -664,10 +664,10 @@ int main(int argc, const char **argv)
              << cpp_strerror(err) << dendl;
        prefork.exit(1);
       }
-      if (tmpmap.contains(g_conf->name.get_id())) {
-       ipaddr = tmpmap.get_addr(g_conf->name.get_id());
+      if (tmpmap.contains(g_conf()->name.get_id())) {
+       ipaddr = tmpmap.get_addr(g_conf()->name.get_id());
       } else {
-       derr << "no public_addr or public_network specified, and " << g_conf->name
+       derr << "no public_addr or public_network specified, and " << g_conf()->name
             << " not present in monmap or ceph.conf" << dendl;
        prefork.exit(1);
       }
@@ -675,8 +675,8 @@ int main(int argc, const char **argv)
   }
 
   // bind
-  int rank = monmap.get_rank(g_conf->name.get_id());
-  std::string public_msgr_type = g_conf->ms_public_type.empty() ? g_conf->get_val<std::string>("ms_type") : g_conf->ms_public_type;
+  int rank = monmap.get_rank(g_conf()->name.get_id());
+  std::string public_msgr_type = g_conf()->ms_public_type.empty() ? g_conf().get_val<std::string>("ms_type") : g_conf()->ms_public_type;
   Messenger *msgr = Messenger::create(g_ceph_context, public_msgr_type,
                                      entity_name_t::MON(rank), "mon",
                                      0, Messenger::HAS_MANY_CONNECTIONS);
@@ -699,7 +699,7 @@ int main(int argc, const char **argv)
 
   // throttle client traffic
   Throttle *client_throttler = new Throttle(g_ceph_context, "mon_client_bytes",
-                                           g_conf->mon_client_bytes);
+                                           g_conf()->mon_client_bytes);
   msgr->set_policy_throttlers(entity_name_t::TYPE_CLIENT,
                                     client_throttler, NULL);
 
@@ -707,7 +707,7 @@ int main(int argc, const char **argv)
   // NOTE: actual usage on the leader may multiply by the number of
   // monitors if they forward large update messages from daemons.
   Throttle *daemon_throttler = new Throttle(g_ceph_context, "mon_daemon_bytes",
-                                           g_conf->mon_daemon_bytes);
+                                           g_conf()->mon_daemon_bytes);
   msgr->set_policy_throttlers(entity_name_t::TYPE_OSD, daemon_throttler,
                                     NULL);
   msgr->set_policy_throttlers(entity_name_t::TYPE_MDS, daemon_throttler,
@@ -717,8 +717,8 @@ int main(int argc, const char **argv)
   entity_addr_t public_addr = ipaddr;
 
   // check if the public_bind_addr option is set
-  if (!g_conf->public_bind_addr.is_blank_ip()) {
-    bind_addr = g_conf->public_bind_addr;
+  if (!g_conf()->public_bind_addr.is_blank_ip()) {
+    bind_addr = g_conf()->public_bind_addr;
 
     // set the default port if not already set
     if (bind_addr.get_port() == 0) {
@@ -726,10 +726,10 @@ int main(int argc, const char **argv)
     }
   }
 
-  dout(0) << "starting " << g_conf->name << " rank " << rank
+  dout(0) << "starting " << g_conf()->name << " rank " << rank
        << " at public addr " << public_addr
        << " at bind addr " << bind_addr
-       << " mon_data " << g_conf->mon_data
+       << " mon_data " << g_conf()->mon_data
        << " fsid " << monmap.get_fsid()
        << dendl;
 
@@ -753,14 +753,14 @@ int main(int argc, const char **argv)
     prefork.exit(1);
   }
 
-  dout(0) << "starting " << g_conf->name << " rank " << rank
+  dout(0) << "starting " << g_conf()->name << " rank " << rank
        << " at " << ipaddr
-       << " mon_data " << g_conf->mon_data
+       << " mon_data " << g_conf()->mon_data
        << " fsid " << monmap.get_fsid()
        << dendl;
 
   // start monitor
-  mon = new Monitor(g_ceph_context, g_conf->name.get_id(), store,
+  mon = new Monitor(g_ceph_context, g_conf()->name.get_id(), store,
                    msgr, mgr_msgr, &monmap);
 
   if (force_sync) {
@@ -777,13 +777,13 @@ int main(int argc, const char **argv)
     prefork.exit(1);
   }
 
-  if (compact || g_conf->mon_compact_on_start) {
+  if (compact || g_conf()->mon_compact_on_start) {
     derr << "compacting monitor store ..." << dendl;
     mon->store->compact();
     derr << "done compacting" << dendl;
   }
 
-  if (g_conf->daemonize) {
+  if (g_conf()->daemonize) {
     global_init_postfork_finish(g_ceph_context);
     prefork.daemonize();
   }
@@ -796,7 +796,7 @@ int main(int argc, const char **argv)
   register_async_signal_handler_oneshot(SIGINT, handle_mon_signal);
   register_async_signal_handler_oneshot(SIGTERM, handle_mon_signal);
 
-  if (g_conf->inject_early_sigterm)
+  if (g_conf()->inject_early_sigterm)
     kill(getpid(), SIGTERM);
 
   msgr->wait();
index 3e2b67c0f915db8320436999c6472d7f324299a3..86c5e7aea4b8ce5094fd750b1dd3cac558610d73 100644 (file)
@@ -207,7 +207,7 @@ int main(int argc, const char **argv)
   global_init_chdir(g_ceph_context);
 
   if (get_journal_fsid) {
-    device_path = g_conf->get_val<std::string>("osd_journal");
+    device_path = g_conf().get_val<std::string>("osd_journal");
     get_device_fsid = true;
   }
   if (get_device_fsid) {
@@ -250,9 +250,9 @@ int main(int argc, const char **argv)
 
   // whoami
   char *end;
-  const char *id = g_conf->name.get_id().c_str();
+  const char *id = g_conf()->name.get_id().c_str();
   int whoami = strtol(id, &end, 10);
-  std::string data_path = g_conf->get_val<std::string>("osd_data");
+  std::string data_path = g_conf().get_val<std::string>("osd_data");
   if (*end || end == id || whoami < 0) {
     derr << "must specify '-i #' where # is the osd number" << dendl;
     forker.exit(1);
@@ -264,7 +264,7 @@ int main(int argc, const char **argv)
   }
 
   // the store
-  std::string store_type = g_conf->get_val<std::string>("osd_objectstore");
+  std::string store_type = g_conf().get_val<std::string>("osd_objectstore");
   {
     char fn[PATH_MAX];
     snprintf(fn, sizeof(fn), "%s/type", data_path.c_str());
@@ -280,8 +280,8 @@ int main(int argc, const char **argv)
     }
   }
 
-  std::string journal_path = g_conf->get_val<std::string>("osd_journal");
-  uint32_t flags = g_conf->get_val<uint64_t>("osd_os_flags");
+  std::string journal_path = g_conf().get_val<std::string>("osd_journal");
+  uint32_t flags = g_conf().get_val<uint64_t>("osd_os_flags");
   ObjectStore *store = ObjectStore::create(g_ceph_context,
                                           store_type,
                                           data_path,
@@ -301,10 +301,10 @@ int main(int argc, const char **argv)
       forker.exit(1);
     }
 
-    EntityName ename(g_conf->name);
+    EntityName ename{g_conf()->name};
     EntityAuth eauth;
 
-    std::string keyring_path = g_conf->get_val<std::string>("keyring");
+    std::string keyring_path = g_conf().get_val<std::string>("keyring");
     int ret = keyring->load(g_ceph_context, keyring_path);
     if (ret == 0 &&
        keyring->get_auth(ename, eauth)) {
@@ -326,13 +326,13 @@ int main(int argc, const char **argv)
   if (mkfs) {
     common_init_finish(g_ceph_context);
 
-    if (g_conf->get_val<uuid_d>("fsid").is_zero()) {
+    if (g_conf().get_val<uuid_d>("fsid").is_zero()) {
       derr << "must specify cluster fsid" << dendl;
       forker.exit(-EINVAL);
     }
 
     int err = OSD::mkfs(g_ceph_context, store, data_path,
-                       g_conf->get_val<uuid_d>("fsid"),
+                       g_conf().get_val<uuid_d>("fsid"),
                         whoami);
     if (err < 0) {
       derr << TEXT_RED << " ** ERROR: error creating empty object store in "
@@ -341,7 +341,7 @@ int main(int argc, const char **argv)
     }
     dout(0) << "created object store " << data_path
            << " for osd." << whoami
-           << " fsid " << g_conf->get_val<uuid_d>("fsid")
+           << " fsid " << g_conf().get_val<uuid_d>("fsid")
            << dendl;
   }
   if (mkfs || mkkey) {
@@ -470,11 +470,11 @@ flushjournal_out:
     forker.exit(0);
   }
 
-  std::string msg_type = g_conf->get_val<std::string>("ms_type");
+  std::string msg_type = g_conf().get_val<std::string>("ms_type");
   std::string public_msg_type =
-    g_conf->get_val<std::string>("ms_public_type");
+    g_conf().get_val<std::string>("ms_public_type");
   std::string cluster_msg_type =
-    g_conf->get_val<std::string>("ms_cluster_type");
+    g_conf().get_val<std::string>("ms_cluster_type");
 
   public_msg_type = public_msg_type.empty() ? msg_type : public_msg_type;
   cluster_msg_type = cluster_msg_type.empty() ? msg_type : cluster_msg_type;
@@ -518,7 +518,7 @@ flushjournal_out:
        << std::endl;
 
   uint64_t message_size =
-    g_conf->get_val<uint64_t>("osd_client_message_size_cap");
+    g_conf().get_val<uint64_t>("osd_client_message_size_cap");
   boost::scoped_ptr<Throttle> client_byte_throttler(
     new Throttle(g_ceph_context, "osd_client_bytes", message_size));
 
@@ -569,7 +569,7 @@ flushjournal_out:
   if (ms_cluster->bindv(cluster_addrs) < 0)
     forker.exit(1);
 
-  bool is_delay = g_conf->get_val<bool>("osd_heartbeat_use_min_delay_socket");
+  bool is_delay = g_conf().get_val<bool>("osd_heartbeat_use_min_delay_socket");
   if (is_delay) {
     ms_hb_front_client->set_socket_priority(SOCKET_PRIORITY_MIN_DELAY);
     ms_hb_back_client->set_socket_priority(SOCKET_PRIORITY_MIN_DELAY);
@@ -655,7 +655,7 @@ flushjournal_out:
 
   // -- daemonize --
 
-  if (g_conf->daemonize) {
+  if (g_conf()->daemonize) {
     global_init_postfork_finish(g_ceph_context);
     forker.daemonize();
   }
@@ -666,7 +666,7 @@ flushjournal_out:
 
   osd->final_init();
 
-  if (g_conf->get_val<bool>("inject_early_sigterm"))
+  if (g_conf().get_val<bool>("inject_early_sigterm"))
     kill(getpid(), SIGTERM);
 
   ms_public->wait();
index 490a30d6e5b88b5eb69ee18a9ee4b5d8a85390d2..50e26f2815a00b0f812015f342e56642e7cdbb10 100644 (file)
@@ -63,7 +63,7 @@ int main(int argc, const char **argv, char *envp[])
   for (int i=0; i<num_client; i++) {
     messengers[i] = Messenger::create_client_messenger(g_ceph_context,
                                                       "synclient");
-    messengers[i]->bind(g_conf->public_addr);
+    messengers[i]->bind(g_conf()->public_addr);
     mclients[i] = new MonClient(g_ceph_context);
     mclients[i]->build_initial_monmap();
     auto client = new StandaloneClient(messengers[i], mclients[i]);
index 4fdf276b2d396c555f030c2239a8471e4c31dc27..1e351daaab89a2fbe46e47a22449503edcf97ca7 100644 (file)
@@ -484,7 +484,7 @@ void Client::_finish_init()
 
   client_lock.Unlock();
 
-  cct->_conf->add_observer(this);
+  cct->_conf.add_observer(this);
 
   AdminSocket* admin_socket = cct->get_admin_socket();
   int ret = admin_socket->register_command("mds_requests",
@@ -543,7 +543,7 @@ void Client::shutdown()
   _close_sessions();
   client_lock.Unlock();
 
-  cct->_conf->remove_observer(this);
+  cct->_conf.remove_observer(this);
 
   cct->get_admin_socket()->unregister_commands(&m_command_hook);
 
@@ -4021,8 +4021,8 @@ int Client::_do_remount(void)
           "failed to remount (to trim kernel dentries): "
           "return code = " << r << dendl;
     }
-    bool should_abort = cct->_conf->get_val<bool>("client_die_on_failed_remount") ||
-        cct->_conf->get_val<bool>("client_die_on_failed_dentry_invalidate");
+    bool should_abort = cct->_conf.get_val<bool>("client_die_on_failed_remount") ||
+        cct->_conf.get_val<bool>("client_die_on_failed_dentry_invalidate");
     if (should_abort && !unmounting) {
       lderr(cct) << "failed to remount for kernel dentry trimming; quitting!" << dendl;
       ceph_abort();
@@ -5962,8 +5962,8 @@ void Client::tick()
 {
   if (cct->_conf->client_debug_inject_tick_delay > 0) {
     sleep(cct->_conf->client_debug_inject_tick_delay);
-    assert(0 == cct->_conf->set_val("client_debug_inject_tick_delay", "0"));
-    cct->_conf->apply_changes(NULL);
+    assert(0 == cct->_conf.set_val("client_debug_inject_tick_delay", "0"));
+    cct->_conf.apply_changes(NULL);
   }
 
   ldout(cct, 21) << "tick" << dendl;
@@ -8382,7 +8382,7 @@ Fh *Client::_create_fh(Inode *in, int flags, int cmode, const UserPerm& perms)
            << ccap_string(in->caps_issued()) << dendl;
   }
 
-  const md_config_t *conf = cct->_conf;
+  const auto& conf = cct->_conf;
   f->readahead.set_trigger_requests(1);
   f->readahead.set_min_readahead_size(conf->client_readahead_min);
   uint64_t max_readahead = Readahead::NO_LIMIT;
@@ -8759,7 +8759,7 @@ int64_t Client::_read(Fh *f, int64_t offset, uint64_t size, bufferlist *bl)
   bool movepos = false;
   std::unique_ptr<C_SaferCond> onuninline;
   int64_t r = 0;
-  const md_config_t *conf = cct->_conf;
+  const auto& conf = cct->_conf;
   Inode *in = f->inode.get();
 
   if ((f->mode & CEPH_FILE_MODE_RD) == 0)
@@ -8901,7 +8901,7 @@ void Client::C_Readahead::finish(int r) {
 
 int Client::_read_async(Fh *f, uint64_t off, uint64_t len, bufferlist *bl)
 {
-  const md_config_t *conf = cct->_conf;
+  const auto& conf = cct->_conf;
   Inode *in = f->inode.get();
 
   ldout(cct, 10) << __func__ << " " << *in << " " << off << "~" << len << dendl;
@@ -10072,7 +10072,7 @@ int Client::test_dentry_handling(bool can_invalidate)
     r = _do_remount();
   }
   if (r) {
-    bool should_abort = cct->_conf->get_val<bool>("client_die_on_failed_dentry_invalidate");
+    bool should_abort = cct->_conf.get_val<bool>("client_die_on_failed_dentry_invalidate");
     if (should_abort) {
       lderr(cct) << "no method to invalidate kernel dentry cache; quitting!" << dendl;
       ceph_abort();
@@ -10290,7 +10290,7 @@ int Client::ll_lookup(Inode *parent, const char *name, struct stat *attr,
     return -ENOTCONN;
 
   int r = 0;
-  auto fuse_default_permissions = cct->_conf->get_val<bool>(
+  auto fuse_default_permissions = cct->_conf.get_val<bool>(
     "fuse_default_permissions");
   if (!fuse_default_permissions) {
     if (strcmp(name, ".") && strcmp(name, "..")) {
@@ -10380,7 +10380,7 @@ int Client::ll_lookupx(Inode *parent, const char *name, Inode **out,
     return -ENOTCONN;
 
   int r = 0;
-  auto fuse_default_permissions = cct->_conf->get_val<bool>(
+  auto fuse_default_permissions = cct->_conf.get_val<bool>(
     "fuse_default_permissions");
   if (!fuse_default_permissions) {
     r = may_lookup(parent, perms);
@@ -10652,7 +10652,7 @@ int Client::_ll_setattrx(Inode *in, struct ceph_statx *stx, int mask,
   tout(cct) << stx->stx_btime << std::endl;
   tout(cct) << mask << std::endl;
 
-  auto fuse_default_permissions = cct->_conf->get_val<bool>(
+  auto fuse_default_permissions = cct->_conf.get_val<bool>(
     "fuse_default_permissions");
   if (!fuse_default_permissions) {
     int res = may_setattr(in, stx, mask, perms);
@@ -10979,7 +10979,7 @@ int Client::ll_getxattr(Inode *in, const char *name, void *value,
   tout(cct) << vino.ino.val << std::endl;
   tout(cct) << name << std::endl;
 
-  auto fuse_default_permissions = cct->_conf->get_val<bool>(
+  auto fuse_default_permissions = cct->_conf.get_val<bool>(
     "fuse_default_permissions");
   if (!fuse_default_permissions) {
     int r = xattr_permission(in, name, MAY_READ, perms);
@@ -11250,7 +11250,7 @@ int Client::ll_setxattr(Inode *in, const char *name, const void *value,
   tout(cct) << vino.ino.val << std::endl;
   tout(cct) << name << std::endl;
 
-  auto fuse_default_permissions = cct->_conf->get_val<bool>(
+  auto fuse_default_permissions = cct->_conf.get_val<bool>(
     "fuse_default_permissions");
   if (!fuse_default_permissions) {
     int r = xattr_permission(in, name, MAY_WRITE, perms);
@@ -11316,7 +11316,7 @@ int Client::ll_removexattr(Inode *in, const char *name, const UserPerm& perms)
   tout(cct) << vino.ino.val << std::endl;
   tout(cct) << name << std::endl;
 
-  auto fuse_default_permissions = cct->_conf->get_val<bool>(
+  auto fuse_default_permissions = cct->_conf.get_val<bool>(
     "fuse_default_permissions");
   if (!fuse_default_permissions) {
     int r = xattr_permission(in, name, MAY_WRITE, perms);
@@ -11655,7 +11655,7 @@ int Client::ll_mknod(Inode *parent, const char *name, mode_t mode,
   tout(cct) << mode << std::endl;
   tout(cct) << rdev << std::endl;
 
-  auto fuse_default_permissions = cct->_conf->get_val<bool>(
+  auto fuse_default_permissions = cct->_conf.get_val<bool>(
     "fuse_default_permissions");
   if (!fuse_default_permissions) {
     int r = may_create(parent, perms);
@@ -11696,7 +11696,7 @@ int Client::ll_mknodx(Inode *parent, const char *name, mode_t mode,
   tout(cct) << mode << std::endl;
   tout(cct) << rdev << std::endl;
 
-  auto fuse_default_permissions = cct->_conf->get_val<bool>(
+  auto fuse_default_permissions = cct->_conf.get_val<bool>(
     "fuse_default_permissions");
   if (!fuse_default_permissions) {
     int r = may_create(parent, perms);
@@ -11883,7 +11883,7 @@ int Client::ll_mkdir(Inode *parent, const char *name, mode_t mode,
   tout(cct) << name << std::endl;
   tout(cct) << mode << std::endl;
 
-  auto fuse_default_permissions = cct->_conf->get_val<bool>(
+  auto fuse_default_permissions = cct->_conf.get_val<bool>(
     "fuse_default_permissions");
   if (!fuse_default_permissions) {
     int r = may_create(parent, perm);
@@ -11921,7 +11921,7 @@ int Client::ll_mkdirx(Inode *parent, const char *name, mode_t mode, Inode **out,
   tout(cct) << name << std::endl;
   tout(cct) << mode << std::endl;
 
-  auto fuse_default_permissions = cct->_conf->get_val<bool>(
+  auto fuse_default_permissions = cct->_conf.get_val<bool>(
     "fuse_default_permissions");
   if (!fuse_default_permissions) {
     int r = may_create(parent, perms);
@@ -12008,7 +12008,7 @@ int Client::ll_symlink(Inode *parent, const char *name, const char *value,
   tout(cct) << name << std::endl;
   tout(cct) << value << std::endl;
 
-  auto fuse_default_permissions = cct->_conf->get_val<bool>(
+  auto fuse_default_permissions = cct->_conf.get_val<bool>(
     "fuse_default_permissions");
   if (!fuse_default_permissions) {
     int r = may_create(parent, perms);
@@ -12047,7 +12047,7 @@ int Client::ll_symlinkx(Inode *parent, const char *name, const char *value,
   tout(cct) << name << std::endl;
   tout(cct) << value << std::endl;
 
-  auto fuse_default_permissions = cct->_conf->get_val<bool>(
+  auto fuse_default_permissions = cct->_conf.get_val<bool>(
     "fuse_default_permissions");
   if (!fuse_default_permissions) {
     int r = may_create(parent, perms);
@@ -12132,7 +12132,7 @@ int Client::ll_unlink(Inode *in, const char *name, const UserPerm& perm)
   tout(cct) << vino.ino.val << std::endl;
   tout(cct) << name << std::endl;
 
-  auto fuse_default_permissions = cct->_conf->get_val<bool>(
+  auto fuse_default_permissions = cct->_conf.get_val<bool>(
     "fuse_default_permissions");
   if (!fuse_default_permissions) {
     int r = may_delete(in, name, perm);
@@ -12209,7 +12209,7 @@ int Client::ll_rmdir(Inode *in, const char *name, const UserPerm& perms)
   tout(cct) << vino.ino.val << std::endl;
   tout(cct) << name << std::endl;
 
-  auto fuse_default_permissions = cct->_conf->get_val<bool>(
+  auto fuse_default_permissions = cct->_conf.get_val<bool>(
     "fuse_default_permissions");
   if (!fuse_default_permissions) {
     int r = may_delete(in, name, perms);
@@ -12346,7 +12346,7 @@ int Client::ll_rename(Inode *parent, const char *name, Inode *newparent,
   tout(cct) << vnewparent.ino.val << std::endl;
   tout(cct) << newname << std::endl;
 
-  auto fuse_default_permissions = cct->_conf->get_val<bool>(
+  auto fuse_default_permissions = cct->_conf.get_val<bool>(
     "fuse_default_permissions");
   if (!fuse_default_permissions) {
     int r = may_delete(parent, name, perm);
@@ -12425,7 +12425,7 @@ int Client::ll_link(Inode *in, Inode *newparent, const char *newname,
 
   InodeRef target;
 
-  auto fuse_default_permissions = cct->_conf->get_val<bool>(
+  auto fuse_default_permissions = cct->_conf.get_val<bool>(
     "fuse_default_permissions");
   if (!fuse_default_permissions) {
     if (S_ISDIR(in->mode))
@@ -12556,7 +12556,7 @@ int Client::ll_opendir(Inode *in, int flags, dir_result_t** dirpp,
   tout(cct) << "ll_opendir" << std::endl;
   tout(cct) << vino.ino.val << std::endl;
 
-  auto fuse_default_permissions = cct->_conf->get_val<bool>(
+  auto fuse_default_permissions = cct->_conf.get_val<bool>(
     "fuse_default_permissions");
   if (!fuse_default_permissions) {
     int r = may_open(in, flags, perms);
@@ -12616,7 +12616,7 @@ int Client::ll_open(Inode *in, int flags, Fh **fhp, const UserPerm& perms)
   tout(cct) << ceph_flags_sys2wire(flags) << std::endl;
 
   int r;
-  auto fuse_default_permissions = cct->_conf->get_val<bool>(
+  auto fuse_default_permissions = cct->_conf.get_val<bool>(
     "fuse_default_permissions");
   if (!fuse_default_permissions) {
     r = may_open(in, flags, perms);
@@ -12661,7 +12661,7 @@ int Client::_ll_create(Inode *parent, const char *name, mode_t mode,
     return -EEXIST;
 
   if (r == -ENOENT && (flags & O_CREAT)) {
-    auto fuse_default_permissions = cct->_conf->get_val<bool>(
+    auto fuse_default_permissions = cct->_conf.get_val<bool>(
       "fuse_default_permissions");
     if (!fuse_default_permissions) {
       r = may_create(parent, perms);
@@ -12681,7 +12681,7 @@ int Client::_ll_create(Inode *parent, const char *name, mode_t mode,
 
   ldout(cct, 20) << "_ll_create created = " << created << dendl;
   if (!created) {
-    auto fuse_default_permissions = cct->_conf->get_val<bool>(
+    auto fuse_default_permissions = cct->_conf.get_val<bool>(
       "fuse_default_permissions");
     if (!fuse_default_permissions) {
       r = may_open(in->get(), flags, perms);
@@ -13592,7 +13592,7 @@ void Client::ms_handle_remote_reset(Connection *con)
        case MetaSession::STATE_OPEN:
          {
            objecter->maybe_request_map(); /* to check if we are blacklisted */
-           const md_config_t *conf = cct->_conf;
+           const auto& conf = cct->_conf;
            if (conf->client_reconnect_stale) {
              ldout(cct, 1) << "reset from mds we were open; close mds session for reconnect" << dendl;
              _closed_mds_session(s);
index 62a703f911459d3615d3f3cfca764b8607c2a93d..cfd8779440abdd60632da5a88e5549f3a92c5d24 100644 (file)
@@ -123,7 +123,7 @@ bool HeartbeatMap::is_healthy()
   if (m_cct->_conf->heartbeat_inject_failure) {
     ldout(m_cct, 0) << "is_healthy injecting failure for next " << m_cct->_conf->heartbeat_inject_failure << " seconds" << dendl;
     m_inject_unhealthy_until = now + std::chrono::seconds(m_cct->_conf->heartbeat_inject_failure);
-    m_cct->_conf->set_val("heartbeat_inject_failure", "0");
+    m_cct->_conf.set_val("heartbeat_inject_failure", "0");
   }
 
   bool healthy = true;
index bff6d71859cd096cec977e92f17ccd2e82c27469..8702d71f0e5dd32659d783bf638cc1eb468230ac 100644 (file)
@@ -84,7 +84,7 @@ int parse_log_client_options(CephContext *cct,
     return r;
   }
 
-  fsid = cct->_conf->get_val<uuid_d>("fsid");
+  fsid = cct->_conf.get_val<uuid_d>("fsid");
   host = cct->_conf->host;
   return 0;
 }
index 1c12c2a46d72b2146e8da3f430a3fdd9711a10de..bf63634e2fd8dce3e26a483aceac079f3e3c0791 100644 (file)
@@ -140,13 +140,13 @@ int PluginRegistry::load(const std::string &type,
 
   // std::string fname = cct->_conf->plugin_dir + "/" + type + "/" PLUGIN_PREFIX
   //  + name + PLUGIN_SUFFIX;
-  std::string fname = cct->_conf->get_val<std::string>("plugin_dir") + "/" + type + "/" + PLUGIN_PREFIX
+  std::string fname = cct->_conf.get_val<std::string>("plugin_dir") + "/" + type + "/" + PLUGIN_PREFIX
       + name + PLUGIN_SUFFIX;
   void *library = dlopen(fname.c_str(), RTLD_NOW);
   if (!library) {
     string err1(dlerror());
     // fall back to plugin_dir
-    std::string fname2 = cct->_conf->get_val<std::string>("plugin_dir") + "/" + PLUGIN_PREFIX +
+    std::string fname2 = cct->_conf.get_val<std::string>("plugin_dir") + "/" + PLUGIN_PREFIX +
       name + PLUGIN_SUFFIX;
     library = dlopen(fname2.c_str(), RTLD_NOW);
     if (!library) {
index 62ae60bbb468786f22432d8ddef772c56f122b1e..fbc7b22a4713c3e9e09c1b2f659d192c512ccbff 100644 (file)
@@ -8,12 +8,12 @@ TracepointProvider::TracepointProvider(CephContext *cct, const char *library,
                                        const char *config_key)
   : m_cct(cct), m_library(library), m_config_keys{config_key, NULL},
     m_lock("TracepointProvider::m_lock") {
-  m_cct->_conf->add_observer(this);
+  m_cct->_conf.add_observer(this);
   verify_config(m_cct->_conf);
 }
 
 TracepointProvider::~TracepointProvider() {
-  m_cct->_conf->remove_observer(this);
+  m_cct->_conf.remove_observer(this);
   if (m_handle) {
     dlclose(m_handle);
   }
@@ -22,11 +22,11 @@ TracepointProvider::~TracepointProvider() {
 void TracepointProvider::handle_conf_change(
     const md_config_t *conf, const std::set<std::string> &changed) {
   if (changed.count(m_config_keys[0])) {
-    verify_config(conf);
+    verify_config(ConfigProxy{conf});
   }
 }
 
-void TracepointProvider::verify_config(const md_config_t *conf) {
+void TracepointProvider::verify_config(const ConfigProxy& conf) {
   Mutex::Locker locker(m_lock);
   if (m_handle) {
     return;
@@ -34,7 +34,7 @@ void TracepointProvider::verify_config(const md_config_t *conf) {
 
   char buf[10];
   char *pbuf = buf;
-  if (conf->get_val(m_config_keys[0], &pbuf, sizeof(buf)) != 0 ||
+  if (conf.get_val(m_config_keys[0], &pbuf, sizeof(buf)) != 0 ||
       strncmp(buf, "true", 5) != 0) {
     return;
   }
index a53a904256cd3afca5191968cf0c914101d319f6..d0ff8c949710beffbba5b05bf1ad473eae8aa2ff 100644 (file)
@@ -76,7 +76,7 @@ private:
   Mutex m_lock;
   void* m_handle = nullptr;
 
-  void verify_config(const md_config_t *conf);
+  void verify_config(const ConfigProxy& conf);
 };
 
 #endif // CEPH_TRACEPOINT_PROVIDER_H
index 2a4528fa82c04a2751932612507e8dc71d9ad75c..24cb697b83ef48db65a17d6ff9b1b45020752739 100644 (file)
@@ -183,7 +183,7 @@ void ThreadPool::start()
 
   if (_thread_num_option.length()) {
     ldout(cct, 10) << " registering config observer on " << _thread_num_option << dendl;
-    cct->_conf->add_observer(this);
+    cct->_conf.add_observer(this);
   }
 
   _lock.Lock();
@@ -198,7 +198,7 @@ void ThreadPool::stop(bool clear_after)
 
   if (_thread_num_option.length()) {
     ldout(cct, 10) << " unregistering config observer on " << _thread_num_option << dendl;
-    cct->_conf->remove_observer(this);
+    cct->_conf.remove_observer(this);
   }
 
   _lock.Lock();
index 1555f52f0b3024e411c85409f127a1cc720be8a5..5461e54991cbabf047c20cf93ab9f987201cfe99 100644 (file)
@@ -63,10 +63,10 @@ public:
 
   void handle_conf_change(const md_config_t *conf,
                           const std::set <std::string> &changed) override {
-    if (conf->lockdep && !m_registered) {
+    if (conf->values.lockdep && !m_registered) {
       lockdep_register_ceph_context(m_cct);
       m_registered = true;
-    } else if (!conf->lockdep && m_registered) {
+    } else if (!conf->values.lockdep && m_registered) {
       lockdep_unregister_ceph_context(m_cct);
       m_registered = false;
     }
@@ -82,7 +82,7 @@ class MempoolObs : public md_config_obs_t,
 
 public:
   explicit MempoolObs(CephContext *cct) : cct(cct) {
-    cct->_conf->add_observer(this);
+    cct->_conf.add_observer(this);
     int r = cct->get_admin_socket()->register_command(
       "dump_mempools",
       "dump_mempools",
@@ -91,7 +91,7 @@ public:
     assert(r == 0);
   }
   ~MempoolObs() override {
-    cct->_conf->remove_observer(this);
+    cct->_conf.remove_observer(this);
     cct->get_admin_socket()->unregister_command("dump_mempools");
   }
 
@@ -224,8 +224,9 @@ public:
     return KEYS;
   }
 
-  void handle_conf_change(const md_config_t *conf,
+  void handle_conf_change(const md_config_t *mconf,
                           const std::set <std::string> &changed) override {
+    ConfigReader conf{mconf};
     // stderr
     if (changed.count("log_to_stderr") || changed.count("err_to_stderr")) {
       int l = conf->log_to_stderr ? 99 : (conf->err_to_stderr ? -1 : -2);
@@ -245,7 +246,7 @@ public:
     }
 
     if (changed.count("log_stderr_prefix")) {
-      log->set_log_stderr_prefix(conf->get_val<string>("log_stderr_prefix"));
+      log->set_log_stderr_prefix(conf.get_val<string>("log_stderr_prefix"));
     }
 
     if (changed.count("log_max_new")) {
@@ -274,7 +275,7 @@ public:
     }
 
     if (changed.find("log_coarse_timestamps") != changed.end()) {
-      log->set_coarse_timestamps(conf->get_val<bool>("log_coarse_timestamps"));
+      log->set_coarse_timestamps(conf.get_val<bool>("log_coarse_timestamps"));
     }
 
     // metadata
@@ -283,7 +284,7 @@ public:
     }
 
     if (log->graylog() && changed.count("fsid")) {
-      log->graylog()->set_fsid(conf->get_val<uuid_d>("fsid"));
+      log->graylog()->set_fsid(conf.get_val<uuid_d>("fsid"));
     }
   }
 };
@@ -305,10 +306,11 @@ public:
     return KEYS;
   }
 
-  void handle_conf_change(const md_config_t *conf,
+  void handle_conf_change(const md_config_t *mconf,
                           const std::set <std::string> &changed) override {
     if (changed.count(
          "enable_experimental_unrecoverable_data_corrupting_features")) {
+      ConfigReader conf{mconf};
       std::lock_guard<ceph::spinlock> lg(cct->_feature_lock);
       get_str_set(
        conf->enable_experimental_unrecoverable_data_corrupting_features,
@@ -441,20 +443,20 @@ void CephContext::do_command(std::string_view command, const cmdmap_t& cmdmap,
     boost::replace_all(section, " ", "_");
     f->open_object_section(section.c_str());
     if (command == "config show") {
-      _conf->show_config(f);
+      _conf.show_config(f);
     }
     else if (command == "config unset") {
       std::string var;
       if (!(cmd_getval(this, cmdmap, "var", var))) {
         f->dump_string("error", "syntax error: 'config unset <var>'");
       } else {
-        int r = _conf->rm_val(var.c_str());
+        int r = _conf.rm_val(var.c_str());
         if (r < 0 && r != -ENOENT) {
           f->dump_stream("error") << "error unsetting '" << var << "': "
                                  << cpp_strerror(r);
         } else {
           ostringstream ss;
-          _conf->apply_changes(&ss);
+          _conf.apply_changes(&ss);
           f->dump_string("success", ss.str());
         }
       }
@@ -470,12 +472,12 @@ void CephContext::do_command(std::string_view command, const cmdmap_t& cmdmap,
       } else {
        // val may be multiple words
        string valstr = str_join(val, " ");
-        int r = _conf->set_val(var.c_str(), valstr.c_str());
+        int r = _conf.set_val(var.c_str(), valstr.c_str());
         if (r < 0) {
           f->dump_stream("error") << "error setting '" << var << "' to '" << valstr << "': " << cpp_strerror(r);
         } else {
           ostringstream ss;
-          _conf->apply_changes(&ss);
+          _conf.apply_changes(&ss);
           f->dump_string("success", ss.str());
         }
       }
@@ -487,7 +489,7 @@ void CephContext::do_command(std::string_view command, const cmdmap_t& cmdmap,
        char buf[4096];
        memset(buf, 0, sizeof(buf));
        char *tmp = buf;
-       int r = _conf->get_val(var.c_str(), &tmp, sizeof(buf));
+       int r = _conf.get_val(var.c_str(), &tmp, sizeof(buf));
        if (r < 0) {
            f->dump_stream("error") << "error getting '" << var << "': " << cpp_strerror(r);
        } else {
@@ -499,13 +501,13 @@ void CephContext::do_command(std::string_view command, const cmdmap_t& cmdmap,
       if (cmd_getval(this, cmdmap, "var", var)) {
         // Output a single one
         std::string key = ConfFile::normalize_key_name(var);
-        const auto &i = _conf->schema.find(key);
-        if (i == _conf->schema.end()) {
+       auto schema = _conf.get_schema(key);
+        if (!schema) {
           std::ostringstream msg;
           msg << "Setting not found: '" << key << "'";
           f->dump_string("error", msg.str());
         } else {
-          f->dump_object("option", i->second);
+          f->dump_object("option", *schema);
         }
       } else {
         // Output all
@@ -517,12 +519,12 @@ void CephContext::do_command(std::string_view command, const cmdmap_t& cmdmap,
       }
     } else if (command == "config diff") {
       f->open_object_section("diff");
-      _conf->diff(f);
+      _conf.diff(f);
       f->close_section(); // unknown
     } else if (command == "config diff get") {
       std::string setting;
       f->open_object_section("diff");
-      _conf->diff(f, setting);
+      _conf.diff(f, setting);
       f->close_section(); // unknown
     } else if (command == "log flush") {
       _log->flush();
@@ -548,7 +550,7 @@ CephContext::CephContext(uint32_t module_type_,
                          enum code_environment_t code_env,
                          int init_flags_)
   : nref(1),
-    _conf(new md_config_t(code_env == CODE_ENVIRONMENT_DAEMON)),
+    _conf{code_env == CODE_ENVIRONMENT_DAEMON},
     _log(NULL),
     _module_type(module_type_),
     _init_flags(init_flags_),
@@ -574,13 +576,13 @@ CephContext::CephContext(uint32_t module_type_,
   _log->start();
 
   _log_obs = new LogObs(_log);
-  _conf->add_observer(_log_obs);
+  _conf.add_observer(_log_obs);
 
   _cct_obs = new CephContextObs(this);
-  _conf->add_observer(_cct_obs);
+  _conf.add_observer(_cct_obs);
 
   _lockdep_obs = new LockdepObs(this);
-  _conf->add_observer(_lockdep_obs);
+  _conf.add_observer(_lockdep_obs);
 
   _perf_counters_collection = new PerfCountersCollection(this);
  
@@ -648,15 +650,15 @@ CephContext::~CephContext()
   delete _perf_counters_conf_obs;
   _perf_counters_conf_obs = NULL;
 
-  _conf->remove_observer(_log_obs);
+  _conf.remove_observer(_log_obs);
   delete _log_obs;
   _log_obs = NULL;
 
-  _conf->remove_observer(_cct_obs);
+  _conf.remove_observer(_cct_obs);
   delete _cct_obs;
   _cct_obs = NULL;
 
-  _conf->remove_observer(_lockdep_obs);
+  _conf.remove_observer(_lockdep_obs);
   delete _lockdep_obs;
   _lockdep_obs = NULL;
 
@@ -664,8 +666,6 @@ CephContext::~CephContext()
   delete _log;
   _log = NULL;
 
-  delete _conf;
-  
   delete _crypto_none;
   delete _crypto_aes;
   if (_crypto_inited > 0) {
@@ -716,8 +716,8 @@ void CephContext::start_service_thread()
 
   // Trigger callbacks on any config observers that were waiting for
   // it to become safe to start threads.
-  _conf->set_safe_to_start_threads();
-  _conf->call_all_observers();
+  _conf.set_safe_to_start_threads();
+  _conf.call_all_observers();
 
   // start admin socket
   if (_conf->admin_socket.length())
index 08ba1ba9c68552bd66254a2287b7dfef9f1d278a..0c2c64878715a8d231af9917d35f4bd2e72f81a6 100644 (file)
@@ -29,7 +29,7 @@
 
 #include "common/cmdparse.h"
 #include "common/code_environment.h"
-#include "common/config_fwd.h"
+#include "common/config_proxy.h"
 
 #include "include/spinlock.h"
 
@@ -83,7 +83,7 @@ public:
   }
   void put();
 
-  md_config_t *_conf;
+  ConfigProxy _conf;
   ceph::logging::Log *_log;
 
   /* init ceph::crypto */
index 1c306d3b98c4b164f962dfd7a9a179ae2cb60970..7799165e763a402429dbc329c42d5be492e3301b 100644 (file)
@@ -36,7 +36,7 @@ CephContext *common_preinit(const CephInitParameters &iparams,
   // Create a configuration object
   CephContext *cct = new CephContext(iparams.module_type, code_env, flags);
 
-  md_config_t *conf = cct->_conf;
+  auto& conf = cct->_conf;
   // add config observers here
 
   // Set up our entity name.
@@ -46,26 +46,26 @@ CephContext *common_preinit(const CephInitParameters &iparams,
   // for backward compatibility.  moving forward, we want all keyrings
   // in these locations.  the mon already forces $mon_data/keyring.
   if (conf->name.is_mds()) {
-    conf->set_val_default("keyring", "$mds_data/keyring");
+    conf.set_val_default("keyring", "$mds_data/keyring");
   } else if (conf->name.is_osd()) {
-    conf->set_val_default("keyring", "$osd_data/keyring");
+    conf.set_val_default("keyring", "$osd_data/keyring");
   }
 
   if ((flags & CINIT_FLAG_UNPRIVILEGED_DAEMON_DEFAULTS)) {
     // make this unique despite multiple instances by the same name.
-    conf->set_val_default("admin_socket",
+    conf.set_val_default("admin_socket",
                          "$run_dir/$cluster-$name.$pid.$cctid.asok");
   }
 
   if (code_env == CODE_ENVIRONMENT_LIBRARY ||
       code_env == CODE_ENVIRONMENT_UTILITY_NODOUT) {
-    conf->set_val_default("log_to_stderr", "false");
-    conf->set_val_default("err_to_stderr", "false");
-    conf->set_val_default("log_flush_on_exit", "false");
+    conf.set_val_default("log_to_stderr", "false");
+    conf.set_val_default("err_to_stderr", "false");
+    conf.set_val_default("log_flush_on_exit", "false");
   }
   if (code_env != CODE_ENVIRONMENT_DAEMON) {
     // NOTE: disable ms subsystem gathering in clients by default
-    conf->set_val_default("debug_ms", "0/0");
+    conf.set_val_default("debug_ms", "0/0");
   }
 
   return cct;
@@ -113,7 +113,7 @@ void common_init_finish(CephContext *cct)
     cct->get_admin_socket()->chown(cct->get_set_uid(), cct->get_set_gid());
   }
 
-  md_config_t *conf = cct->_conf;
+  const auto& conf = cct->_conf;
 
   if (!conf->admin_socket.empty() && !conf->admin_socket_mode.empty()) {
     int ret = 0;
index d9ed6fc7b64229c2848692528bf3c66c163b827e..ec0690682f490dca271ebae26cae683af3e3a370 100644 (file)
@@ -102,7 +102,6 @@ namespace ceph::internal {
 template<LockPolicy lp>
 md_config_impl<lp>::md_config_impl(bool is_daemon)
   : is_daemon(is_daemon),
-    cluster(""),
     lock("md_config_t", true, false)
 {
   // Load the compile-time list of Option into
@@ -120,15 +119,15 @@ md_config_impl<lp>::md_config_impl(bool is_daemon)
   }
 
   // Define the debug_* options as well.
-  subsys_options.reserve(subsys.get_num());
-  for (unsigned i = 0; i < subsys.get_num(); ++i) {
-    string name = string("debug_") + subsys.get_name(i);
+  subsys_options.reserve(values.subsys.get_num());
+  for (unsigned i = 0; i < values.subsys.get_num(); ++i) {
+    string name = string("debug_") + values.subsys.get_name(i);
     subsys_options.push_back(
       Option(name, Option::TYPE_STR, Option::LEVEL_ADVANCED));
     Option& opt = subsys_options.back();
-    opt.set_default(stringify(subsys.get_log_level(i)) + "/" +
-                   stringify(subsys.get_gather_level(i)));
-    string desc = string("Debug level for ") + subsys.get_name(i);
+    opt.set_default(stringify(values.subsys.get_log_level(i)) + "/" +
+                   stringify(values.subsys.get_gather_level(i)));
+    string desc = string("Debug level for ") + values.subsys.get_name(i);
     opt.set_description(desc.c_str());
     opt.set_flag(Option::FLAG_RUNTIME);
     opt.set_long_description("The value takes the form 'N' or 'N/M' where N and M are values between 0 and 99.  N is the debug level to log (all values below this are included), and M is the level to gather and buffer in memory.  In the event of a crash, the most recent items <= M are dumped to the log file.");
@@ -169,7 +168,7 @@ md_config_impl<lp>::md_config_impl(bool is_daemon)
   // members if present.
   legacy_values = {
 #define OPTION(name, type) \
-    {std::string(STRINGIFY(name)), &md_config_impl::name},
+    {std::string(STRINGIFY(name)), &ConfigValues::name},
 #define SAFE_OPTION(name, type) OPTION(name, type)
 #include "common/legacy_config_opts.h"
 #undef OPTION
@@ -312,17 +311,19 @@ int md_config_impl<lp>::set_mon_vals(CephContext *cct,
       ceph_abort();
     }
   }
-  for (const auto& [name,configs] : values) {
-    auto j = configs.find(CONF_MON);
-    if (j != configs.end()) {
-      if (kv.find(name) == kv.end()) {
-       ldout(cct,10) << __func__ << " " << name
-                     << " cleared (was " << Option::to_str(j->second) << ")"
-                     << dendl;
-       _rm_val(name, CONF_MON);
-      }
+  values.for_each([&] (auto name, auto configs) {
+    auto config = configs.find(CONF_MON);
+    if (config == configs.end()) {
+      return;
     }
-  }
+    if (kv.find(name) != kv.end()) {
+      return;
+    }
+    ldout(cct,10) << __func__ << " " << name
+                 << " cleared (was " << Option::to_str(config->second) << ")"
+                 << dendl;
+    values.rm_val(name, CONF_MON);
+  });
   values_bl.clear();
   _apply_changes(nullptr);
   return 0;
@@ -365,12 +366,12 @@ int md_config_impl<lp>::parse_config_files(const char *conf_files_str,
   if (safe_to_start_threads)
     return -ENOSYS;
 
-  if (!cluster.size() && !conf_files_str) {
+  if (!values.cluster.size() && !conf_files_str) {
     /*
      * set the cluster name to 'ceph' when neither cluster name nor
      * configuration file are specified.
      */
-    cluster = "ceph";
+    values.cluster = "ceph";
   }
 
   if (!conf_files_str) {
@@ -416,7 +417,7 @@ int md_config_impl<lp>::parse_config_files(const char *conf_files_str,
   if (c == conf_files.end())
     return -ENOENT;
 
-  if (cluster.size() == 0) {
+  if (values.cluster.size() == 0) {
     /*
      * If cluster name is not set yet, use the prefix of the
      * basename of configuration file as cluster name.
@@ -429,9 +430,9 @@ int md_config_impl<lp>::parse_config_files(const char *conf_files_str,
          * convention, we do the last try and assign the cluster to
          * 'ceph'.
          */
-        cluster = "ceph";
+        values.cluster = "ceph";
     } else {
-      cluster = c->substr(start, end - start);
+      values.cluster = c->substr(start, end - start);
     }
   }
 
@@ -492,8 +493,8 @@ void md_config_impl<lp>::parse_env(const char *args_var)
   }
   if (getenv("CEPH_KEYRING")) {
     auto locker = lock();
-    string k = getenv("CEPH_KEYRING");
-    values["keyring"][CONF_ENV] = Option::value_t(k);
+    _set_val(getenv("CEPH_KEYRING"), *find_option("keyring"),
+            CONF_ENV, nullptr);
   }
   if (const char *dir = getenv("CEPH_LIB")) {
     auto locker = lock();
@@ -540,12 +541,12 @@ template<LockPolicy lp>
 void md_config_impl<lp>::_show_config(std::ostream *out, Formatter *f)
 {
   if (out) {
-    *out << "name = " << name << std::endl;
-    *out << "cluster = " << cluster << std::endl;
+    *out << "name = " << values.name << std::endl;
+    *out << "cluster = " << values.cluster << std::endl;
   }
   if (f) {
-    f->dump_string("name", stringify(name));
-    f->dump_string("cluster", cluster);
+    f->dump_string("name", stringify(values.name));
+    f->dump_string("cluster", values.cluster);
   }
   for (const auto& i: schema) {
     const Option &opt = i.second;
@@ -590,10 +591,10 @@ int md_config_impl<lp>::parse_argv(std::vector<const char*>& args, int level)
       do_show_config_value = val;
     }
     else if (ceph_argparse_flag(args, i, "--no-mon-config", (char*)NULL)) {
-      no_mon_config = true;
+      values.no_mon_config = true;
     }
     else if (ceph_argparse_flag(args, i, "--mon-config", (char*)NULL)) {
-      no_mon_config = false;
+      values.no_mon_config = false;
     }
     else if (ceph_argparse_flag(args, i, "--foreground", "-f", (char*)NULL)) {
       set_val_or_die("daemonize", "false");
@@ -773,7 +774,7 @@ void md_config_impl<lp>::apply_changes(std::ostream *oss)
   /*
    * apply changes until the cluster name is assigned
    */
-  if (cluster.size())
+  if (values.cluster.size())
     _apply_changes(oss);
 }
 
@@ -954,17 +955,14 @@ void md_config_impl<lp>::get_defaults_bl(bufferlist *bl)
     for (const auto &i : schema) {
       ++n;
       encode(i.second.name, bl);
-      auto j = values.find(i.second.name);
-      if (j != values.end()) {
-       auto k = j->second.find(CONF_DEFAULT);
-       if (k != j->second.end()) {
-         encode(Option::to_str(k->second), bl);
-         continue;
-       }
+      auto [value, found] = values.get_value(i.second.name, CONF_DEFAULT);
+      if (found) {
+       encode(Option::to_str(value), bl);
+      } else {
+       string val;
+       conf_stringify(_get_val_default(i.second), &val);
+       encode(val, bl);
       }
-      string val;
-      conf_stringify(_get_val_default(i.second), &val);
-      encode(val, bl);
     }
     encode(n, defaults_bl);
     defaults_bl.claim_append(bl);
@@ -982,22 +980,22 @@ void md_config_impl<lp>::get_config_bl(
   if (values_bl.length() == 0) {
     uint32_t n = 0;
     bufferlist bl;
-    for (auto& i : values) {
-      if (i.first == "fsid" ||
-         i.first == "host") {
-       continue;
+    values.for_each([&](auto& name, auto& configs) {
+      if (name == "fsid" ||
+         name == "host") {
+       return;
       }
       ++n;
-      encode(i.first, bl);
-      encode((uint32_t)i.second.size(), bl);
-      for (auto& j : i.second) {
+      encode(name, bl);
+      encode((uint32_t)configs.size(), bl);
+      for (auto& j : configs) {
        encode(j.first, bl);
        encode(Option::to_str(j.second), bl);
       }
-    }
+    });
     // make sure overridden items appear, and include the default value
     for (auto& i : ignored_mon_values) {
-      if (values.count(i.first)) {
+      if (values.contains(i.first)) {
        continue;
       }
       if (i.first == "fsid" ||
@@ -1084,25 +1082,17 @@ Option::value_t md_config_impl<lp>::_get_val(
   if (!stack) {
     stack = &a_stack;
   }
-
-  auto p = values.find(o.name);
-  if (p != values.end() && !p->second.empty()) {
-    // use highest-priority value available (see CONF_*)
-    return _expand_meta(p->second.rbegin()->second, &o, stack, err);
-  }
-
-  return _expand_meta(_get_val_default(o), &o, stack, err);
+  return _expand_meta(_get_val_nometa(o), &o, stack, err);
 }
 
 template<LockPolicy lp>
 Option::value_t md_config_impl<lp>::_get_val_nometa(const Option& o) const
 {
-  auto p = values.find(o.name);
-  if (p != values.end() && !p->second.empty()) {
-    // use highest-priority value available (see CONF_*)
-    return p->second.rbegin()->second;
+  if (auto [value, found] = values.get_value(o.name, -1); found) {
+    return value;
+  } else {
+    return _get_val_default(o);
   }
-  return _get_val_default(o);
 }
 
 template<LockPolicy lp>
@@ -1202,21 +1192,21 @@ Option::value_t md_config_impl<lp>::_expand_meta(
       //cout << " found var " << var << std::endl;
       // special metavariable?
       if (var == "type") {
-       out += name.get_type_name();
+       out += values.name.get_type_name();
       } else if (var == "cluster") {
-       out += cluster;
+       out += values.cluster;
       } else if (var == "name") {
-       out += name.to_cstr();
+       out += values.name.to_cstr();
       } else if (var == "host") {
-       if (host == "") {
+       if (values.host == "") {
          out += ceph_get_short_hostname();
        } else {
-         out += host;
+         out += values.host;
        }
       } else if (var == "num") {
-       out += name.get_id().c_str();
+       out += values.name.get_id().c_str();
       } else if (var == "id") {
-       out += name.get_id();
+       out += values.name.get_id();
       } else if (var == "pid") {
        out += stringify(getpid());
         if (o) {
@@ -1333,9 +1323,9 @@ template<LockPolicy lp>
 void md_config_impl<lp>::_get_my_sections(std::vector <std::string> &sections) const
 {
   assert(lock.is_locked());
-  sections.push_back(name.to_str());
+  sections.push_back(values.name.to_str());
 
-  sections.push_back(name.get_type_name());
+  sections.push_back(values.name.get_type_name());
 
   sections.push_back("global");
 }
@@ -1420,30 +1410,20 @@ int md_config_impl<lp>::_set_val(
   }
 
   // Apply the value to its entry in the `values` map
-  auto p = values.find(opt.name);
-  if (p != values.end()) {
-    auto q = p->second.find(level);
-    if (q != p->second.end()) {
-      if (new_value == q->second) {
-       // no change!
-       return 0;
-      }
-      q->second = new_value;
-    } else {
-      p->second[level] = new_value;
-    }
+  auto result = values.set_value(opt.name, std::move(new_value), level);
+  switch (result) {
+  case ConfigValues::SET_NO_CHANGE:
+    return 0;
+  case ConfigValues::SET_NO_EFFECT:
     values_bl.clear();
-    if (p->second.rbegin()->first > level) {
-      // there was a higher priority value; no effect
-      return 0;
-    }
-  } else {
+    return 0;
+  case ConfigValues::SET_HAVE_EFFECT:
+    // fallthrough
+  default:
     values_bl.clear();
-    values[opt.name][level] = new_value;
+    _refresh(opt);
+    return 1;
   }
-
-  _refresh(opt);
-  return 1;
 }
 
 template<LockPolicy lp>
@@ -1454,20 +1434,11 @@ void md_config_impl<lp>::_refresh(const Option& opt)
   if (legacy_ptr_iter != legacy_values.end()) {
     update_legacy_val(opt, legacy_ptr_iter->second);
   }
-
   // Was this a debug_* option update?
   if (opt.subsys >= 0) {
     string actual_val;
     conf_stringify(_get_val(opt), &actual_val);
-    int log, gather;
-    int r = sscanf(actual_val.c_str(), "%d/%d", &log, &gather);
-    if (r >= 1) {
-      if (r < 2) {
-       gather = log;
-      }
-      subsys.set_log_level(opt.subsys, log);
-      subsys.set_gather_level(opt.subsys, gather);
-    }
+    values.set_logging(opt.subsys, actual_val.c_str());
   } else {
     // normal option, advertise the change.
     changed.insert(opt.name);
@@ -1480,17 +1451,11 @@ int md_config_impl<lp>::_rm_val(const std::string& key, int level)
   if (schema.count(key) == 0) {
     return -EINVAL;
   }
-  auto i = values.find(key);
-  if (i == values.end()) {
-    return -ENOENT;
-  }
-  auto j = i->second.find(level);
-  if (j == i->second.end()) {
-    return -ENOENT;
+  auto ret = values.rm_val(key, level);
+  if (ret < 0) {
+    return ret;
   }
-  bool matters = (j->first == i->second.rbegin()->first);
-  i->second.erase(j);
-  if (matters) {
+  if (ret == ConfigValues::SET_HAVE_EFFECT) {
     _refresh(*find_option(key));
   }
   values_bl.clear();
@@ -1565,7 +1530,7 @@ void md_config_impl<lp>::update_legacy_val(const Option &opt,
                                     md_config_impl::member_ptr_t member_ptr)
 {
   Option::value_t v = _get_val(opt);
-  boost::apply_visitor(assign_visitor(this, v), member_ptr);
+  boost::apply_visitor(assign_visitor(&values, v), member_ptr);
 }
 
 static void dump(Formatter *f, int level, Option::value_t in)
@@ -1589,21 +1554,21 @@ void md_config_impl<lp>::diff(
   string name) const
 {
   auto locker = lock();
-  for (auto& i : values) {
-    if (i.second.size() == 1 &&
-       i.second.begin()->first == CONF_DEFAULT) {
+  values.for_each([this, f] (auto& name, auto& configs) {
+    if (configs.size() == 1 &&
+       configs.begin()->first == CONF_DEFAULT) {
       // we only have a default value; exclude from diff
-      continue;
+      return;
     }
-    f->open_object_section(i.first.c_str());
-    const Option *o = find_option(i.first);
+    f->open_object_section(name.c_str());
+    const Option *o = find_option(name);
     dump(f, CONF_DEFAULT, _get_val_default(*o));
-    for (auto& j : i.second) {
+    for (auto& j : configs) {
       dump(f, j.first, j.second);
     }
     dump(f, CONF_FINAL, _get_val(*o));
     f->close_section();
-  }
+  });
 }
 
 template<LockPolicy lp>
index 89a4677d76e0ed2482c94441fde705b7523618a1..d6bef2b81f2fa5c575f5b3b331631e5e1e334734 100644 (file)
 #include <map>
 #include <boost/container/small_vector.hpp>
 #include "common/ConfUtils.h"
-#include "common/entity_name.h"
 #include "common/code_environment.h"
 #include "common/Mutex.h"
 #include "log/SubsystemMap.h"
 #include "common/options.h"
 #include "common/subsys_types.h"
 #include "common/config_fwd.h"
+#include "common/config_values.h"
 #include "common/lock_mutex.h"
 
 class CephContext;
@@ -75,14 +75,14 @@ namespace ceph::internal {
 template<LockPolicy lock_policy>
 struct md_config_impl {
 public:
-  typedef boost::variant<int64_t md_config_t::*,
-                         uint64_t md_config_t::*,
-                         std::string md_config_t::*,
-                         double md_config_t::*,
-                         bool md_config_t::*,
-                         entity_addr_t md_config_t::*,
-                        entity_addrvec_t md_config_t::*,
-                         uuid_d md_config_t::*> member_ptr_t;
+  typedef boost::variant<int64_t ConfigValues::*,
+                         uint64_t ConfigValues::*,
+                         std::string ConfigValues::*,
+                         double ConfigValues::*,
+                         bool ConfigValues::*,
+                         entity_addr_t ConfigValues::*,
+                        entity_addrvec_t ConfigValues::*,
+                         uuid_d ConfigValues::*> member_ptr_t;
 
   // For use when intercepting configuration updates
   typedef std::function<bool(
@@ -101,7 +101,7 @@ public:
   /*
    * Mapping from legacy config option names to class members
    */
-  std::map<std::string, md_config_impl::member_ptr_t> legacy_values;
+  std::map<std::string, member_ptr_t> legacy_values;
 
   /**
    * The configuration schema, in the form of Option objects describing
@@ -112,7 +112,7 @@ public:
   /**
    * The current values of all settings described by the schema
    */
-  std::map<std::string, map<int32_t,Option::value_t>> values;
+  ConfigValues values;
 
   /// values from mon that we failed to set
   std::map<std::string,std::string> ignored_mon_values;
@@ -304,8 +304,7 @@ private:
 
 
   void update_legacy_vals();
-  void update_legacy_val(const Option &opt,
-      md_config_impl::member_ptr_t member);
+  void update_legacy_val(const Option &opt, member_ptr_t member);
 
   Option::value_t _expand_meta(
     const Option::value_t& in,
@@ -343,53 +342,8 @@ private:
   vector<Option> subsys_options;
 
 public:
-  ceph::logging::SubsystemMap subsys;
-
-  EntityName name;
   string data_dir_option;  ///< data_dir config option, if any
 
-  /// cluster name
-  string cluster;
-
-  bool no_mon_config = false;
-
-// This macro block defines C members of the md_config_t struct
-// corresponding to the definitions in legacy_config_opts.h.
-// These C members are consumed by code that was written before
-// the new options.cc infrastructure: all newer code should
-// be consume options via explicit get() rather than C members.
-#define OPTION_OPT_INT(name) int64_t name;
-#define OPTION_OPT_LONGLONG(name) int64_t name;
-#define OPTION_OPT_STR(name) std::string name;
-#define OPTION_OPT_DOUBLE(name) double name;
-#define OPTION_OPT_FLOAT(name) double name;
-#define OPTION_OPT_BOOL(name) bool name;
-#define OPTION_OPT_ADDR(name) entity_addr_t name;
-#define OPTION_OPT_ADDRVEC(name) entity_addrvec_t name;
-#define OPTION_OPT_U32(name) uint64_t name;
-#define OPTION_OPT_U64(name) uint64_t name;
-#define OPTION_OPT_UUID(name) uuid_d name;
-#define OPTION(name, ty) \
-  public:                      \
-    OPTION_##ty(name)          
-#define SAFE_OPTION(name, ty) \
-  protected:                        \
-    OPTION_##ty(name)               
-#include "common/legacy_config_opts.h"
-#undef OPTION_OPT_INT
-#undef OPTION_OPT_LONGLONG
-#undef OPTION_OPT_STR
-#undef OPTION_OPT_DOUBLE
-#undef OPTION_OPT_FLOAT
-#undef OPTION_OPT_BOOL
-#undef OPTION_OPT_ADDR
-#undef OPTION_OPT_ADDRVEC
-#undef OPTION_OPT_U32
-#undef OPTION_OPT_U64
-#undef OPTION_OPT_UUID
-#undef OPTION
-#undef SAFE_OPTION
-
 public:
   unsigned get_osd_pool_default_min_size() const {
     auto min_size = get_val<uint64_t>("osd_pool_default_min_size");
index 7ba2f461493f076ff5048703aeddcc7065d7856f..cbd5746fd56e102a90c14bd4ceefed9ca4706f0d 100644 (file)
@@ -20,7 +20,7 @@
 
 template <typename ValueT>
 class md_config_cacher_t : public md_config_obs_t {
-  md_config_t& conf;
+  ConfigProxy& conf;
   const char* const option_name;
   std::atomic<ValueT> value_cache;
 
@@ -37,7 +37,7 @@ class md_config_cacher_t : public md_config_obs_t {
   }
 
 public:
-  md_config_cacher_t(md_config_t& conf,
+  md_config_cacher_t(ConfigProxy& conf,
                      const char* const option_name)
     : conf(conf),
       option_name(option_name) {
index ff39a77b9513252b69075982bdaa6c5bde9ab2c0..33e89ab2801fc72ea8193e41c9b20b86fd03ce73 100644 (file)
@@ -13,3 +13,4 @@ using md_config_t =
   ceph::internal::md_config_impl<ceph::internal::LockPolicy::MUTEX>;
 using md_config_obs_t =
   ceph::internal::md_config_obs_impl<ceph::internal::LockPolicy::MUTEX>;
+class ConfigProxy;
diff --git a/src/common/config_proxy.h b/src/common/config_proxy.h
new file mode 100644 (file)
index 0000000..71224fc
--- /dev/null
@@ -0,0 +1,162 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+
+#pragma once
+
+#include <memory>
+#include <type_traits>
+
+#include "common/config.h"
+#include "common/config_fwd.h"
+
+template<bool is_const>
+class ConfigProxyBase {
+protected:
+  using config_t = std::conditional_t<is_const,
+                                     const md_config_t,
+                                     md_config_t>;
+  config_t* config;
+  ConfigProxyBase(config_t* c)
+    : config{c}
+  {}
+public:
+  const ConfigValues* operator->() const noexcept {
+    return &config->values;
+  }
+  int get_val(const std::string& key, char** buf, int len) const {
+    return config->get_val(key, buf, len);
+  }
+  int get_val(const std::string &key, std::string *val) const {
+    return config->get_val(key, val);
+  }
+  template<typename T>
+  const T get_val(const std::string& key) const {
+    return config->template get_val<T>(key);
+  }
+  template<typename T, typename Callback, typename...Args>
+  auto with_val(const string& key, Callback&& cb, Args&&... args) const {
+    return config->template with_val<T>(key, std::forward<Callback>(cb),
+                                       std::forward<Args>(args)...);
+  }
+  const Option* get_schema(const std::string& key) const {
+    auto found = config->schema.find(key);
+    if (found == config->schema.end()) {
+      return nullptr;
+    } else {
+      return &found->second;
+    }
+  }
+  const Option *find_option(const string& name) const {
+    return config->find_option(name);
+  }
+  void diff(Formatter *f, const std::string& name=string{}) const {
+    return config->diff(f, name);
+  }
+  void get_my_sections(std::vector <std::string> &sections) const {
+    config->get_my_sections(sections);
+  }
+  int get_all_sections(std::vector<std::string>& sections) const {
+    return config->get_all_sections(sections);
+  }
+  int get_val_from_conf_file(const std::vector<std::string>& sections,
+                            const std::string& key, std::string& out,
+                            bool emeta) const {
+    return config->get_val_from_conf_file(sections, key, out, emeta);
+  }
+  unsigned get_osd_pool_default_min_size() const {
+    return config->get_osd_pool_default_min_size();
+  }
+  void early_expand_meta(std::string &val,
+                        std::ostream *oss) const {
+    return config->early_expand_meta(val, oss);
+  }
+};
+
+class ConfigReader final : public ConfigProxyBase<true> {
+public:
+  explicit ConfigReader(const md_config_t* config)
+    : ConfigProxyBase<true>{config}
+  {}
+};
+
+class ConfigProxy final : public ConfigProxyBase<false> {
+  std::unique_ptr<md_config_t> conf;
+public:
+  explicit ConfigProxy(bool is_daemon)
+    : ConfigProxyBase{nullptr},
+      conf{std::make_unique<md_config_t>(is_daemon)}
+  {
+    config = conf.get();
+  }
+  void add_observer(md_config_obs_t* obs) {
+    config->add_observer(obs);
+  }
+  void remove_observer(md_config_obs_t* obs) {
+    config->remove_observer(obs);
+  }
+  void set_safe_to_start_threads() {
+    config->set_safe_to_start_threads();
+  }
+  void _clear_safe_to_start_threads() {
+    config->_clear_safe_to_start_threads();
+  }
+  void call_all_observers() {
+    config->call_all_observers();
+  }
+  void show_config(std::ostream& out) {
+    config->show_config(out);
+  }
+  void show_config(Formatter *f) {
+    config->show_config(f);
+  }
+  void config_options(Formatter *f) {
+    config->config_options(f);
+  }
+  int rm_val(const std::string& key) {
+    return config->rm_val(key);
+  }
+  void apply_changes(std::ostream* oss) {
+    config->apply_changes(oss);
+  }
+  int set_val(const std::string& key, const string& s,
+              std::stringstream* err_ss=nullptr) {
+    return config->set_val(key, s, err_ss);
+  }
+  void set_val_default(const std::string& key, const std::string& val) {
+    config->set_val_default(key, val);
+  }
+  void set_val_or_die(const std::string& key, const std::string& val) {
+    config->set_val_or_die(key, val);
+  }
+  int set_mon_vals(CephContext *cct,
+                  const map<std::string,std::string>& kv,
+                  md_config_t::config_callback config_cb) {
+    return config->set_mon_vals(cct, kv, config_cb);
+  }
+  int injectargs(const std::string &s, std::ostream *oss) {
+    return config->injectargs(s, oss);
+  }
+  void parse_env(const char *env_var = "CEPH_ARGS") {
+    config->parse_env(env_var);
+  }
+  int parse_argv(std::vector<const char*>& args, int level=CONF_CMDLINE) {
+    return config->parse_argv(args, level);
+  }
+  int parse_config_files(const char *conf_files,
+                        std::ostream *warnings, int flags) {
+    return config->parse_config_files(conf_files, warnings, flags);
+  }
+  void complain_about_parse_errors(CephContext *cct) {
+    return config->complain_about_parse_errors(cct);
+  }
+  void do_argv_commands() {
+    config->do_argv_commands();
+  }
+  void get_config_bl(uint64_t have_version,
+                    bufferlist *bl,
+                    uint64_t *got_version) {
+    config->get_config_bl(have_version, bl, got_version);
+  }
+  void get_defaults_bl(bufferlist *bl) {
+    config->get_defaults_bl(bl);
+  }
+};
diff --git a/src/common/config_values.cc b/src/common/config_values.cc
new file mode 100644 (file)
index 0000000..24f556e
--- /dev/null
@@ -0,0 +1,84 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+#include "config_values.h"
+
+#include "config.h"
+
+ConfigValues::set_value_result_t
+ConfigValues::set_value(const std::string& key,
+                        Option::value_t&& new_value,
+                        int level)
+{  
+  if (auto p = values.find(key); p != values.end()) {
+    auto q = p->second.find(level);
+    if (q != p->second.end()) {
+      if (new_value == q->second) {
+        return SET_NO_CHANGE;
+      }
+      q->second = std::move(new_value);
+    } else {
+      p->second[level] = std::move(new_value);
+    }
+    if (p->second.rbegin()->first > level) {
+      // there was a higher priority value; no effect
+      return SET_NO_EFFECT;
+    } else {
+      return SET_HAVE_EFFECT;
+    }
+  } else {
+    values[key][level] = std::move(new_value);
+    return SET_HAVE_EFFECT;
+  }
+}
+
+int ConfigValues::rm_val(const std::string& key, int level)
+{
+  auto i = values.find(key);
+  if (i == values.end()) {
+    return -ENOENT;
+  }
+  auto j = i->second.find(level);
+  if (j == i->second.end()) {
+    return -ENOENT;
+  }
+  bool matters = (j->first == i->second.rbegin()->first);
+  i->second.erase(j);
+  if (matters) {
+    return SET_HAVE_EFFECT;
+  } else {
+    return SET_NO_EFFECT;
+  }
+}
+
+std::pair<Option::value_t, bool>
+ConfigValues::get_value(const std::string& name, int level) const
+{
+  auto p = values.find(name);
+  if (p != values.end() && !p->second.empty()) {
+    // use highest-priority value available (see CONF_*)
+    if (level < 0) {
+      return {p->second.rbegin()->second, true};
+    } else if (auto found = p->second.find(level);
+               found != p->second.end()) {
+      return {found->second, true};
+    }
+  }
+  return {Option::value_t{}, false};
+}
+
+void ConfigValues::set_logging(int which, const char* val)
+{
+  int log, gather;
+  int r = sscanf(val, "%d/%d", &log, &gather);
+  if (r >= 1) {
+    if (r < 2) {
+      gather = log;
+    }
+    subsys.set_log_level(which, log);
+    subsys.set_gather_level(which, gather);
+  }
+}
+
+bool ConfigValues::contains(const std::string& key) const
+{
+  return values.count(key);
+}
diff --git a/src/common/config_values.h b/src/common/config_values.h
new file mode 100644 (file)
index 0000000..8ac5f21
--- /dev/null
@@ -0,0 +1,91 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+
+#pragma once
+
+#include <cstdint>
+#include <map>
+#include <set>
+#include <string>
+#include <utility>
+
+#include "common/entity_name.h"
+#include "common/options.h"
+#include "log/SubsystemMap.h"
+#include "msg/msg_types.h"
+
+class ConfigValues {
+  using changed_set_t = std::set<std::string>;
+  using values_t = std::map<std::string, map<int32_t,Option::value_t>>;
+  values_t values;
+
+public:
+  EntityName name;
+  /// cluster name
+  string cluster;
+  ceph::logging::SubsystemMap subsys;
+  bool no_mon_config = false;
+
+// This macro block defines C members of the md_config_t struct
+// corresponding to the definitions in legacy_config_opts.h.
+// These C members are consumed by code that was written before
+// the new options.cc infrastructure: all newer code should
+// be consume options via explicit get() rather than C members.
+#define OPTION_OPT_INT(name) int64_t name;
+#define OPTION_OPT_LONGLONG(name) int64_t name;
+#define OPTION_OPT_STR(name) std::string name;
+#define OPTION_OPT_DOUBLE(name) double name;
+#define OPTION_OPT_FLOAT(name) double name;
+#define OPTION_OPT_BOOL(name) bool name;
+#define OPTION_OPT_ADDR(name) entity_addr_t name;
+#define OPTION_OPT_ADDRVEC(name) entity_addrvec_t name;
+#define OPTION_OPT_U32(name) uint64_t name;
+#define OPTION_OPT_U64(name) uint64_t name;
+#define OPTION_OPT_UUID(name) uuid_d name;
+#define OPTION(name, ty)       \
+  public:                      \
+    OPTION_##ty(name)          
+#define SAFE_OPTION(name, ty)       \
+  protected:                        \
+    OPTION_##ty(name)               
+#include "common/legacy_config_opts.h"
+#undef OPTION_OPT_INT
+#undef OPTION_OPT_LONGLONG
+#undef OPTION_OPT_STR
+#undef OPTION_OPT_DOUBLE
+#undef OPTION_OPT_FLOAT
+#undef OPTION_OPT_BOOL
+#undef OPTION_OPT_ADDR
+#undef OPTION_OPT_ADDRVEC
+#undef OPTION_OPT_U32
+#undef OPTION_OPT_U64
+#undef OPTION_OPT_UUID
+#undef OPTION
+#undef SAFE_OPTION
+
+public:
+  enum set_value_result_t {
+    SET_NO_CHANGE,
+    SET_NO_EFFECT,
+    SET_HAVE_EFFECT,
+  };
+  /**
+   * @return true if changed, false otherwise
+   */
+  set_value_result_t set_value(const std::string& key,
+                               Option::value_t&& value,
+                               int level);
+  int rm_val(const std::string& key, int level);
+  void set_logging(int which, const char* val);
+  /**
+   * @param level the level of the setting, -1 for the one with the 
+   *              highest-priority
+   */
+  std::pair<Option::value_t, bool> get_value(const std::string& name,
+                                             int level) const;
+  template<typename Func> void for_each(Func&& func) const {
+    for (const auto& [name,configs] : values) {
+      func(name, configs);
+    }
+  }
+  bool contains(const std::string& key) const;
+};
index 47d02aed3477578612d10fd3384b608bb61596da..5a5af3728d2ae3ba1f030690500da1b6d010bd66 100644 (file)
@@ -165,26 +165,26 @@ static void fill_in_one_address(CephContext *cct,
 
   Observer obs(conf_var);
 
-  cct->_conf->add_observer(&obs);
+  cct->_conf.add_observer(&obs);
 
-  cct->_conf->set_val_or_die(conf_var, buf);
-  cct->_conf->apply_changes(nullptr);
+  cct->_conf.set_val_or_die(conf_var, buf);
+  cct->_conf.apply_changes(nullptr);
 
-  cct->_conf->remove_observer(&obs);
+  cct->_conf.remove_observer(&obs);
 }
 
 void pick_addresses(CephContext *cct, int needs)
 {
   struct ifaddrs *ifa;
   int r = getifaddrs(&ifa);
-  auto public_addr = cct->_conf->get_val<entity_addr_t>("public_addr");
-  auto public_network = cct->_conf->get_val<std::string>("public_network");
+  auto public_addr = cct->_conf.get_val<entity_addr_t>("public_addr");
+  auto public_network = cct->_conf.get_val<std::string>("public_network");
   auto public_network_interface =
-    cct->_conf->get_val<std::string>("public_network_interface");
-  auto cluster_addr = cct->_conf->get_val<entity_addr_t>("cluster_addr");
-  auto cluster_network = cct->_conf->get_val<std::string>("cluster_network");
+    cct->_conf.get_val<std::string>("public_network_interface");
+  auto cluster_addr = cct->_conf.get_val<entity_addr_t>("cluster_addr");
+  auto cluster_network = cct->_conf.get_val<std::string>("cluster_network");
   auto cluster_network_interface =
-    cct->_conf->get_val<std::string>("cluster_network_interface");
+    cct->_conf.get_val<std::string>("cluster_network_interface");
 
   if (r < 0) {
     string err = cpp_strerror(errno);
@@ -272,10 +272,10 @@ int pick_addresses(
   unsigned msgrv = flags & (CEPH_PICK_ADDRESS_MSGR1 |
                            CEPH_PICK_ADDRESS_MSGR2);
   if (msgrv == 0) {
-    if (cct->_conf->get_val<bool>("ms_bind_msgr1")) {
+    if (cct->_conf.get_val<bool>("ms_bind_msgr1")) {
       msgrv |= CEPH_PICK_ADDRESS_MSGR1;
     }
-    if (cct->_conf->get_val<bool>("ms_bind_msgr2")) {
+    if (cct->_conf.get_val<bool>("ms_bind_msgr2")) {
       msgrv |= CEPH_PICK_ADDRESS_MSGR2;
     }
     if (msgrv == 0) {
@@ -285,16 +285,16 @@ int pick_addresses(
   unsigned ipv = flags & (CEPH_PICK_ADDRESS_IPV4 |
                          CEPH_PICK_ADDRESS_IPV6);
   if (ipv == 0) {
-    if (cct->_conf->get_val<bool>("ms_bind_ipv4")) {
+    if (cct->_conf.get_val<bool>("ms_bind_ipv4")) {
       ipv |= CEPH_PICK_ADDRESS_IPV4;
     }
-    if (cct->_conf->get_val<bool>("ms_bind_ipv6")) {
+    if (cct->_conf.get_val<bool>("ms_bind_ipv6")) {
       ipv |= CEPH_PICK_ADDRESS_IPV6;
     }
     if (ipv == 0) {
       return -EINVAL;
     }
-    if (cct->_conf->get_val<bool>("ms_bind_prefer_ipv4")) {
+    if (cct->_conf.get_val<bool>("ms_bind_prefer_ipv4")) {
       flags |= CEPH_PICK_ADDRESS_PREFER_IPV4;
     } else {
       flags &= ~CEPH_PICK_ADDRESS_PREFER_IPV4;
@@ -305,20 +305,20 @@ int pick_addresses(
   string networks;
   string interfaces;
   if (addrt & CEPH_PICK_ADDRESS_PUBLIC) {
-    addr = cct->_conf->get_val<entity_addr_t>("public_addr");
-    networks = cct->_conf->get_val<std::string>("public_network");
+    addr = cct->_conf.get_val<entity_addr_t>("public_addr");
+    networks = cct->_conf.get_val<std::string>("public_network");
     interfaces =
-      cct->_conf->get_val<std::string>("public_network_interface");
+      cct->_conf.get_val<std::string>("public_network_interface");
   } else {
-    addr = cct->_conf->get_val<entity_addr_t>("cluster_addr");
-    networks = cct->_conf->get_val<std::string>("cluster_network");
+    addr = cct->_conf.get_val<entity_addr_t>("cluster_addr");
+    networks = cct->_conf.get_val<std::string>("cluster_network");
     interfaces =
-      cct->_conf->get_val<std::string>("cluster_network_interface");
+      cct->_conf.get_val<std::string>("cluster_network_interface");
     if (networks.empty()) {
       // fall back to public_ network and interface if cluster is not set
-      networks = cct->_conf->get_val<std::string>("public_network");
+      networks = cct->_conf.get_val<std::string>("public_network");
       interfaces =
-       cct->_conf->get_val<std::string>("public_network_interface");
+       cct->_conf.get_val<std::string>("public_network_interface");
     }
   }
   if (addr.is_blank_ip() &&
index 526de44f88756b1c2273d2b10247c97f3ebf71b4..a79d7d95a63eafe36fd4829132916e364a8039c1 100644 (file)
@@ -111,7 +111,7 @@ public:
       lderr(cct) << "leaked refs:\n";
       dump_weak_refs(*_dout);
       *_dout << dendl;
-      if (cct->_conf->get_val<bool>("debug_asserts_on_shutdown")) {
+      if (cct->_conf.get_val<bool>("debug_asserts_on_shutdown")) {
        assert(weak_refs.empty());
       }
     }
index c5be83571371f643c17ae1ce9f9a1de3ed1cede8..e54e4939debe765661028ee8867b2783e4a02b3e 100644 (file)
@@ -3167,7 +3167,7 @@ void CrushWrapper::generate_test_instances(list<CrushWrapper*>& o)
  */
 int CrushWrapper::get_osd_pool_default_crush_replicated_ruleset(CephContext *cct)
 {
-  int crush_ruleset = cct->_conf->get_val<int64_t>("osd_pool_default_crush_rule");
+  int crush_ruleset = cct->_conf.get_val<int64_t>("osd_pool_default_crush_rule");
   if (crush_ruleset < 0) {
     crush_ruleset = find_first_ruleset(pg_pool_t::TYPE_REPLICATED);
   } else if (!ruleset_exists(crush_ruleset)) {
index 9e511d44da95fec85580f4c9a69da46c8acb73cb..624d24136db885c2b67058a656d557e0f0de7b23 100644 (file)
@@ -19,7 +19,9 @@
  * Global variables for use from process context.
  */
 CephContext *g_ceph_context = NULL;
-md_config_t *g_conf = NULL;
+ConfigProxy& g_conf() {
+  return g_ceph_context->_conf;
+}
 
 const char *g_assert_file = 0;
 int g_assert_line = 0;
index 2396b62f27f3049e9a7d3c51de7147174c1a8c3b..a58e4b26c9046e42447e72f5e1b0bb3753f91979 100644 (file)
@@ -20,7 +20,7 @@
 class CephContext;
 
 extern CephContext *g_ceph_context;
-extern md_config_t *g_conf;
+ConfigProxy& g_conf();
 
 extern const char *g_assert_file;
 extern int g_assert_line;
index 41ea214a38f90060066dc30181f0ce5da440bb38..39989e895cdb790442be66d854f387b6a01d5802 100644 (file)
@@ -42,7 +42,6 @@
 static void global_init_set_globals(CephContext *cct)
 {
   g_ceph_context = cct;
-  g_conf = cct->_conf;
 }
 
 static void output_ceph_version()
@@ -97,7 +96,7 @@ void global_pre_init(
   CephContext *cct = common_preinit(iparams, code_env, flags);
   cct->_conf->cluster = cluster;
   global_init_set_globals(cct);
-  md_config_t *conf = cct->_conf;
+  auto& conf = cct->_conf;
 
   if (flags & (CINIT_FLAG_NO_DEFAULT_CONFIG_FILE|
               CINIT_FLAG_NO_MON_CONFIG)) {
@@ -107,12 +106,12 @@ void global_pre_init(
   // alternate defaults
   if (defaults) {
     for (auto& i : *defaults) {
-      conf->set_val_default(i.first, i.second);
+      conf.set_val_default(i.first, i.second);
     }
   }
 
-  int ret = conf->parse_config_files(c_str_or_null(conf_file_list),
-                                    &cerr, flags);
+  int ret = conf.parse_config_files(c_str_or_null(conf_file_list),
+                                   &cerr, flags);
   if (ret == -EDOM) {
     cct->_log->flush();
     cerr << "global_init: error parsing config file." << std::endl;
@@ -137,14 +136,14 @@ void global_pre_init(
   }
 
   // environment variables override (CEPH_ARGS, CEPH_KEYRING)
-  conf->parse_env();
+  conf.parse_env();
 
   // command line (as passed by caller)
-  conf->parse_argv(args);
+  conf.parse_argv(args);
 
   if (!conf->no_mon_config) {
     // make sure our mini-session gets legacy values
-    conf->apply_changes(nullptr);
+    conf.apply_changes(nullptr);
 
     MonClient mc_bootstrap(g_ceph_context);
     if (mc_bootstrap.get_monmap_and_config() < 0) {
@@ -156,10 +155,10 @@ void global_pre_init(
   }
 
   // do the --show-config[-val], if present in argv
-  conf->do_argv_commands();
+  conf.do_argv_commands();
 
   // Now we're ready to complain about config file parse errors
-  g_conf->complain_about_parse_errors(g_ceph_context);
+  g_conf().complain_about_parse_errors(g_ceph_context);
 }
 
 boost::intrusive_ptr<CephContext>
@@ -191,12 +190,12 @@ global_init(const std::map<std::string,std::string> *defaults,
   int siglist[] = { SIGPIPE, 0 };
   block_signals(siglist, NULL);
 
-  if (g_conf->fatal_signal_handlers) {
+  if (g_conf()->fatal_signal_handlers) {
     install_standard_sighandlers();
   }
   register_assert_context(g_ceph_context);
 
-  if (g_conf->log_flush_on_exit)
+  if (g_conf()->log_flush_on_exit)
     g_ceph_context->_log->set_flush_on_exit();
 
   // drop privileges?
@@ -204,63 +203,63 @@ global_init(const std::map<std::string,std::string> *defaults,
  
   // consider --setuser root a no-op, even if we're not root
   if (getuid() != 0) {
-    if (g_conf->setuser.length()) {
-      cerr << "ignoring --setuser " << g_conf->setuser << " since I am not root"
+    if (g_conf()->setuser.length()) {
+      cerr << "ignoring --setuser " << g_conf()->setuser << " since I am not root"
           << std::endl;
     }
-    if (g_conf->setgroup.length()) {
-      cerr << "ignoring --setgroup " << g_conf->setgroup
+    if (g_conf()->setgroup.length()) {
+      cerr << "ignoring --setgroup " << g_conf()->setgroup
           << " since I am not root" << std::endl;
     }
-  } else if (g_conf->setgroup.length() ||
-             g_conf->setuser.length()) {
+  } else if (g_conf()->setgroup.length() ||
+             g_conf()->setuser.length()) {
     uid_t uid = 0;  // zero means no change; we can only drop privs here.
     gid_t gid = 0;
     std::string uid_string;
     std::string gid_string;
-    if (g_conf->setuser.length()) {
-      uid = atoi(g_conf->setuser.c_str());
+    if (g_conf()->setuser.length()) {
+      uid = atoi(g_conf()->setuser.c_str());
       if (!uid) {
        char buf[4096];
        struct passwd pa;
        struct passwd *p = 0;
-       getpwnam_r(g_conf->setuser.c_str(), &pa, buf, sizeof(buf), &p);
+       getpwnam_r(g_conf()->setuser.c_str(), &pa, buf, sizeof(buf), &p);
        if (!p) {
-         cerr << "unable to look up user '" << g_conf->setuser << "'"
+         cerr << "unable to look up user '" << g_conf()->setuser << "'"
               << std::endl;
          exit(1);
        }
        uid = p->pw_uid;
        gid = p->pw_gid;
-       uid_string = g_conf->setuser;
+       uid_string = g_conf()->setuser;
       }
     }
-    if (g_conf->setgroup.length() > 0) {
-      gid = atoi(g_conf->setgroup.c_str());
+    if (g_conf()->setgroup.length() > 0) {
+      gid = atoi(g_conf()->setgroup.c_str());
       if (!gid) {
        char buf[4096];
        struct group gr;
        struct group *g = 0;
-       getgrnam_r(g_conf->setgroup.c_str(), &gr, buf, sizeof(buf), &g);
+       getgrnam_r(g_conf()->setgroup.c_str(), &gr, buf, sizeof(buf), &g);
        if (!g) {
-         cerr << "unable to look up group '" << g_conf->setgroup << "'"
+         cerr << "unable to look up group '" << g_conf()->setgroup << "'"
               << ": " << cpp_strerror(errno) << std::endl;
          exit(1);
        }
        gid = g->gr_gid;
-       gid_string = g_conf->setgroup;
+       gid_string = g_conf()->setgroup;
       }
     }
     if ((uid || gid) &&
-       g_conf->setuser_match_path.length()) {
+       g_conf()->setuser_match_path.length()) {
       // induce early expansion of setuser_match_path config option
-      string match_path = g_conf->setuser_match_path;
-      g_conf->early_expand_meta(match_path, &cerr);
+      string match_path = g_conf()->setuser_match_path;
+      g_conf().early_expand_meta(match_path, &cerr);
       struct stat st;
       int r = ::stat(match_path.c_str(), &st);
       if (r < 0) {
        cerr << "unable to stat setuser_match_path "
-            << g_conf->setuser_match_path
+            << g_conf()->setuser_match_path
             << ": " << cpp_strerror(errno) << std::endl;
        exit(1);
       }
@@ -306,20 +305,20 @@ global_init(const std::map<std::string,std::string> *defaults,
 #endif
 
   // Expand metavariables. Invoke configuration observers. Open log file.
-  g_conf->apply_changes(NULL);
+  g_conf().apply_changes(NULL);
 
-  if (g_conf->run_dir.length() &&
+  if (g_conf()->run_dir.length() &&
       code_env == CODE_ENVIRONMENT_DAEMON &&
       !(flags & CINIT_FLAG_NO_DAEMON_ACTIONS)) {
-    int r = ::mkdir(g_conf->run_dir.c_str(), 0755);
+    int r = ::mkdir(g_conf()->run_dir.c_str(), 0755);
     if (r < 0 && errno != EEXIST) {
-      cerr << "warning: unable to create " << g_conf->run_dir << ": " << cpp_strerror(errno) << std::endl;
+      cerr << "warning: unable to create " << g_conf()->run_dir << ": " << cpp_strerror(errno) << std::endl;
     }
   }
 
   // call all observers now.  this has the side-effect of configuring
   // and opening the log file immediately.
-  g_conf->call_all_observers();
+  g_conf().call_all_observers();
 
   if (priv_ss.str().length()) {
     dout(0) << priv_ss.str() << dendl;
@@ -330,7 +329,7 @@ global_init(const std::map<std::string,std::string> *defaults,
     // Fix ownership on log files and run directories if needed.
     // Admin socket files are chown()'d during the common init path _after_
     // the service thread has been started. This is sadly a bit of a hack :(
-    chown_path(g_conf->run_dir,
+    chown_path(g_conf()->run_dir,
               g_ceph_context->get_set_uid(),
               g_ceph_context->get_set_gid(),
               g_ceph_context->get_set_uid_string(),
@@ -341,10 +340,10 @@ global_init(const std::map<std::string,std::string> *defaults,
   }
 
   // Now we're ready to complain about config file parse errors
-  g_conf->complain_about_parse_errors(g_ceph_context);
+  g_conf().complain_about_parse_errors(g_ceph_context);
 
   // test leak checking
-  if (g_conf->debug_deliberately_leak_memory) {
+  if (g_conf()->debug_deliberately_leak_memory) {
     derr << "deliberately leaking some memory" << dendl;
     char *s = new char[1234567];
     (void)s;
@@ -382,7 +381,7 @@ int global_init_prefork(CephContext *cct)
   if (g_code_env != CODE_ENVIRONMENT_DAEMON)
     return -1;
 
-  const md_config_t *conf = cct->_conf;
+  const auto& conf = cct->_conf;
   if (!conf->daemonize) {
 
     if (pidfile_write(conf) < 0)
@@ -464,7 +463,7 @@ void global_init_postfork_start(CephContext *cct)
    */
   reopen_as_null(cct, STDIN_FILENO);
 
-  const md_config_t *conf = cct->_conf;
+  const auto& conf = cct->_conf;
   if (pidfile_write(conf) < 0)
     exit(1);
 
@@ -498,7 +497,7 @@ void global_init_postfork_finish(CephContext *cct)
 
 void global_init_chdir(const CephContext *cct)
 {
-  const md_config_t *conf = cct->_conf;
+  const auto& conf = cct->_conf;
   if (conf->chdir.empty())
     return;
   if (::chdir(conf->chdir.c_str())) {
@@ -521,7 +520,7 @@ int global_init_shutdown_stderr(CephContext *cct)
 
 int global_init_preload_erasure_code(const CephContext *cct)
 {
-  const md_config_t *conf = cct->_conf;
+  const auto& conf = cct->_conf;
   string plugins = conf->osd_erasure_code_plugins;
 
   // validate that this is a not a legacy plugin
@@ -556,7 +555,7 @@ int global_init_preload_erasure_code(const CephContext *cct)
   stringstream ss;
   int r = ErasureCodePluginRegistry::instance().preload(
     plugins,
-    conf->get_val<std::string>("erasure_code_dir"),
+    conf.get_val<std::string>("erasure_code_dir"),
     &ss);
   if (r)
     derr << ss.str() << dendl;
index 14e5871872a3b3996c9ceebab7a28bc6d4e917e1..de242d779b3639a62c0aac81a534f1bbefa146c4 100644 (file)
@@ -64,7 +64,7 @@ struct pidfh {
   }
   int verify();
   int remove();
-  int open(const md_config_t *conf);
+  int open(const ConfigProxy& conf);
   int write();
 };
 
@@ -132,7 +132,7 @@ int pidfh::remove()
   return 0;
 }
 
-int pidfh::open(const md_config_t *conf)
+int pidfh::open(const ConfigProxy& conf)
 {
   int len = snprintf(pf_path, sizeof(pf_path),
                    "%s", conf->pid_file.c_str());
@@ -209,7 +209,7 @@ void pidfile_remove()
   pfh = nullptr;
 }
 
-int pidfile_write(const md_config_t *conf)
+int pidfile_write(const ConfigProxy& conf)
 {
   if (conf->pid_file.empty()) {
     dout(0) << __func__ << ": ignore empty --pid-file" << dendl;
index 2b71318b44f85d4a94cb7938e0957eb3254f8f40..1780263f0b459e3f3ebb024f2599ba5ac3a37a8b 100644 (file)
@@ -19,7 +19,7 @@
 
 // Write a pidfile with the current pid, using the configuration in the
 // provided conf structure.
-int pidfile_write(const md_config_t *conf);
+int pidfile_write(const ConfigProxy& conf);
 
 // Remove the pid file that was previously written by pidfile_write.
 // This is safe to call in a signal handler context.
index 5af31c28df236fd7d1a7cbca0692c5873fc0056e..b36d41b880d8e19fac0312a6a446c69be853767c 100644 (file)
@@ -195,7 +195,7 @@ static void handle_fatal_signal(int signum)
        jf.open_object_section("crash");
        jf.dump_string("crash_id", id);
        now.gmtime(jf.dump_stream("timestamp"));
-       jf.dump_string("entity_name", g_ceph_context->_conf->name.to_str());
+       jf.dump_string("entity_name", g_ceph_context->_conf.name().to_str());
        jf.dump_string("ceph_version", ceph_version_to_str());
 
        struct utsname u;
index 97ba92ac3a75d771beba052b63339c99df67cc69..e9bf701d0fb33255e4cf41eb251a0077b5745161 100644 (file)
@@ -134,11 +134,11 @@ static int build_map_buf(CephContext *cct, const char *pool, const char *image,
 
   KeyRing keyring;
   auto auth_client_required =
-    cct->_conf->get_val<std::string>("auth_client_required");
+    cct->_conf.get_val<std::string>("auth_client_required");
   if (auth_client_required != "none") {
     r = keyring.from_ceph_context(cct);
-    auto keyfile = cct->_conf->get_val<std::string>("keyfile");
-    auto key = cct->_conf->get_val<std::string>("key");
+    auto keyfile = cct->_conf.get_val<std::string>("keyfile");
+    auto key = cct->_conf.get_val<std::string>("key");
     if (r == -ENOENT && keyfile.empty() && key.empty())
       r = 0;
     if (r < 0) {
index 58cb2538db984d149c062fb63e95c43381319fa9..c2ba32686bb195165729590b1e140e24e699c19e 100644 (file)
@@ -48,14 +48,14 @@ int LevelDBStore::init(string option_str)
 {
   // init defaults.  caller can override these if they want
   // prior to calling open.
-  options.write_buffer_size = g_conf->leveldb_write_buffer_size;
-  options.cache_size = g_conf->leveldb_cache_size;
-  options.block_size = g_conf->leveldb_block_size;
-  options.bloom_size = g_conf->leveldb_bloom_size;
-  options.compression_enabled = g_conf->leveldb_compression;
-  options.paranoid_checks = g_conf->leveldb_paranoid;
-  options.max_open_files = g_conf->leveldb_max_open_files;
-  options.log_file = g_conf->leveldb_log;
+  options.write_buffer_size = g_conf()->leveldb_write_buffer_size;
+  options.cache_size = g_conf()->leveldb_cache_size;
+  options.block_size = g_conf()->leveldb_block_size;
+  options.bloom_size = g_conf()->leveldb_bloom_size;
+  options.compression_enabled = g_conf()->leveldb_compression;
+  options.paranoid_checks = g_conf()->leveldb_paranoid;
+  options.max_open_files = g_conf()->leveldb_max_open_files;
+  options.log_file = g_conf()->leveldb_log;
   return 0;
 }
 
@@ -107,7 +107,7 @@ int LevelDBStore::load_leveldb_options(bool create_if_missing, leveldb::Options
   ldoptions.paranoid_checks = options.paranoid_checks;
   ldoptions.create_if_missing = create_if_missing;
 
-  if (g_conf->leveldb_log_to_ceph_log) {
+  if (g_conf()->leveldb_log_to_ceph_log) {
     ceph_logger = new CephLevelDBLogger(g_ceph_context);
     ldoptions.info_log = ceph_logger;
   }
@@ -149,7 +149,7 @@ int LevelDBStore::do_open(ostream &out, bool create_if_missing)
   logger = plb.create_perf_counters();
   cct->get_perfcounters_collection()->add(logger);
 
-  if (g_conf->leveldb_compact_on_mount) {
+  if (g_conf()->leveldb_compact_on_mount) {
     derr << "Compacting leveldb store..." << dendl;
     compact();
     derr << "Finished compacting leveldb store" << dendl;
index 57c317673a03cc98d4c3b9d668834f278ea79f5b..9bffa60d36d23ffa38f69888ac49ed06f30c97f6 100644 (file)
@@ -334,7 +334,7 @@ int RocksDBStore::load_rocksdb_options(bool create_if_missing, rocksdb::Options&
     }
   }
 
-  if (g_conf->rocksdb_perf)  {
+  if (g_conf()->rocksdb_perf)  {
     dbstats = rocksdb::CreateDBStatistics();
     opt.statistics = dbstats;
   }
@@ -373,7 +373,7 @@ int RocksDBStore::load_rocksdb_options(bool create_if_missing, rocksdb::Options&
     return -e.code().value();
   }
 
-  if (g_conf->rocksdb_log_to_ceph_log) {
+  if (g_conf()->rocksdb_log_to_ceph_log) {
     opt.info_log.reset(new CephRocksdbLogger(g_ceph_context));
   }
 
@@ -384,67 +384,67 @@ int RocksDBStore::load_rocksdb_options(bool create_if_missing, rocksdb::Options&
 
   // caches
   if (!set_cache_flag) {
-    cache_size = g_conf->rocksdb_cache_size;
+    cache_size = g_conf()->rocksdb_cache_size;
   }
-  uint64_t row_cache_size = cache_size * g_conf->rocksdb_cache_row_ratio;
+  uint64_t row_cache_size = cache_size * g_conf()->rocksdb_cache_row_ratio;
   uint64_t block_cache_size = cache_size - row_cache_size;
 
-  if (g_conf->rocksdb_cache_type == "lru") {
+  if (g_conf()->rocksdb_cache_type == "lru") {
     bbt_opts.block_cache = rocksdb::NewLRUCache(
       block_cache_size,
-      g_conf->rocksdb_cache_shard_bits);
-  } else if (g_conf->rocksdb_cache_type == "clock") {
+      g_conf()->rocksdb_cache_shard_bits);
+  } else if (g_conf()->rocksdb_cache_type == "clock") {
     bbt_opts.block_cache = rocksdb::NewClockCache(
       block_cache_size,
-      g_conf->rocksdb_cache_shard_bits);
+      g_conf()->rocksdb_cache_shard_bits);
   } else {
-    derr << "unrecognized rocksdb_cache_type '" << g_conf->rocksdb_cache_type
+    derr << "unrecognized rocksdb_cache_type '" << g_conf()->rocksdb_cache_type
       << "'" << dendl;
     return -EINVAL;
   }
-  bbt_opts.block_size = g_conf->rocksdb_block_size;
+  bbt_opts.block_size = g_conf()->rocksdb_block_size;
 
   if (row_cache_size > 0)
     opt.row_cache = rocksdb::NewLRUCache(row_cache_size,
-                                    g_conf->rocksdb_cache_shard_bits);
-  uint64_t bloom_bits = g_conf->get_val<uint64_t>("rocksdb_bloom_bits_per_key");
+                                    g_conf()->rocksdb_cache_shard_bits);
+  uint64_t bloom_bits = g_conf().get_val<uint64_t>("rocksdb_bloom_bits_per_key");
   if (bloom_bits > 0) {
     dout(10) << __func__ << " set bloom filter bits per key to "
             << bloom_bits << dendl;
     bbt_opts.filter_policy.reset(rocksdb::NewBloomFilterPolicy(bloom_bits));
   }
   using std::placeholders::_1;
-  if (g_conf->with_val<std::string>("rocksdb_index_type",
+  if (g_conf().with_val<std::string>("rocksdb_index_type",
                                    std::bind(std::equal_to<std::string>(), _1,
                                              "binary_search")))
     bbt_opts.index_type = rocksdb::BlockBasedTableOptions::IndexType::kBinarySearch;
-  if (g_conf->with_val<std::string>("rocksdb_index_type",
+  if (g_conf().with_val<std::string>("rocksdb_index_type",
                                    std::bind(std::equal_to<std::string>(), _1,
                                              "hash_search")))
     bbt_opts.index_type = rocksdb::BlockBasedTableOptions::IndexType::kHashSearch;
-  if (g_conf->with_val<std::string>("rocksdb_index_type",
+  if (g_conf().with_val<std::string>("rocksdb_index_type",
                                    std::bind(std::equal_to<std::string>(), _1,
                                              "two_level")))
     bbt_opts.index_type = rocksdb::BlockBasedTableOptions::IndexType::kTwoLevelIndexSearch;
   if (!bbt_opts.no_block_cache) {
     bbt_opts.cache_index_and_filter_blocks =
-        g_conf->get_val<bool>("rocksdb_cache_index_and_filter_blocks");
+        g_conf().get_val<bool>("rocksdb_cache_index_and_filter_blocks");
     bbt_opts.cache_index_and_filter_blocks_with_high_priority =
-        g_conf->get_val<bool>("rocksdb_cache_index_and_filter_blocks_with_high_priority");
+        g_conf().get_val<bool>("rocksdb_cache_index_and_filter_blocks_with_high_priority");
     bbt_opts.pin_l0_filter_and_index_blocks_in_cache =
-      g_conf->get_val<bool>("rocksdb_pin_l0_filter_and_index_blocks_in_cache");
+      g_conf().get_val<bool>("rocksdb_pin_l0_filter_and_index_blocks_in_cache");
   }
-  bbt_opts.partition_filters = g_conf->get_val<bool>("rocksdb_partition_filters");
-  if (g_conf->get_val<uint64_t>("rocksdb_metadata_block_size") > 0)
-    bbt_opts.metadata_block_size = g_conf->get_val<uint64_t>("rocksdb_metadata_block_size");
+  bbt_opts.partition_filters = g_conf().get_val<bool>("rocksdb_partition_filters");
+  if (g_conf().get_val<uint64_t>("rocksdb_metadata_block_size") > 0)
+    bbt_opts.metadata_block_size = g_conf().get_val<uint64_t>("rocksdb_metadata_block_size");
 
   opt.table_factory.reset(rocksdb::NewBlockBasedTableFactory(bbt_opts));
-  dout(10) << __func__ << " block size " << g_conf->rocksdb_block_size
+  dout(10) << __func__ << " block size " << g_conf()->rocksdb_block_size
            << ", block_cache size " << byte_u_t(block_cache_size)
           << ", row_cache size " << byte_u_t(row_cache_size)
           << "; shards "
-          << (1 << g_conf->rocksdb_cache_shard_bits)
-          << ", type " << g_conf->rocksdb_cache_type
+          << (1 << g_conf()->rocksdb_cache_shard_bits)
+          << ", type " << g_conf()->rocksdb_cache_type
           << dendl;
 
   opt.merge_operator.reset(new MergeOperatorRouter(*this));
@@ -669,13 +669,13 @@ void RocksDBStore::split_stats(const std::string &s, char delim, std::vector<std
 
 void RocksDBStore::get_statistics(Formatter *f)
 {
-  if (!g_conf->rocksdb_perf)  {
+  if (!g_conf()->rocksdb_perf)  {
     dout(20) << __func__ << " RocksDB perf is disabled, can't probe for stats"
             << dendl;
     return;
   }
 
-  if (g_conf->rocksdb_collect_compaction_stats) {
+  if (g_conf()->rocksdb_collect_compaction_stats) {
     std::string stat_str;
     bool status = db->GetProperty("rocksdb.stats", &stat_str);
     if (status) {
@@ -689,7 +689,7 @@ void RocksDBStore::get_statistics(Formatter *f)
       f->close_section();
     }
   }
-  if (g_conf->rocksdb_collect_extended_stats) {
+  if (g_conf()->rocksdb_collect_extended_stats) {
     if (dbstats) {
       f->open_object_section("rocksdb_extended_statistics");
       string stat_str = dbstats->ToString();
@@ -705,7 +705,7 @@ void RocksDBStore::get_statistics(Formatter *f)
     logger->dump_formatted(f,0);
     f->close_section();
   }
-  if (g_conf->rocksdb_collect_memory_stats) {
+  if (g_conf()->rocksdb_collect_memory_stats) {
     f->open_object_section("rocksdb_memtable_statistics");
     std::string str;
     if (!bbt_opts.no_block_cache) {
@@ -729,7 +729,7 @@ int RocksDBStore::submit_common(rocksdb::WriteOptions& woptions, KeyValueDB::Tra
 {
   // enable rocksdb breakdown
   // considering performance overhead, default is disabled
-  if (g_conf->rocksdb_perf) {
+  if (g_conf()->rocksdb_perf) {
     rocksdb::SetPerfLevel(rocksdb::PerfLevel::kEnableTimeExceptForMutex);
     rocksdb::get_perf_context()->Reset();
   }
@@ -750,7 +750,7 @@ int RocksDBStore::submit_common(rocksdb::WriteOptions& woptions, KeyValueDB::Tra
          << " Rocksdb transaction: " << rocks_txc.seen << dendl;
   }
 
-  if (g_conf->rocksdb_perf) {
+  if (g_conf()->rocksdb_perf) {
     utime_t write_memtable_time;
     utime_t write_delay_time;
     utime_t write_wal_time;
@@ -1301,7 +1301,7 @@ int64_t RocksDBStore::commit_cache_size()
 
 int RocksDBStore::set_cache_high_pri_pool_ratio(double ratio)
 {
-  if (g_conf->rocksdb_cache_type != "lru") {
+  if (g_conf()->rocksdb_cache_type != "lru") {
     return -EOPNOTSUPP;
   }
   dout(10) << __func__ << " old ratio: " 
index a65e763da7e7e83a0f7242b6ec03a6bf0d012205..8a5b5c26460021c5549c912aedcbafa02f41802f 100644 (file)
@@ -186,11 +186,11 @@ public:
 
   int conf_read_file(const char *path_list)
   {
-    int ret = cct->_conf->parse_config_files(path_list, nullptr, 0);
+    int ret = cct->_conf.parse_config_files(path_list, nullptr, 0);
     if (ret)
       return ret;
-    cct->_conf->apply_changes(nullptr);
-    cct->_conf->complain_about_parse_errors(cct);
+    cct->_conf.apply_changes(nullptr);
+    cct->_conf.complain_about_parse_errors(cct);
     return 0;
   }
 
@@ -199,34 +199,34 @@ public:
     int ret;
     vector<const char*> args;
     argv_to_vec(argc, argv, args);
-    ret = cct->_conf->parse_argv(args);
+    ret = cct->_conf.parse_argv(args);
     if (ret)
        return ret;
-    cct->_conf->apply_changes(nullptr);
+    cct->_conf.apply_changes(nullptr);
     return 0;
   }
 
   int conf_parse_env(const char *name)
   {
-    md_config_t *conf = cct->_conf;
-    conf->parse_env(name);
-    conf->apply_changes(nullptr);
+    auto& conf = cct->_conf;
+    conf.parse_env(name);
+    conf.apply_changes(nullptr);
     return 0;
   }
 
   int conf_set(const char *option, const char *value)
   {
-    int ret = cct->_conf->set_val(option, value);
+    int ret = cct->_conf.set_val(option, value);
     if (ret)
       return ret;
-    cct->_conf->apply_changes(nullptr);
+    cct->_conf.apply_changes(nullptr);
     return 0;
   }
 
   int conf_get(const char *option, char *buf, size_t len)
   {
     char *tmp = buf;
-    return cct->_conf->get_val(option, &tmp, len);
+    return cct->_conf.get_val(option, &tmp, len);
   }
 
   Client *get_client()
@@ -336,8 +336,8 @@ extern "C" int ceph_create(struct ceph_mount_info **cmount, const char * const i
   }
 
   CephContext *cct = common_preinit(iparams, CODE_ENVIRONMENT_LIBRARY, 0);
-  cct->_conf->parse_env(); // environment variables coverride
-  cct->_conf->apply_changes(nullptr);
+  cct->_conf.parse_env(); // environment variables coverride
+  cct->_conf.apply_changes(nullptr);
   int ret = ceph_create_with_context(cmount, cct);
   cct->put();
   cct = nullptr;
index 3fdd1e5e09159e75aedd7509f9fbb3790d7fa383..676b9e6e95a4a72f8aac934860a6eebc5d7eca04 100644 (file)
@@ -43,7 +43,7 @@ class librados::RadosClient : public Dispatcher
 
 public:
   using Dispatcher::cct;
-  md_config_t *conf;
+  const ConfigProxy& conf;
 private:
   enum {
     DISCONNECTED,
index 4b1432632dfafb1158a792e7627e2d81420de509..b835f7add957be0efcbb5756667ff695daaeef94 100644 (file)
@@ -2389,8 +2389,8 @@ int librados::Rados::conf_set(const char *option, const char *value)
 int librados::Rados::conf_get(const char *option, std::string &val)
 {
   char *str = NULL;
-  md_config_t *conf = client->cct->_conf;
-  int ret = conf->get_val(option, &str, -1);
+  const auto& conf = client->cct->_conf;
+  int ret = conf.get_val(option, &str, -1);
   if (ret) {
     free(str);
     return ret;
@@ -2823,8 +2823,8 @@ static CephContext *rados_create_cct(const char * const clustername,
   CephContext *cct = common_preinit(*iparams, CODE_ENVIRONMENT_LIBRARY, 0);
   if (clustername)
     cct->_conf->cluster = clustername;
-  cct->_conf->parse_env(); // environment variables override
-  cct->_conf->apply_changes(NULL);
+  cct->_conf.parse_env(); // environment variables override
+  cct->_conf.apply_changes(nullptr);
 
   TracepointProvider::initialize<tracepoint_traits>(cct);
   return cct;
@@ -2952,20 +2952,20 @@ extern "C" int rados_conf_read_file(rados_t cluster, const char *path_list)
 {
   tracepoint(librados, rados_conf_read_file_enter, cluster, path_list);
   librados::RadosClient *client = (librados::RadosClient *)cluster;
-  md_config_t *conf = client->cct->_conf;
+  auto& conf = client->cct->_conf;
   ostringstream warnings;
-  int ret = conf->parse_config_files(path_list, &warnings, 0);
+  int ret = conf.parse_config_files(path_list, &warnings, 0);
   if (ret) {
     if (warnings.tellp() > 0)
       lderr(client->cct) << warnings.str() << dendl;
-    client->cct->_conf->complain_about_parse_errors(client->cct);
+    client->cct->_conf.complain_about_parse_errors(client->cct);
     tracepoint(librados, rados_conf_read_file_exit, ret);
     return ret;
   }
-  conf->parse_env(); // environment variables override
+  conf.parse_env(); // environment variables override
 
-  conf->apply_changes(NULL);
-  client->cct->_conf->complain_about_parse_errors(client->cct);
+  conf.apply_changes(nullptr);
+  client->cct->_conf.complain_about_parse_errors(client->cct);
   tracepoint(librados, rados_conf_read_file_exit, 0);
   return 0;
 }
@@ -2978,15 +2978,15 @@ extern "C" int rados_conf_parse_argv(rados_t cluster, int argc, const char **arg
     tracepoint(librados, rados_conf_parse_argv_arg, argv[i]);
   }
   librados::RadosClient *client = (librados::RadosClient *)cluster;
-  md_config_t *conf = client->cct->_conf;
+  auto& conf = client->cct->_conf;
   vector<const char*> args;
   argv_to_vec(argc, argv, args);
-  int ret = conf->parse_argv(args);
+  int ret = conf.parse_argv(args);
   if (ret) {
     tracepoint(librados, rados_conf_parse_argv_exit, ret);
     return ret;
   }
-  conf->apply_changes(NULL);
+  conf.apply_changes(nullptr);
   tracepoint(librados, rados_conf_parse_argv_exit, 0);
   return 0;
 }
@@ -3006,16 +3006,16 @@ extern "C" int rados_conf_parse_argv_remainder(rados_t cluster, int argc,
     tracepoint(librados, rados_conf_parse_argv_remainder_arg, argv[i]);
   }
   librados::RadosClient *client = (librados::RadosClient *)cluster;
-  md_config_t *conf = client->cct->_conf;
+  auto& conf = client->cct->_conf;
   vector<const char*> args;
   for (int i=0; i<argc; i++)
     args.push_back(argv[i]);
-  int ret = conf->parse_argv(args);
+  int ret = conf.parse_argv(args);
   if (ret) {
     tracepoint(librados, rados_conf_parse_argv_remainder_exit, ret);
     return ret;
   }
-  conf->apply_changes(NULL);
+  conf.apply_changes(NULL);
   assert(args.size() <= (unsigned int)argc);
   for (i = 0; i < (unsigned int)argc; ++i) {
     if (i < args.size())
@@ -3032,9 +3032,9 @@ extern "C" int rados_conf_parse_env(rados_t cluster, const char *env)
 {
   tracepoint(librados, rados_conf_parse_env_enter, cluster, env);
   librados::RadosClient *client = (librados::RadosClient *)cluster;
-  md_config_t *conf = client->cct->_conf;
-  conf->parse_env(env);
-  conf->apply_changes(NULL);
+  auto& conf = client->cct->_conf;
+  conf.parse_env(env);
+  conf.apply_changes(nullptr);
   tracepoint(librados, rados_conf_parse_env_exit, 0);
   return 0;
 }
@@ -3043,13 +3043,13 @@ extern "C" int rados_conf_set(rados_t cluster, const char *option, const char *v
 {
   tracepoint(librados, rados_conf_set_enter, cluster, option, value);
   librados::RadosClient *client = (librados::RadosClient *)cluster;
-  md_config_t *conf = client->cct->_conf;
-  int ret = conf->set_val(option, value);
+  auto& conf = client->cct->_conf;
+  int ret = conf.set_val(option, value);
   if (ret) {
     tracepoint(librados, rados_conf_set_exit, ret);
     return ret;
   }
-  conf->apply_changes(NULL);
+  conf.apply_changes(nullptr);
   tracepoint(librados, rados_conf_set_exit, 0);
   return 0;
 }
@@ -3075,8 +3075,8 @@ extern "C" int rados_conf_get(rados_t cluster, const char *option, char *buf, si
   tracepoint(librados, rados_conf_get_enter, cluster, option, len);
   char *tmp = buf;
   librados::RadosClient *client = (librados::RadosClient *)cluster;
-  md_config_t *conf = client->cct->_conf;
-  int retval = conf->get_val(option, &tmp, len);
+  const auto& conf = client->cct->_conf;
+  int retval = conf.get_val(option, &tmp, len);
   tracepoint(librados, rados_conf_get_exit, retval, retval ? "" : option);
   return retval;
 }
index 0892cc00d0fb963e881c048f2d9c62b609d2c427..17c283559b6a9a760da363f1602663a37cf797e4 100644 (file)
@@ -62,7 +62,7 @@ public:
     : ThreadPool(cct, "librbd::thread_pool", "tp_librbd", 1,
                  "rbd_op_threads"),
       op_work_queue(new ContextWQ("librbd::op_work_queue",
-                                  cct->_conf->get_val<int64_t>("rbd_op_thread_timeout"),
+                                  cct->_conf.get_val<int64_t>("rbd_op_thread_timeout"),
                                   this)) {
     start();
   }
@@ -138,11 +138,11 @@ public:
     get_thread_pool_instance(cct, &thread_pool, &op_work_queue);
     io_work_queue = new io::ImageRequestWQ<>(
       this, "librbd::io_work_queue",
-      cct->_conf->get_val<int64_t>("rbd_op_thread_timeout"),
+      cct->_conf.get_val<int64_t>("rbd_op_thread_timeout"),
       thread_pool);
     io_object_dispatcher = new io::ObjectDispatcher<>(this);
 
-    if (cct->_conf->get_val<bool>("rbd_auto_exclusive_lock_until_manual_request")) {
+    if (cct->_conf.get_val<bool>("rbd_auto_exclusive_lock_until_manual_request")) {
       exclusive_lock_policy = new exclusive_lock::AutomaticPolicy(this);
     } else {
       exclusive_lock_policy = new exclusive_lock::StandardPolicy(this);
@@ -799,7 +799,7 @@ public:
       if (configs[key])                                                        \
         config = local_config_t.get_val<type>("rbd_"#config);                  \
       else                                                                     \
-        config = cct->_conf->get_val<type>("rbd_"#config);                     \
+        config = cct->_conf.get_val<type>("rbd_"#config);                      \
     } while (0);
 
     ASSIGN_OPTION(non_blocking_aio, bool);
index f487ca9ddb7ffab9bb49d72654546bb0e3657213..c290e6b988d92a48179e03ba6fc0847f9298cfce 100644 (file)
@@ -216,7 +216,7 @@ private:
       ThreadPoolSingleton>("librbd::ImageUpdateWatchers::thread_pool",
                           false, m_cct);
     m_work_queue = new ContextWQ("librbd::ImageUpdateWatchers::op_work_queue",
-                                m_cct->_conf->get_val<int64_t>("rbd_op_thread_timeout"),
+                                m_cct->_conf.get_val<int64_t>("rbd_op_thread_timeout"),
                                 &thread_pool);
   }
 
index ca8c3e3ac2a4d1a25f4bc3c57418092e9f37b655..d733814224e71f183c4d45962c895e0c0bbc29dc 100644 (file)
@@ -429,7 +429,7 @@ void ImageWatcher<I>::handle_request_lock(int r) {
     schedule_request_lock(true);
   } else {
     // lock owner acked -- but resend if we don't see them release the lock
-    int retry_timeout = m_image_ctx.cct->_conf->template get_val<int64_t>(
+    int retry_timeout = m_image_ctx.cct->_conf.template get_val<int64_t>(
       "client_notify_timeout");
     ldout(m_image_ctx.cct, 15) << this << " will retry in " << retry_timeout
                                << " seconds" << dendl;
index e9f04ab453bf70f13266c30a6852ed67c40d8086..b52d47492c73cd3abbd6a26cf6935e48665bb9d7 100644 (file)
@@ -340,7 +340,7 @@ Journal<I>::Journal(I &image_ctx)
     &cct->lookup_or_create_singleton_object<ThreadPoolSingleton>(
       "librbd::journal::thread_pool", false, cct);
   m_work_queue = new ContextWQ("librbd::journal::work_queue",
-                               cct->_conf->get_val<int64_t>("rbd_op_thread_timeout"),
+                               cct->_conf.get_val<int64_t>("rbd_op_thread_timeout"),
                                thread_pool_singleton);
   ImageCtx::get_timer_instance(cct, &m_timer, &m_timer_lock);
 }
index e92c79907e9daf7fcdf21381429329d89a28972a..d4b4c94914ff32d3970e75ac42bd90d5de9b6f2c 100644 (file)
@@ -67,7 +67,7 @@ std::string generate_image_id(librados::IoCtx &ioctx) {
 
 uint64_t get_rbd_default_features(CephContext* cct)
 {
-  auto value = cct->_conf->get_val<std::string>("rbd_default_features");
+  auto value = cct->_conf.get_val<std::string>("rbd_default_features");
   return librbd::rbd_features_from_string(value, nullptr);
 }
 
index 3eed1b58cd58de070b2235db3bc7f68a93c18a7a..e537ce13ce4da604132b54801e1d50f6112e2740 100644 (file)
@@ -172,7 +172,7 @@ void ImageCopyRequest<I>::send_object_copies() {
   {
     Mutex::Locker locker(m_lock);
     for (int i = 0;
-         i < m_cct->_conf->get_val<int64_t>("rbd_concurrent_management_ops");
+         i < m_cct->_conf.get_val<int64_t>("rbd_concurrent_management_ops");
          ++i) {
       send_next_object_copy();
       if (m_ret_val < 0 && m_current_ops == 0) {
index 66f69115e32b22a347e5a7a1c98411b6f7e437be..44f3ac7d8aaf4a003ee21c67aeac206fcbe675af 100644 (file)
@@ -83,7 +83,7 @@ void CloneRequest<I>::validate_options() {
     m_use_p_features = false;
   }
 
-  std::string default_clone_format = m_cct->_conf->get_val<std::string>(
+  std::string default_clone_format = m_cct->_conf.get_val<std::string>(
     "rbd_default_clone_format");
   if (default_clone_format == "1") {
     m_clone_format = 1;
index b533d4157e3b243f55acd61377609bbdc0170981..c4e17921b722f03d071dd5b17084b23409b9e483 100644 (file)
@@ -175,29 +175,29 @@ CreateRequest<I>::CreateRequest(IoCtx &ioctx, const std::string &image_name,
 
   if (image_options.get(RBD_IMAGE_OPTION_STRIPE_UNIT, &m_stripe_unit) != 0 ||
       m_stripe_unit == 0) {
-    m_stripe_unit = m_cct->_conf->get_val<uint64_t>("rbd_default_stripe_unit");
+    m_stripe_unit = m_cct->_conf.get_val<uint64_t>("rbd_default_stripe_unit");
   }
   if (image_options.get(RBD_IMAGE_OPTION_STRIPE_COUNT, &m_stripe_count) != 0 ||
       m_stripe_count == 0) {
-    m_stripe_count = m_cct->_conf->get_val<uint64_t>("rbd_default_stripe_count");
+    m_stripe_count = m_cct->_conf.get_val<uint64_t>("rbd_default_stripe_count");
   }
   if (get_image_option(image_options, RBD_IMAGE_OPTION_ORDER, &m_order) != 0 ||
       m_order == 0) {
-    m_order = m_cct->_conf->get_val<int64_t>("rbd_default_order");
+    m_order = m_cct->_conf.get_val<int64_t>("rbd_default_order");
   }
   if (get_image_option(image_options, RBD_IMAGE_OPTION_JOURNAL_ORDER,
       &m_journal_order) != 0) {
-    m_journal_order = m_cct->_conf->get_val<uint64_t>("rbd_journal_order");
+    m_journal_order = m_cct->_conf.get_val<uint64_t>("rbd_journal_order");
   }
   if (get_image_option(image_options, RBD_IMAGE_OPTION_JOURNAL_SPLAY_WIDTH,
                        &m_journal_splay_width) != 0) {
-    m_journal_splay_width = m_cct->_conf->get_val<uint64_t>("rbd_journal_splay_width");
+    m_journal_splay_width = m_cct->_conf.get_val<uint64_t>("rbd_journal_splay_width");
   }
   if (image_options.get(RBD_IMAGE_OPTION_JOURNAL_POOL, &m_journal_pool) != 0) {
-    m_journal_pool = m_cct->_conf->get_val<std::string>("rbd_journal_pool");
+    m_journal_pool = m_cct->_conf.get_val<std::string>("rbd_journal_pool");
   }
   if (image_options.get(RBD_IMAGE_OPTION_DATA_POOL, &m_data_pool) != 0) {
-    m_data_pool = m_cct->_conf->get_val<std::string>("rbd_default_data_pool");
+    m_data_pool = m_cct->_conf.get_val<std::string>("rbd_default_data_pool");
   }
 
   m_layout.object_size = 1ull << m_order;
@@ -279,7 +279,7 @@ void CreateRequest<I>::send() {
 
 template<typename I>
 void CreateRequest<I>::validate_pool() {
-  if (!m_cct->_conf->get_val<bool>("rbd_validate_pool")) {
+  if (!m_cct->_conf.get_val<bool>("rbd_validate_pool")) {
     add_image_to_directory();
     return;
   }
index 231919645c21dcc8c6e00ee0264929eace2cb140..f7ca1e2478db176f40f09ad53a74a4c4567a3c55 100644 (file)
@@ -81,7 +81,7 @@ namespace librbd {
 namespace {
 
 int validate_pool(IoCtx &io_ctx, CephContext *cct) {
-  if (!cct->_conf->get_val<bool>("rbd_validate_pool")) {
+  if (!cct->_conf.get_val<bool>("rbd_validate_pool")) {
     return 0;
   }
 
@@ -868,7 +868,7 @@ bool compare_by_name(const child_info_t& c1, const child_info_t& c2)
 
     uint64_t format;
     if (opts.get(RBD_IMAGE_OPTION_FORMAT, &format) != 0)
-      format = cct->_conf->get_val<int64_t>("rbd_default_format");
+      format = cct->_conf.get_val<int64_t>("rbd_default_format");
     bool old_format = format == 1;
 
     // make sure it doesn't already exist, in either format
@@ -885,7 +885,7 @@ bool compare_by_name(const child_info_t& c1, const child_info_t& c2)
 
     uint64_t order = 0;
     if (opts.get(RBD_IMAGE_OPTION_ORDER, &order) != 0 || order == 0) {
-      order = cct->_conf->get_val<int64_t>("rbd_default_order");
+      order = cct->_conf.get_val<int64_t>("rbd_default_order");
     }
     r = image::CreateRequest<>::validate_order(cct, order);
     if (r < 0) {
index d46a46f713e8c40cd299305838149a49c99cfb96..68ef4303d5161589c9e0f6321928b785b5ff4554 100644 (file)
@@ -1828,7 +1828,7 @@ namespace librbd {
       return -EINVAL;
     }
 
-    bool discard_zero = ictx->cct->_conf->get_val<bool>("rbd_discard_on_zeroed_write_same");
+    bool discard_zero = ictx->cct->_conf.get_val<bool>("rbd_discard_on_zeroed_write_same");
     if (discard_zero && mem_is_zero(bl.c_str(), bl.length())) {
       int r = ictx->io_work_queue->discard(ofs, len, false);
       tracepoint(librbd, writesame_exit, r);
@@ -1960,7 +1960,7 @@ namespace librbd {
       return -EINVAL;
     }
 
-    bool discard_zero = ictx->cct->_conf->get_val<bool>("rbd_discard_on_zeroed_write_same");
+    bool discard_zero = ictx->cct->_conf.get_val<bool>("rbd_discard_on_zeroed_write_same");
     if (discard_zero && mem_is_zero(bl.c_str(), bl.length())) {
       ictx->io_work_queue->aio_discard(get_aio_completion(c), off, len, false);
       tracepoint(librbd, aio_writesame_exit, 0);
@@ -4035,7 +4035,7 @@ extern "C" ssize_t rbd_writesame(rbd_image_t image, uint64_t ofs, size_t len,
     return -EINVAL;
   }
 
-  bool discard_zero = ictx->cct->_conf->get_val<bool>("rbd_discard_on_zeroed_write_same");
+  bool discard_zero = ictx->cct->_conf.get_val<bool>("rbd_discard_on_zeroed_write_same");
   if (discard_zero && mem_is_zero(buf, data_len)) {
     int r = ictx->io_work_queue->discard(ofs, len, false);
     tracepoint(librbd, writesame_exit, r);
@@ -4257,7 +4257,7 @@ extern "C" int rbd_aio_writesame(rbd_image_t image, uint64_t off, size_t len,
     return -EINVAL;
   }
 
-  bool discard_zero = ictx->cct->_conf->get_val<bool>("rbd_discard_on_zeroed_write_same");
+  bool discard_zero = ictx->cct->_conf.get_val<bool>("rbd_discard_on_zeroed_write_same");
   if (discard_zero && mem_is_zero(buf, data_len)) {
     ictx->io_work_queue->aio_discard(get_aio_completion(comp), off, len, false);
     tracepoint(librbd, aio_writesame_exit, 0);
index 625bd8b1174cc984e02c1fc99e32ebc54cb9dde1..ee17ebacad9994c28bd86b7ea16c2152c411e261 100644 (file)
@@ -39,7 +39,7 @@ static void log_on_exit(void *p)
   delete (Log **)p;// Delete allocated pointer (not Log object, the pointer only!)
 }
 
-Log::Log(SubsystemMap *s)
+Log::Log(const SubsystemMap *s)
   : m_indirect_this(NULL),
     m_subs(s),
     m_queue_mutex_holder(0),
index db137b12d27ef973794ba04285d073fe47ae5d95..e79b7815bb180c7a6aa3bb5951380bbddbe71559 100644 (file)
@@ -22,7 +22,7 @@ class Log : private Thread
   Log **m_indirect_this;
   log_clock clock;
 
-  SubsystemMap *m_subs;
+  const SubsystemMap *m_subs;
 
   pthread_mutex_t m_queue_mutex;
   pthread_mutex_t m_flush_mutex;
@@ -69,7 +69,7 @@ class Log : private Thread
   void _log_message(const char *s, bool crash);
 
 public:
-  Log(SubsystemMap *s);
+  Log(const SubsystemMap *s);
   ~Log() override;
 
   void set_flush_on_exit();
index 934ee66036edca7d5146018f040dcaf714545d2b..042211bd2837aec543e7d9ead2925424b8d46bc1 100644 (file)
@@ -69,7 +69,7 @@ public:
   }
 
   template <unsigned SubV, int LvlV>
-  bool should_gather() {
+  bool should_gather() const {
     static_assert(SubV < get_num(), "wrong subsystem ID");
     static_assert(LvlV >= -1 && LvlV <= 200);
 
@@ -85,7 +85,7 @@ public:
                    LvlV <= ceph_subsys_get_max_default_level(SubV));
     }
   }
-  bool should_gather(const unsigned sub, int level) {
+  bool should_gather(const unsigned sub, int level) const {
     assert(sub < m_subsys.size());
     return level <= static_cast<int>(m_gather_levels[sub]);
   }
index 9d83c043d33bc6b2b100ee712e2117b549b127fd..8fa6bc6e2d6f0e7cc3be32c8de8fe1620d1fb77d 100644 (file)
@@ -58,10 +58,10 @@ void Beacon::init(MDSMap const *mdsmap)
   assert(mdsmap != NULL);
 
   _notify_mdsmap(mdsmap);
-  standby_for_rank = mds_rank_t(g_conf->mds_standby_for_rank);
-  standby_for_name = g_conf->mds_standby_for_name;
-  standby_for_fscid = fs_cluster_id_t(g_conf->mds_standby_for_fscid);
-  standby_replay = g_conf->mds_standby_replay;
+  standby_for_rank = mds_rank_t(g_conf()->mds_standby_for_rank);
+  standby_for_name = g_conf()->mds_standby_for_name;
+  standby_for_fscid = fs_cluster_id_t(g_conf()->mds_standby_for_fscid);
+  standby_replay = g_conf()->mds_standby_replay;
 
   // Spawn threads and start messaging
   timer.init();
@@ -115,7 +115,7 @@ void Beacon::handle_mds_beacon(MMDSBeacon *m)
       dout(10) << "handle_mds_beacon " << ceph_mds_state_name(m->get_state())
               << " seq " << m->get_seq() << " rtt " << rtt << dendl;
 
-      if (was_laggy && rtt < g_conf->mds_beacon_grace) {
+      if (was_laggy && rtt < g_conf()->mds_beacon_grace) {
        dout(0) << "handle_mds_beacon no longer laggy" << dendl;
        was_laggy = false;
        laggy_until = now;
@@ -125,7 +125,7 @@ void Beacon::handle_mds_beacon(MMDSBeacon *m)
       // later beacons will clear it.
       dout(1) << "handle_mds_beacon system clock goes backwards, "
              << "mark myself laggy" << dendl;
-      last_acked_stamp = now - utime_t(g_conf->mds_beacon_grace + 1, 0);
+      last_acked_stamp = now - utime_t(g_conf()->mds_beacon_grace + 1, 0);
       was_laggy = true;
     }
 
@@ -181,7 +181,7 @@ void Beacon::_send()
     timer.cancel_event(sender);
   }
   sender = timer.add_event_after(
-    g_conf->mds_beacon_interval,
+    g_conf()->mds_beacon_interval,
     new FunctionContext([this](int) {
        assert(lock.is_locked_by_me());
        sender = nullptr;
@@ -261,12 +261,12 @@ bool Beacon::is_laggy()
 
   utime_t now = ceph_clock_now();
   utime_t since = now - last_acked_stamp;
-  if (since > g_conf->mds_beacon_grace) {
-    dout(5) << "is_laggy " << since << " > " << g_conf->mds_beacon_grace
+  if (since > g_conf()->mds_beacon_grace) {
+    dout(5) << "is_laggy " << since << " > " << g_conf()->mds_beacon_grace
            << " since last acked beacon" << dendl;
     was_laggy = true;
-    if (since > (g_conf->mds_beacon_grace*2) &&
-       now > last_mon_reconnect + g_conf->mds_beacon_interval) {
+    if (since > (g_conf()->mds_beacon_grace*2) &&
+       now > last_mon_reconnect + g_conf()->mds_beacon_interval) {
       // maybe it's not us?
       dout(5) << "initiating monitor reconnect; maybe we're not the slow one"
               << dendl;
@@ -333,14 +333,14 @@ void Beacon::notify_health(MDSRank const *mds)
   // Detect MDS_HEALTH_TRIM condition
   // Arbitrary factor of 2, indicates MDS is not trimming promptly
   {
-    if (mds->mdlog->get_num_segments() > (size_t)(g_conf->mds_log_max_segments * 2)) {
+    if (mds->mdlog->get_num_segments() > (size_t)(g_conf()->mds_log_max_segments * 2)) {
       std::ostringstream oss;
       oss << "Behind on trimming (" << mds->mdlog->get_num_segments()
-        << "/" << g_conf->mds_log_max_segments << ")";
+        << "/" << g_conf()->mds_log_max_segments << ")";
 
       MDSHealthMetric m(MDS_HEALTH_TRIM, HEALTH_WARN, oss.str());
       m.metadata["num_segments"] = stringify(mds->mdlog->get_num_segments());
-      m.metadata["max_segments"] = stringify(g_conf->mds_log_max_segments);
+      m.metadata["max_segments"] = stringify(g_conf()->mds_log_max_segments);
       health.metrics.push_back(m);
     }
   }
@@ -372,7 +372,7 @@ void Beacon::notify_health(MDSRank const *mds)
       late_cap_metrics.push_back(m);
     }
 
-    if (late_cap_metrics.size() <= (size_t)g_conf->mds_health_summarize_threshold) {
+    if (late_cap_metrics.size() <= (size_t)g_conf()->mds_health_summarize_threshold) {
       health.metrics.splice(health.metrics.end(), late_cap_metrics);
     } else {
       std::ostringstream oss;
@@ -394,7 +394,7 @@ void Beacon::notify_health(MDSRank const *mds)
     mds->sessionmap.get_client_session_set(sessions);
 
     utime_t cutoff = ceph_clock_now();
-    cutoff -= g_conf->mds_recall_state_timeout;
+    cutoff -= g_conf()->mds_recall_state_timeout;
     utime_t last_recall = mds->mdcache->last_recall_state;
 
     std::list<MDSHealthMetric> late_recall_metrics;
@@ -420,9 +420,9 @@ void Beacon::notify_health(MDSRank const *mds)
         }
       }
       if ((session->get_num_trim_requests_warnings() > 0 &&
-          session->get_num_completed_requests() >= g_conf->mds_max_completed_requests) ||
+          session->get_num_completed_requests() >= g_conf()->mds_max_completed_requests) ||
          (session->get_num_trim_flushes_warnings() > 0 &&
-          session->get_num_completed_flushes() >= g_conf->mds_max_completed_flushes)) {
+          session->get_num_completed_flushes() >= g_conf()->mds_max_completed_flushes)) {
        std::ostringstream oss;
        oss << "Client " << session->get_human_name() << " failing to advance its oldest client/flush tid";
        MDSHealthMetric m(MDS_HEALTH_CLIENT_OLDEST_TID, HEALTH_WARN, oss.str());
@@ -431,7 +431,7 @@ void Beacon::notify_health(MDSRank const *mds)
       }
     }
 
-    if (late_recall_metrics.size() <= (size_t)g_conf->mds_health_summarize_threshold) {
+    if (late_recall_metrics.size() <= (size_t)g_conf()->mds_health_summarize_threshold) {
       health.metrics.splice(health.metrics.end(), late_recall_metrics);
     } else {
       std::ostringstream oss;
@@ -443,7 +443,7 @@ void Beacon::notify_health(MDSRank const *mds)
       late_recall_metrics.clear();
     }
 
-    if (large_completed_requests_metrics.size() <= (size_t)g_conf->mds_health_summarize_threshold) {
+    if (large_completed_requests_metrics.size() <= (size_t)g_conf()->mds_health_summarize_threshold) {
       health.metrics.splice(health.metrics.end(), large_completed_requests_metrics);
     } else {
       std::ostringstream oss;
@@ -462,7 +462,7 @@ void Beacon::notify_health(MDSRank const *mds)
     dout(20) << slow << " slow request found" << dendl;
     if (slow) {
       std::ostringstream oss;
-      oss << slow << " slow requests are blocked > " << g_conf->mds_op_complaint_time << " sec";
+      oss << slow << " slow requests are blocked > " << g_conf()->mds_op_complaint_time << " sec";
 
       MDSHealthMetric m(MDS_HEALTH_SLOW_REQUEST, HEALTH_WARN, oss.str());
       health.metrics.push_back(m);
index b1ea14251c3910ed5c1f2e4d31389eeb2f29892f..60183c766b181b277acd37be45857e83cb7cba2e 100644 (file)
@@ -136,7 +136,7 @@ ostream& operator<<(ostream& out, const CDir& dir)
   out << " " << dir.fnode.fragstat;
   if (!(dir.fnode.fragstat == dir.fnode.accounted_fragstat))
     out << "/" << dir.fnode.accounted_fragstat;
-  if (g_conf->mds_debug_scatterstat && dir.is_projected()) {
+  if (g_conf()->mds_debug_scatterstat && dir.is_projected()) {
     const fnode_t *pf = dir.get_projected_fnode();
     out << "->" << pf->fragstat;
     if (!(pf->fragstat == pf->accounted_fragstat))
@@ -147,7 +147,7 @@ ostream& operator<<(ostream& out, const CDir& dir)
   out << " " << dir.fnode.rstat;
   if (!(dir.fnode.rstat == dir.fnode.accounted_rstat))
     out << "/" << dir.fnode.accounted_rstat;
-  if (g_conf->mds_debug_scatterstat && dir.is_projected()) {
+  if (g_conf()->mds_debug_scatterstat && dir.is_projected()) {
     const fnode_t *pf = dir.get_projected_fnode();
     out << "->" << pf->rstat;
     if (!(pf->rstat == pf->accounted_rstat))
@@ -221,7 +221,7 @@ CDir::CDir(CInode *in, frag_t fg, MDCache *mdcache, bool auth) :
  */
 bool CDir::check_rstats(bool scrub)
 {
-  if (!g_conf->mds_debug_scatterstat && !scrub)
+  if (!g_conf()->mds_debug_scatterstat && !scrub)
     return true;
 
   dout(25) << "check_rstats on " << this << dendl;
@@ -1640,7 +1640,7 @@ void CDir::_omap_fetch(MDSInternalContextBase *c, const std::set<dentry_key_t>&
   rd.omap_get_header(&fin->hdrbl, &fin->ret1);
   if (keys.empty()) {
     assert(!c);
-    rd.omap_get_vals("", "", g_conf->mds_dir_keys_per_op,
+    rd.omap_get_vals("", "", g_conf()->mds_dir_keys_per_op,
                     &fin->omap, &fin->more, &fin->ret2);
   } else {
     assert(c);
@@ -1653,7 +1653,7 @@ void CDir::_omap_fetch(MDSInternalContextBase *c, const std::set<dentry_key_t>&
     rd.omap_get_vals_by_keys(str_keys, &fin->omap, &fin->ret2);
   }
   // check the correctness of backtrace
-  if (g_conf->mds_verify_backtrace > 0 && frag == frag_t()) {
+  if (g_conf()->mds_verify_backtrace > 0 && frag == frag_t()) {
     rd.getxattr("parent", &fin->btbl, &fin->ret3);
     rd.set_last_op_flags(CEPH_OSD_OP_FLAG_FAILOK);
   } else {
@@ -1678,7 +1678,7 @@ void CDir::_omap_fetch_more(
   ObjectOperation rd;
   rd.omap_get_vals(fin->omap.rbegin()->first,
                   "", /* filter prefix */
-                  g_conf->mds_dir_keys_per_op,
+                  g_conf()->mds_dir_keys_per_op,
                   &fin->omap_more,
                   &fin->more,
                   &fin->ret);
@@ -1858,7 +1858,7 @@ CDentry *CDir::_load_dentry(
         //in->hack_accessed = false;
         //in->hack_load_stamp = ceph_clock_now();
         //num_new_inodes_loaded++;
-      } else if (g_conf->get_val<bool>("mds_hack_allow_loading_invalid_metadata")) {
+      } else if (g_conf().get_val<bool>("mds_hack_allow_loading_invalid_metadata")) {
        dout(20) << "hack: adding duplicate dentry for " << *in << dendl;
        dn = add_primary_dentry(dname, in, first, last);
       } else {
@@ -3399,7 +3399,7 @@ std::string CDir::get_path() const
 bool CDir::should_split_fast() const
 {
   // Max size a fragment can be before trigger fast splitting
-  int fast_limit = g_conf->mds_bal_split_size * g_conf->mds_bal_fragment_fast_factor;
+  int fast_limit = g_conf()->mds_bal_split_size * g_conf()->mds_bal_fragment_fast_factor;
 
   // Fast path: the sum of accounted size and null dentries does not
   // exceed threshold: we definitely are not over it.
index cccc5f15603fa5fc86ec2007b7f35e60aec953a4..fceedfa727bcc3ba1db50bd61f33bf983d5f8866 100644 (file)
@@ -505,11 +505,11 @@ public:
   void merge(std::list<CDir*>& subs, std::list<MDSInternalContextBase*>& waiters, bool replay);
 
   bool should_split() const {
-    return (int)get_frag_size() > g_conf->mds_bal_split_size;
+    return (int)get_frag_size() > g_conf()->mds_bal_split_size;
   }
   bool should_split_fast() const;
   bool should_merge() const {
-    return (int)get_frag_size() < g_conf->mds_bal_merge_size;
+    return (int)get_frag_size() < g_conf()->mds_bal_merge_size;
   }
 
 private:
index 19897a8979fe85470f3e7f7011e39f60ae0775b7..17a3ce15626e2e996a704972a4639607f1c49aa8 100644 (file)
@@ -154,7 +154,7 @@ ostream& operator<<(ostream& out, const CInode& in)
 
   if (in.inode.is_dir()) {
     out << " " << in.inode.dirstat;
-    if (g_conf->mds_debug_scatterstat && in.is_projected()) {
+    if (g_conf()->mds_debug_scatterstat && in.is_projected()) {
       const CInode::mempool_inode *pi = in.get_projected_inode();
       out << "->" << pi->dirstat;
     }
@@ -168,7 +168,7 @@ ostream& operator<<(ostream& out, const CInode& in)
   out << " " << in.inode.rstat;
   if (!(in.inode.rstat == in.inode.accounted_rstat))
     out << "/" << in.inode.accounted_rstat;
-  if (g_conf->mds_debug_scatterstat && in.is_projected()) {
+  if (g_conf()->mds_debug_scatterstat && in.is_projected()) {
     const CInode::mempool_inode *pi = in.get_projected_inode();
     out << "->" << pi->rstat;
     if (!(pi->rstat == pi->accounted_rstat))
@@ -1423,7 +1423,7 @@ void CInode::verify_diri_backtrace(bufferlist &bl, int err)
   if (err) {
     MDSRank *mds = mdcache->mds;
     mds->clog->error() << "bad backtrace on directory inode " << ino();
-    assert(!"bad backtrace" == (g_conf->mds_verify_backtrace > 1));
+    assert(!"bad backtrace" == (g_conf()->mds_verify_backtrace > 1));
 
     mark_dirty_parent(mds->mdlog->get_current_segment(), false);
     mds->mdlog->flush();
@@ -1768,7 +1768,7 @@ void CInode::decode_lock_state(int type, bufferlist& bl)
            p.second->state_clear(CDir::STATE_DIRTYDFT);
        }
       }
-      if (g_conf->mds_debug_frag)
+      if (g_conf()->mds_debug_frag)
        verify_dirfrags();
     }
     break;
@@ -2195,7 +2195,7 @@ void CInode::finish_scatter_gather_update(int type)
            pf->fragstat.nsubdirs < 0) {
          clog->error() << "bad/negative dir size on "
              << dir->dirfrag() << " " << pf->fragstat;
-         assert(!"bad/negative fragstat" == g_conf->mds_verify_scatter);
+         assert(!"bad/negative fragstat" == g_conf()->mds_verify_scatter);
          
          if (pf->fragstat.nfiles < 0)
            pf->fragstat.nfiles = 0;
@@ -2232,7 +2232,7 @@ void CInode::finish_scatter_gather_update(int type)
          } else {
            clog->error() << "unmatched fragstat on " << ino() << ", inode has "
                          << pi->dirstat << ", dirfrags have " << dirstat;
-           assert(!"unmatched fragstat" == g_conf->mds_verify_scatter);
+           assert(!"unmatched fragstat" == g_conf()->mds_verify_scatter);
          }
          // trust the dirfrags for now
          version_t v = pi->dirstat.version;
@@ -2251,7 +2251,7 @@ void CInode::finish_scatter_gather_update(int type)
         make_path_string(path);
        clog->error() << "Inconsistent statistics detected: fragstat on inode "
                       << ino() << " (" << path << "), inode has " << pi->dirstat;
-       assert(!"bad/negative fragstat" == g_conf->mds_verify_scatter);
+       assert(!"bad/negative fragstat" == g_conf()->mds_verify_scatter);
 
        if (pi->dirstat.nfiles < 0)
          pi->dirstat.nfiles = 0;
@@ -2343,7 +2343,7 @@ void CInode::finish_scatter_gather_update(int type)
            clog->error() << "inconsistent rstat on inode " << ino()
                           << ", inode has " << pi->rstat
                           << ", directory fragments have " << rstat;
-           assert(!"unmatched rstat" == g_conf->mds_verify_scatter);
+           assert(!"unmatched rstat" == g_conf()->mds_verify_scatter);
          }
          // trust the dirfrag for now
          version_t v = pi->rstat.version;
@@ -2616,7 +2616,7 @@ void CInode::adjust_nested_auth_pins(int a, void *by)
           << auth_pins << "+" << nested_auth_pins << dendl;
   assert(nested_auth_pins >= 0);
 
-  if (g_conf->mds_debug_auth_pins) {
+  if (g_conf()->mds_debug_auth_pins) {
     // audit
     int s = 0;
     for (const auto &p : dirfrags) {
@@ -2680,7 +2680,7 @@ CInode::mempool_old_inode& CInode::cow_old_inode(snapid_t follows, bool cow_head
 
   old.inode.trim_client_ranges(follows);
 
-  if (g_conf->mds_snap_rstat &&
+  if (g_conf()->mds_snap_rstat &&
       !(old.inode.rstat == old.inode.accounted_rstat))
     dirty_old_rstats.insert(follows);
   
@@ -4763,7 +4763,7 @@ int64_t CInode::get_backtrace_pool() const
 
 void CInode::maybe_export_pin(bool update)
 {
-  if (!g_conf->mds_bal_export_pin)
+  if (!g_conf()->mds_bal_export_pin)
     return;
   if (!is_dir() || !is_normal())
     return;
index b094fcc1167ca03b559c0223bd1b4d86fab2e043..6ca3267e3ae6481181765fff1847e22e0a1493b8 100644 (file)
@@ -1083,7 +1083,7 @@ public:
 public:
   void set_primary_parent(CDentry *p) {
     assert(parent == 0 ||
-          g_conf->get_val<bool>("mds_hack_allow_loading_invalid_metadata"));
+          g_conf().get_val<bool>("mds_hack_allow_loading_invalid_metadata"));
     parent = p;
   }
   void remove_primary_parent(CDentry *dn) {
index de6a5ee4b34f0938f0e5ea73fce0e487ff20087a..c726af3fb3db5b3a72946ae8d18eceaa6cf86f10 100644 (file)
@@ -207,7 +207,7 @@ bool DamageTable::notify_remote_damaged(inodeno_t ino, std::string_view path)
 
 bool DamageTable::oversized() const
 {
-  return by_id.size() > (size_t)(g_conf->mds_damage_table_max_entries);
+  return by_id.size() > (size_t)(g_conf()->mds_damage_table_max_entries);
 }
 
 bool DamageTable::is_dentry_damaged(
index 3527328785f5a1f5413c35cdcdc5047d027049f1..43ac91e3d1ba7430c33a6ce96d27662816f849e8 100644 (file)
@@ -340,7 +340,7 @@ void FSMap::get_health_checks(health_check_map_t *checks) const
 
     for (const auto &rank : fs->mds_map.failed) {
       const mds_gid_t replacement = find_replacement_for(
-          {fs->fscid, rank}, {}, g_conf->mon_force_standby_active);
+          {fs->fscid, rank}, {}, g_conf()->mon_force_standby_active);
       if (replacement == MDS_GID_NONE) {
         stuck_failed.insert(rank);
       }
index 5965619e421dbeb2a5b82f4ec2111320bb98188e..905df5378347bbeaec42fe5e350f017c212db9bf 100644 (file)
@@ -2302,7 +2302,7 @@ public:
 uint64_t Locker::calc_new_max_size(CInode::mempool_inode *pi, uint64_t size)
 {
   uint64_t new_max = (size + 1) << 1;
-  uint64_t max_inc = g_conf->mds_client_writeable_range_max_inc_objs;
+  uint64_t max_inc = g_conf()->mds_client_writeable_range_max_inc_objs;
   if (max_inc > 0) {
     max_inc *= pi->layout.object_size;
     new_max = std::min(new_max, size + max_inc);
@@ -2712,11 +2712,11 @@ void Locker::handle_client_caps(MClientCaps *m)
       mds->mdlog->get_current_segment()->touched_sessions.insert(session->info.inst.name);
 
       if (session->get_num_trim_flushes_warnings() > 0 &&
-         session->get_num_completed_flushes() * 2 < g_conf->mds_max_completed_flushes)
+         session->get_num_completed_flushes() * 2 < g_conf()->mds_max_completed_flushes)
        session->reset_num_trim_flushes_warnings();
     } else {
       if (session->get_num_completed_flushes() >=
-         (g_conf->mds_max_completed_flushes << session->get_num_trim_flushes_warnings())) {
+         (g_conf()->mds_max_completed_flushes << session->get_num_trim_flushes_warnings())) {
        session->inc_num_trim_flushes_warnings();
        stringstream ss;
        ss << "client." << session->get_client() << " does not advance its oldest_flush_tid ("
@@ -3625,7 +3625,7 @@ void Locker::caps_tick()
     // snap inodes that needs flush are auth pinned, they affect
     // subtree/difrarg freeze.
     utime_t cutoff = now;
-    cutoff -= g_conf->mds_freeze_tree_timeout / 3;
+    cutoff -= g_conf()->mds_freeze_tree_timeout / 3;
 
     CInode *last = need_snapflush_inodes.back();
     while (!need_snapflush_inodes.empty()) {
@@ -4697,7 +4697,7 @@ void Locker::scatter_tick()
               << *lock << " " << *lock->get_parent() << dendl;
       continue;
     }
-    if (now - lock->get_update_stamp() < g_conf->mds_scatter_nudge_interval)
+    if (now - lock->get_update_stamp() < g_conf()->mds_scatter_nudge_interval)
       break;
     updated_scatterlocks.pop_front();
     scatter_nudge(lock, 0);
index 5d236a0c229dc039df95576b71dddc4bd33dbc08..ebcda8f3ada4b1cc4be90d45f48146b6b2f0d209 100644 (file)
@@ -148,18 +148,18 @@ void MDBalancer::handle_export_pins(void)
 
 void MDBalancer::tick()
 {
-  static int num_bal_times = g_conf->mds_bal_max;
-  auto bal_interval = mds->cct->_conf->get_val<int64_t>("mds_bal_interval");
-  auto bal_max_until = mds->cct->_conf->get_val<int64_t>("mds_bal_max_until");
+  static int num_bal_times = g_conf()->mds_bal_max;
+  auto bal_interval = mds->cct->_conf.get_val<int64_t>("mds_bal_interval");
+  auto bal_max_until = mds->cct->_conf.get_val<int64_t>("mds_bal_max_until");
   time now = clock::now();
 
-  if (g_conf->mds_bal_export_pin) {
+  if (g_conf()->mds_bal_export_pin) {
     handle_export_pins();
   }
 
   // sample?
   if (chrono::duration<double>(now-last_sample).count() >
-    g_conf->mds_bal_sample_interval) {
+    g_conf()->mds_bal_sample_interval) {
     dout(15) << "tick last_sample now " << now << dendl;
     last_sample = now;
   }
@@ -192,7 +192,7 @@ public:
 
 double mds_load_t::mds_load() const
 {
-  switch(g_conf->mds_bal_mode) {
+  switch(g_conf()->mds_bal_mode) {
   case 0:
     return
       .8 * auth.meta_load() +
@@ -283,7 +283,7 @@ int MDBalancer::localize_balancer()
 
   /* timeout: if we waste half our time waiting for RADOS, then abort! */
   lock.Lock();
-  int ret_t = cond.WaitInterval(lock, utime_t(mds->cct->_conf->get_val<int64_t>("mds_bal_interval")/2, 0));
+  int ret_t = cond.WaitInterval(lock, utime_t(mds->cct->_conf.get_val<int64_t>("mds_bal_interval")/2, 0));
   lock.Unlock();
 
   /* success: store the balancer in memory and set the version. */
@@ -489,7 +489,7 @@ void MDBalancer::queue_split(const CDir *dir, bool fast)
     // Pass on to MDCache: note that the split might still not
     // happen if the checks in MDCache::can_fragment fail.
     dout(10) << __func__ << " splitting " << *split_dir << dendl;
-    mds->mdcache->split_dir(split_dir, g_conf->mds_bal_split_bits);
+    mds->mdcache->split_dir(split_dir, g_conf()->mds_bal_split_bits);
   };
 
   bool is_new = false;
@@ -507,7 +507,7 @@ void MDBalancer::queue_split(const CDir *dir, bool fast)
     // Set a timer to really do the split: we don't do it immediately
     // so that bursts of ops on a directory have a chance to go through
     // before we freeze it.
-    mds->timer.add_event_after(g_conf->mds_bal_fragment_interval,
+    mds->timer.add_event_after(g_conf()->mds_bal_fragment_interval,
                                new FunctionContext(callback));
   }
 }
@@ -571,7 +571,7 @@ void MDBalancer::queue_merge(CDir *dir)
   if (merge_pending.count(frag) == 0) {
     dout(20) << __func__ << " enqueued dir " << *dir << dendl;
     merge_pending.insert(frag);
-    mds->timer.add_event_after(g_conf->mds_bal_fragment_interval,
+    mds->timer.add_event_after(g_conf()->mds_bal_fragment_interval,
         new FunctionContext(callback));
   } else {
     dout(20) << __func__ << " dir already in queue " << *dir << dendl;
@@ -582,7 +582,7 @@ void MDBalancer::prep_rebalance(int beat)
 {
   balance_state_t state;
 
-  if (g_conf->mds_thrash_exports) {
+  if (g_conf()->mds_thrash_exports) {
     //we're going to randomly export to all the mds in the cluster
     set<mds_rank_t> up_mds;
     mds->get_mds_map()->get_up_mds_set(up_mds);
@@ -642,7 +642,7 @@ void MDBalancer::prep_rebalance(int beat)
 
     // under or over?
     for (auto p : load_map) {
-      if (p.first < target_load * (1.0 + g_conf->mds_bal_min_rebalance)) {
+      if (p.first < target_load * (1.0 + g_conf()->mds_bal_min_rebalance)) {
        dout(5) << " mds." << p.second << " is underloaded or barely overloaded." << dendl;
        mds_last_epoch_under_map[p.second] = beat_epoch;
       }
@@ -797,7 +797,7 @@ int MDBalancer::mantle_prep_rebalance()
 
 void MDBalancer::try_rebalance(balance_state_t& state)
 {
-  if (g_conf->mds_thrash_exports) {
+  if (g_conf()->mds_thrash_exports) {
     dout(5) << "mds_thrash is on; not performing standard rebalance operation!"
            << dendl;
     return;
@@ -820,8 +820,8 @@ void MDBalancer::try_rebalance(balance_state_t& state)
 
     mds_rank_t from = diri->authority().first;
     double pop = dir->pop_auth_subtree.meta_load();
-    if (g_conf->mds_bal_idle_threshold > 0 &&
-       pop < g_conf->mds_bal_idle_threshold &&
+    if (g_conf()->mds_bal_idle_threshold > 0 &&
+       pop < g_conf()->mds_bal_idle_threshold &&
        diri != mds->mdcache->get_root() &&
        from != mds->get_nodeid()) {
       dout(5) << " exporting idle (" << pop << ") import " << *dir
@@ -981,13 +981,13 @@ void MDBalancer::find_exports(CDir *dir,
   assert(dir->is_auth());
 
   double need = amount - have;
-  if (need < amount * g_conf->mds_bal_min_start)
+  if (need < amount * g_conf()->mds_bal_min_start)
     return;   // good enough!
 
-  double needmax = need * g_conf->mds_bal_need_max;
-  double needmin = need * g_conf->mds_bal_need_min;
-  double midchunk = need * g_conf->mds_bal_midchunk;
-  double minchunk = need * g_conf->mds_bal_minchunk;
+  double needmax = need * g_conf()->mds_bal_need_max;
+  double needmin = need * g_conf()->mds_bal_need_min;
+  double midchunk = need * g_conf()->mds_bal_midchunk;
+  double minchunk = need * g_conf()->mds_bal_minchunk;
 
   list<CDir*> bigger_rep, bigger_unrep;
   multimap<double, CDir*> smaller;
@@ -1116,13 +1116,13 @@ void MDBalancer::hit_inode(CInode *in, int type, int who)
 void MDBalancer::maybe_fragment(CDir *dir, bool hot)
 {
   // split/merge
-  if (mds->cct->_conf->get_val<bool>("mds_bal_fragment_dirs") &&
-      g_conf->mds_bal_fragment_interval > 0 &&
+  if (mds->cct->_conf.get_val<bool>("mds_bal_fragment_dirs") &&
+      g_conf()->mds_bal_fragment_interval > 0 &&
       !dir->inode->is_base() &&        // not root/base (for now at least)
       dir->is_auth()) {
 
     // split
-    if (g_conf->mds_bal_split_size > 0 && (dir->should_split() || hot)) {
+    if (g_conf()->mds_bal_split_size > 0 && (dir->should_split() || hot)) {
       if (split_pending.count(dir->dirfrag()) == 0) {
         queue_split(dir, false);
       } else {
@@ -1148,8 +1148,8 @@ void MDBalancer::hit_dir(CDir *dir, int type, int who, double amount)
   // hit me
   double v = dir->pop_me.get(type).hit(amount);
 
-  const bool hot = (v > g_conf->mds_bal_split_rd && type == META_POP_IRD) ||
-                   (v > g_conf->mds_bal_split_wr && type == META_POP_IWR);
+  const bool hot = (v > g_conf()->mds_bal_split_rd && type == META_POP_IRD) ||
+                   (v > g_conf()->mds_bal_split_wr && type == META_POP_IWR);
 
   dout(20) << "hit_dir " << type << " pop is " << v << ", frag " << dir->get_frag()
            << " size " << dir->get_frag_size() << " " << dir->pop_me << dendl;
@@ -1181,7 +1181,7 @@ void MDBalancer::hit_dir(CDir *dir, int type, int who, double amount)
 
     if (dir->is_auth() && !dir->is_ambiguous_auth()) {
       if (!dir->is_rep() &&
-         dir_pop >= g_conf->mds_bal_replicate_threshold) {
+         dir_pop >= g_conf()->mds_bal_replicate_threshold) {
        // replicate
        double rdp = dir->pop_me.get(META_POP_IRD).get();
        rd_adj = rdp / mds->get_mds_map()->get_num_in_mds() - rdp;
@@ -1199,7 +1199,7 @@ void MDBalancer::hit_dir(CDir *dir, int type, int who, double amount)
 
       if (dir->ino() != 1 &&
          dir->is_rep() &&
-         dir_pop < g_conf->mds_bal_unreplicate_threshold) {
+         dir_pop < g_conf()->mds_bal_unreplicate_threshold) {
        // unreplicate
        dout(5) << "unreplicating dir " << *dir << " pop " << dir_pop << dendl;
 
index f3801bb2e72a6e0fd8c7f019f91d15aa10d60010..e3bbe16c335496a89fa0b7e789344fe89fc40eba 100644 (file)
@@ -188,9 +188,9 @@ MDCache::MDCache(MDSRank *m, PurgeQueue &purge_queue_) :
   num_shadow_inodes = 0;
   num_inodes_with_caps = 0;
 
-  max_dir_commit_size = g_conf->mds_dir_max_commit_size ?
-                        (g_conf->mds_dir_max_commit_size << 20) :
-                        (0.9 *(g_conf->osd_max_write_size << 20));
+  max_dir_commit_size = g_conf()->mds_dir_max_commit_size ?
+                        (g_conf()->mds_dir_max_commit_size << 20) :
+                        (0.9 *(g_conf()->osd_max_write_size << 20));
 
   discover_last_tid = 0;
   open_ino_last_tid = 0;
@@ -211,7 +211,7 @@ MDCache::MDCache(MDSRank *m, PurgeQueue &purge_queue_) :
 
   bottom_lru.lru_set_midpoint(0);
 
-  decayrate.set_halflife(g_conf->mds_decay_halflife);
+  decayrate.set_halflife(g_conf()->mds_decay_halflife);
 
   did_shutdown_log_cap = false;
 
@@ -348,9 +348,9 @@ file_layout_t MDCache::gen_default_log_layout(const MDSMap &mdsmap)
 {
   file_layout_t result = file_layout_t::get_default();
   result.pool_id = mdsmap.get_metadata_pool();
-  if (g_conf->mds_log_segment_size > 0) {
-    result.object_size = g_conf->mds_log_segment_size;
-    result.stripe_unit = g_conf->mds_log_segment_size;
+  if (g_conf()->mds_log_segment_size > 0) {
+    result.object_size = g_conf()->mds_log_segment_size;
+    result.stripe_unit = g_conf()->mds_log_segment_size;
   }
   return result;
 }
@@ -379,7 +379,7 @@ void MDCache::create_unlinked_system_inode(CInode *in, inodeno_t ino,
 
   memset(&in->inode.dir_layout, 0, sizeof(in->inode.dir_layout));
   if (in->inode.is_dir()) {
-    in->inode.dir_layout.dl_dir_hash = g_conf->mds_default_dir_hash;
+    in->inode.dir_layout.dl_dir_hash = g_conf()->mds_default_dir_hash;
     ++in->inode.rstat.rsubdirs;
   } else {
     in->inode.layout = default_file_layout;
@@ -410,8 +410,8 @@ CInode *MDCache::create_system_inode(inodeno_t ino, int mode)
 CInode *MDCache::create_root_inode()
 {
   CInode *i = create_system_inode(MDS_INO_ROOT, S_IFDIR|0755);
-  i->inode.uid = g_conf->mds_root_ino_uid;
-  i->inode.gid = g_conf->mds_root_ino_gid;
+  i->inode.uid = g_conf()->mds_root_ino_uid;
+  i->inode.gid = g_conf()->mds_root_ino_gid;
   i->inode.layout = default_file_layout;
   i->inode.layout.pool_id = mds->mdsmap->get_first_data_pool();
   return i;
@@ -1797,7 +1797,7 @@ void MDCache::project_rstat_inode_to_frag(CInode *cur, CDir *parent, snapid_t fi
                                 linkunlink, update);
   }
 
-  if (g_conf->mds_snap_rstat) {
+  if (g_conf()->mds_snap_rstat) {
     for (const auto &p : cur->dirty_old_rstats) {
       auto &old = cur->old_inodes[p];
       snapid_t ofirst = std::max(old.first, floor);
@@ -1844,7 +1844,7 @@ void MDCache::_project_rstat_inode_to_frag(CInode::mempool_inode& inode, snapid_
     snapid_t first;
     fnode_t *pf = parent->get_projected_fnode();
     if (last == CEPH_NOSNAP) {
-      if (g_conf->mds_snap_rstat)
+      if (g_conf()->mds_snap_rstat)
        first = std::max(ofirst, parent->first);
       else
        first = parent->first;
@@ -1862,7 +1862,7 @@ void MDCache::_project_rstat_inode_to_frag(CInode::mempool_inode& inode, snapid_
        parent->dirty_old_rstat[first-1].accounted_rstat = pf->accounted_rstat;
       }
       parent->first = first;
-    } else if (!g_conf->mds_snap_rstat) {
+    } else if (!g_conf()->mds_snap_rstat) {
       // drop snapshots' rstats
       break;
     } else if (last >= parent->first) {
@@ -2230,11 +2230,11 @@ void MDCache::predirty_journal_parents(MutationRef mut, EMetaBlob *blob,
 
     // delay propagating until later?
     if (!stop && !first &&
-       g_conf->mds_dirstat_min_interval > 0) {
+       g_conf()->mds_dirstat_min_interval > 0) {
       double since_last_prop = mut->get_mds_stamp() - pin->last_dirstat_prop;
-      if (since_last_prop < g_conf->mds_dirstat_min_interval) {
+      if (since_last_prop < g_conf()->mds_dirstat_min_interval) {
        dout(10) << "predirty_journal_parents last prop " << since_last_prop
-                << " < " << g_conf->mds_dirstat_min_interval
+                << " < " << g_conf()->mds_dirstat_min_interval
                 << ", stopping" << dendl;
        stop = true;
       } else {
@@ -2299,7 +2299,7 @@ void MDCache::predirty_journal_parents(MutationRef mut, EMetaBlob *blob,
 
       if (parent->get_frag() == frag_t()) { // i.e., we are the only frag
        if (pi.inode.dirstat.size() < 0)
-         assert(!"negative dirstat size" == g_conf->mds_verify_scatter);
+         assert(!"negative dirstat size" == g_conf()->mds_verify_scatter);
        if (pi.inode.dirstat.size() != pf->fragstat.size()) {
          mds->clog->error() << "unmatched fragstat size on single dirfrag "
             << parent->dirfrag() << ", inode has " << pi.inode.dirstat
@@ -2308,7 +2308,7 @@ void MDCache::predirty_journal_parents(MutationRef mut, EMetaBlob *blob,
          // trust the dirfrag for now
          pi.inode.dirstat = pf->fragstat;
 
-         assert(!"unmatched fragstat size" == g_conf->mds_verify_scatter);
+         assert(!"unmatched fragstat size" == g_conf()->mds_verify_scatter);
        }
       }
     }
@@ -2335,7 +2335,7 @@ void MDCache::predirty_journal_parents(MutationRef mut, EMetaBlob *blob,
     // first, if the frag is stale, bring it back in sync.
     parent->resync_accounted_rstat();
 
-    if (g_conf->mds_snap_rstat) {
+    if (g_conf()->mds_snap_rstat) {
       for (auto &p : parent->dirty_old_rstat) {
        project_rstat_frag_to_inode(p.second.rstat, p.second.accounted_rstat, p.second.first,
                                    p.first, pin, true);
@@ -2355,7 +2355,7 @@ void MDCache::predirty_journal_parents(MutationRef mut, EMetaBlob *blob,
        // trust the dirfrag for now
        pi.inode.rstat = pf->rstat;
 
-       assert(!"unmatched rstat rbytes" == g_conf->mds_verify_scatter);
+       assert(!"unmatched rstat rbytes" == g_conf()->mds_verify_scatter);
       }
     }
 
@@ -4683,7 +4683,7 @@ CDir *MDCache::rejoin_invent_dirfrag(dirfrag_t df)
   if (!in->is_dir()) {
     assert(in->state_test(CInode::STATE_REJOINUNDEF));
     in->inode.mode = S_IFDIR;
-    in->inode.dir_layout.dl_dir_hash = g_conf->mds_default_dir_hash;
+    in->inode.dir_layout.dl_dir_hash = g_conf()->mds_default_dir_hash;
   }
   CDir *dir = in->get_or_open_dirfrag(this, df.frag);
   dir->state_set(CDir::STATE_REJOINUNDEF);
@@ -5001,7 +5001,7 @@ void MDCache::handle_cache_rejoin_ack(MMDSCacheRejoin *ack)
        diri = new CInode(this, false);
        diri->inode.ino = p->first.ino;
        diri->inode.mode = S_IFDIR;
-       diri->inode.dir_layout.dl_dir_hash = g_conf->mds_default_dir_hash;
+       diri->inode.dir_layout.dl_dir_hash = g_conf()->mds_default_dir_hash;
        add_inode(diri);
        if (MDS_INO_MDSDIR(from) == p->first.ino) {
          diri->inode_auth = mds_authority_t(from, CDIR_AUTH_UNKNOWN);
@@ -5073,7 +5073,7 @@ void MDCache::handle_cache_rejoin_ack(MMDSCacheRejoin *ack)
            in = new CInode(this, false, q->second.first, q->first.snapid);
            in->inode.ino = q->second.ino;
            in->inode.mode = S_IFDIR;
-           in->inode.dir_layout.dl_dir_hash = g_conf->mds_default_dir_hash;
+           in->inode.dir_layout.dl_dir_hash = g_conf()->mds_default_dir_hash;
            add_inode(in);
            dout(10) << " add inode " << *in << dendl;
          } else if (in->get_parent_dn()) {
@@ -6029,7 +6029,7 @@ void MDCache::opened_undef_inode(CInode *in) {
   rejoin_undef_inodes.erase(in);
   if (in->is_dir()) {
     // FIXME: re-hash dentries if necessary
-    assert(in->inode.dir_layout.dl_dir_hash == g_conf->mds_default_dir_hash);
+    assert(in->inode.dir_layout.dl_dir_hash == g_conf()->mds_default_dir_hash);
     if (in->has_dirfrags() && !in->dirfragtree.is_leaf(frag_t())) {
       CDir *dir = in->get_dirfrag(frag_t());
       assert(dir);
@@ -7655,13 +7655,13 @@ void MDCache::shutdown_check()
   // cache
   char old_val[32] = { 0 };
   char *o = old_val;
-  g_conf->get_val("debug_mds", &o, sizeof(old_val));
-  g_conf->set_val("debug_mds", "10");
-  g_conf->apply_changes(NULL);
+  g_conf().get_val("debug_mds", &o, sizeof(old_val));
+  g_conf().set_val("debug_mds", "10");
+  g_conf().apply_changes(NULL);
   show_cache();
-  g_conf->set_val("debug_mds", old_val);
-  g_conf->apply_changes(NULL);
-  mds->timer.add_event_after(g_conf->mds_shutdown_check, new C_MDC_ShutdownCheck(this));
+  g_conf().set_val("debug_mds", old_val);
+  g_conf().apply_changes(NULL);
+  mds->timer.add_event_after(g_conf()->mds_shutdown_check, new C_MDC_ShutdownCheck(this));
 
   // this
   dout(0) << "lru size now " << lru.lru_get_size() << "/" << bottom_lru.lru_get_size() << dendl;
@@ -7679,10 +7679,10 @@ void MDCache::shutdown_start()
 {
   dout(2) << "shutdown_start" << dendl;
 
-  if (g_conf->mds_shutdown_check)
-    mds->timer.add_event_after(g_conf->mds_shutdown_check, new C_MDC_ShutdownCheck(this));
+  if (g_conf()->mds_shutdown_check)
+    mds->timer.add_event_after(g_conf()->mds_shutdown_check, new C_MDC_ShutdownCheck(this));
 
-  //  g_conf->debug_mds = 10;
+  //  g_conf()->debug_mds = 10;
 }
 
 
@@ -11348,7 +11348,7 @@ void MDCache::find_stale_fragment_freeze()
   // see comment in Migrator::find_stale_export_freeze()
   utime_t now = ceph_clock_now();
   utime_t cutoff = now;
-  cutoff -= g_conf->mds_freeze_tree_timeout;
+  cutoff -= g_conf()->mds_freeze_tree_timeout;
 
   for (map<dirfrag_t,fragment_info_t>::iterator p = fragments.begin();
        p != fragments.end(); ) {
@@ -11508,7 +11508,7 @@ void MDCache::dispatch_fragment_dir(MDRequestRef& mdr)
   list<MDSInternalContextBase*> waiters;
   adjust_dir_fragments(diri, info.dirs, basedirfrag.frag, info.bits,
                       info.resultfrags, waiters, false);
-  if (g_conf->mds_debug_frag)
+  if (g_conf()->mds_debug_frag)
     diri->verify_dirfrags();
   mds->queue_waiters(waiters);
 
@@ -11752,7 +11752,7 @@ void MDCache::handle_fragment_notify(MMDSFragmentNotify *notify)
     list<MDSInternalContextBase*> waiters;
     list<CDir*> resultfrags;
     adjust_dir_fragments(diri, base, bits, resultfrags, waiters, false);
-    if (g_conf->mds_debug_frag)
+    if (g_conf()->mds_debug_frag)
       diri->verify_dirfrags();
     
     for (list<CDir*>::iterator p = resultfrags.begin(); p != resultfrags.end(); ++p)
@@ -11903,7 +11903,7 @@ void MDCache::rollback_uncommitted_fragments()
       ls->dirty_dirfrag_dirfragtree.push_back(&diri->item_dirty_dirfrag_dirfragtree);
     }
 
-    if (g_conf->mds_debug_frag)
+    if (g_conf()->mds_debug_frag)
       diri->verify_dirfrags();
 
     for (list<frag_t>::iterator q = old_frags.begin(); q != old_frags.end(); ++q)
@@ -11950,12 +11950,12 @@ void MDCache::force_readonly()
 
 void MDCache::show_subtrees(int dbl)
 {
-  if (g_conf->mds_thrash_exports)
+  if (g_conf()->mds_thrash_exports)
     dbl += 15;
 
   //dout(10) << "show_subtrees" << dendl;
 
-  if (!g_conf->subsys.should_gather(ceph_subsys_mds, dbl))
+  if (!g_conf()->subsys.should_gather(ceph_subsys_mds, dbl))
     return;  // i won't print anything.
 
   if (subtrees.empty()) {
index cfe656a803b12d7853579f054ea70acfe695b005..ce1386ca0fade760eab8f7d34b5b8e1cc8df1fd6 100644 (file)
@@ -152,19 +152,19 @@ class MDCache {
 
 public:
   static uint64_t cache_limit_inodes(void) {
-    return g_conf->get_val<int64_t>("mds_cache_size");
+    return g_conf().get_val<int64_t>("mds_cache_size");
   }
   static uint64_t cache_limit_memory(void) {
-    return g_conf->get_val<uint64_t>("mds_cache_memory_limit");
+    return g_conf().get_val<uint64_t>("mds_cache_memory_limit");
   }
   static double cache_reservation(void) {
-    return g_conf->get_val<double>("mds_cache_reservation");
+    return g_conf().get_val<double>("mds_cache_reservation");
   }
   static double cache_mid(void) {
-    return g_conf->get_val<double>("mds_cache_mid");
+    return g_conf().get_val<double>("mds_cache_mid");
   }
   static double cache_health_threshold(void) {
-    return g_conf->get_val<double>("mds_health_cache_threshold");
+    return g_conf().get_val<double>("mds_health_cache_threshold");
   }
   double cache_toofull_ratio(void) const {
     uint64_t inode_limit = cache_limit_inodes();
index 785a7d1b41f5340bde8fb499ba3098ce4ba739c8..34d9f91a62ee3dfacaf1310f4988b5b8fa9ab25f 100644 (file)
@@ -94,7 +94,7 @@ class C_MDL_WriteError : public MDSIOContextBase {
   void finish(int r) override {
     MDSRank *mds = get_mds();
     // assume journal is reliable, so don't choose action based on
-    // g_conf->mds_action_on_write_error.
+    // g_conf()->mds_action_on_write_error.
     if (r == -EBLACKLISTED) {
       derr << "we have been blacklisted (fenced), respawning..." << dendl;
       mds->respawn();
@@ -161,7 +161,7 @@ void MDLog::create(MDSInternalContextBase *c)
   assert(journaler->is_readonly());
   journaler->set_write_error_handler(new C_MDL_WriteError(this));
   journaler->set_writeable();
-  journaler->create(&mds->mdcache->default_log_layout, g_conf->mds_journal_format);
+  journaler->create(&mds->mdcache->default_log_layout, g_conf()->mds_journal_format);
   journaler->write_head(gather.new_sub());
 
   // Async write JournalPointer to RADOS
@@ -307,11 +307,11 @@ void MDLog::_submit_entry(LogEvent *le, MDSLogContextBase *c)
     // disambiguate imports. Because the ESubtreeMap reflects the subtree
     // state when all EImportFinish events are replayed.
   } else if (ls->end/period != ls->offset/period ||
-            ls->num_events >= g_conf->mds_log_events_per_segment) {
+            ls->num_events >= g_conf()->mds_log_events_per_segment) {
     dout(10) << "submit_entry also starting new segment: last = "
             << ls->seq  << "/" << ls->offset << ", event seq = " << event_seq << dendl;
     _start_new_segment();
-  } else if (g_conf->mds_debug_subtrees &&
+  } else if (g_conf()->mds_debug_subtrees &&
             le->get_type() != EVENT_SUBTREEMAP_TEST) {
     // debug: journal this every time to catch subtree replay bugs.
     // use a different event id so it doesn't get interpreted as a
@@ -351,7 +351,7 @@ void MDLog::_submit_thread()
   submit_mutex.Lock();
 
   while (!mds->is_daemon_stopping()) {
-    if (g_conf->mds_log_pause) {
+    if (g_conf()->mds_log_pause) {
       submit_cond.Wait(submit_mutex);
       continue;
     }
@@ -579,8 +579,8 @@ public:
 
 void MDLog::trim(int m)
 {
-  unsigned max_segments = g_conf->mds_log_max_segments;
-  int max_events = g_conf->mds_log_max_events;
+  unsigned max_segments = g_conf()->mds_log_max_segments;
+  int max_events = g_conf()->mds_log_max_events;
   if (m >= 0)
     max_events = m;
 
@@ -590,8 +590,8 @@ void MDLog::trim(int m)
   }
 
   // Clamp max_events to not be smaller than events per segment
-  if (max_events > 0 && max_events <= g_conf->mds_log_events_per_segment) {
-    max_events = g_conf->mds_log_events_per_segment + 1;
+  if (max_events > 0 && max_events <= g_conf()->mds_log_events_per_segment) {
+    max_events = g_conf()->mds_log_events_per_segment + 1;
   }
 
   submit_mutex.Lock();
@@ -938,7 +938,7 @@ void MDLog::replay(MDSInternalContextBase *c)
 void MDLog::_recovery_thread(MDSInternalContextBase *completion)
 {
   assert(journaler == NULL);
-  if (g_conf->mds_journal_format > JOURNAL_FORMAT_MAX) {
+  if (g_conf()->mds_journal_format > JOURNAL_FORMAT_MAX) {
       dout(0) << "Configuration value for mds_journal_format is out of bounds, max is "
               << JOURNAL_FORMAT_MAX << dendl;
 
@@ -1066,7 +1066,7 @@ void MDLog::_recovery_thread(MDSInternalContextBase *completion)
       }
       completion->complete(-EINVAL);
     }
-  } else if (mds->is_standby_replay() || front_journal->get_stream_format() >= g_conf->mds_journal_format) {
+  } else if (mds->is_standby_replay() || front_journal->get_stream_format() >= g_conf()->mds_journal_format) {
     /* The journal is of configured format, or we are in standbyreplay and will
      * tolerate replaying old journals until we have to go active. Use front_journal as
      * our journaler attribute and complete */
@@ -1117,7 +1117,7 @@ void MDLog::_reformat_journal(JournalPointer const &jp_in, Journaler *old_journa
   dout(4) << "Writing new journal header " << jp.back << dendl;
   file_layout_t new_layout = old_journal->get_layout();
   new_journal->set_writeable();
-  new_journal->create(&new_layout, g_conf->mds_journal_format);
+  new_journal->create(&new_layout, g_conf()->mds_journal_format);
 
   /* Write the new journal header to RADOS */
   C_SaferCond write_head_wait;
@@ -1390,7 +1390,7 @@ void MDLog::_replay_thread()
       mds->clog->error() << "corrupt journal event at " << pos << "~"
                          << bl.length() << " / "
                          << journaler->get_write_pos();
-      if (g_conf->mds_log_skip_corrupt_events) {
+      if (g_conf()->mds_log_skip_corrupt_events) {
         continue;
       } else {
         mds->damaged_unlocked();
index 9620efdbf94f555a5c2ebf7304ea0a798413f90c..a250de9e5b672aff8942a6e99735190cd421c273 100644 (file)
@@ -365,7 +365,7 @@ const char** MDSDaemon::get_tracked_conf_keys() const
   return KEYS;
 }
 
-void MDSDaemon::handle_conf_change(const md_config_t *conf,
+void MDSDaemon::handle_conf_change(const md_config_t *mconf,
                             const std::set <std::string> &changed)
 {
   // We may be called within mds_lock (via `tell`) or outwith the
@@ -375,6 +375,7 @@ void MDSDaemon::handle_conf_change(const md_config_t *conf,
     mds_lock.Lock();
   }
 
+  ConfigReader conf{mconf};
   if (changed.count("mds_op_complaint_time") ||
       changed.count("mds_op_log_threshold")) {
     if (mds_rank) {
@@ -408,14 +409,14 @@ void MDSDaemon::handle_conf_change(const md_config_t *conf,
     }
   }
 
-  if (!g_conf->mds_log_pause && changed.count("mds_log_pause")) {
+  if (!g_conf()->mds_log_pause && changed.count("mds_log_pause")) {
     if (mds_rank) {
       mds_rank->mdlog->kick_submitter();
     }
   }
 
   if (mds_rank) {
-    mds_rank->handle_conf_change(conf, changed);
+    mds_rank->handle_conf_change(mconf, changed);
   }
 
   if (!initially_locked) {
@@ -478,7 +479,7 @@ int MDSDaemon::init()
 
   int rotating_auth_attempts = 0;
   while (monc->wait_auth_rotating(30.0) < 0) {
-    if (++rotating_auth_attempts <= g_conf->max_rotating_auth_attempts) {
+    if (++rotating_auth_attempts <= g_conf()->max_rotating_auth_attempts) {
       derr << "unable to obtain rotating service keys; retrying" << dendl;
       continue;
     }
@@ -509,7 +510,7 @@ int MDSDaemon::init()
   // Set up admin socket before taking mds_lock, so that ordering
   // is consistent (later we take mds_lock within asok callbacks)
   set_up_admin_socket();
-  g_conf->add_observer(this);
+  g_conf().add_observer(this);
   mds_lock.Lock();
   if (beacon.get_want_state() == MDSMap::STATE_DNE) {
     suicide();  // we could do something more graceful here
@@ -537,7 +538,7 @@ void MDSDaemon::reset_tick()
 
   // schedule
   tick_event = timer.add_event_after(
-    g_conf->mds_tick_interval,
+    g_conf()->mds_tick_interval,
     new FunctionContext([this](int) {
        assert(mds_lock.is_locked_by_me());
        tick();
@@ -783,22 +784,22 @@ int MDSDaemon::_handle_command(
     string args = argsvec.front();
     for (vector<string>::iterator a = ++argsvec.begin(); a != argsvec.end(); ++a)
       args += " " + *a;
-    r = cct->_conf->injectargs(args, &ss);
+    r = cct->_conf.injectargs(args, &ss);
   } else if (prefix == "config set") {
     std::string key;
     cmd_getval(cct, cmdmap, "key", key);
     std::string val;
     cmd_getval(cct, cmdmap, "value", val);
-    r = cct->_conf->set_val(key, val, &ss);
+    r = cct->_conf.set_val(key, val, &ss);
     if (r == 0) {
-      cct->_conf->apply_changes(nullptr);
+      cct->_conf.apply_changes(nullptr);
     }
   } else if (prefix == "config unset") {
     std::string key;
     cmd_getval(cct, cmdmap, "key", key);
-    r = cct->_conf->rm_val(key);
+    r = cct->_conf.rm_val(key);
     if (r == 0) {
-      cct->_conf->apply_changes(nullptr);
+      cct->_conf.apply_changes(nullptr);
     }
     if (r == -ENOENT) {
       r = 0; // idempotent
@@ -822,7 +823,7 @@ int MDSDaemon::_handle_command(
     bool got = cmd_getval(cct, cmdmap, "session_id", session_id);
     assert(got);
     bool killed = mds_rank->evict_client(session_id, false,
-                                         g_conf->mds_session_blacklist_on_evict,
+                                         g_conf()->mds_session_blacklist_on_evict,
                                          ss);
     if (!killed)
       r = -ENOENT;
@@ -936,7 +937,7 @@ void MDSDaemon::handle_mds_map(MMDSMap *m)
       const auto myid = monc->get_global_id();
       // We have entered a rank-holding state, we shouldn't be back
       // here!
-      if (g_conf->mds_enforce_unique_name) {
+      if (g_conf()->mds_enforce_unique_name) {
         if (mds_gid_t existing = mdsmap->find_mds_gid_by_name(name)) {
           const MDSMap::mds_info_t& i = mdsmap->get_info_gid(existing);
           if (i.global_id > myid) {
@@ -1052,7 +1053,7 @@ void MDSDaemon::suicide()
   //because add_observer is called after set_up_admin_socket
   //so we can use asok_hook to avoid assert in the remove_observer
   if (asok_hook != NULL)
-    g_conf->remove_observer(this);
+    g_conf().remove_observer(this);
 
   clean_up_admin_socket();
 
index 7208da20c0a57d28e6c27679abce56360cdf5362..017d103a73a43cd025197dc78a7c2ee17bf72337 100644 (file)
@@ -65,8 +65,8 @@ MDSRank::MDSRank(
     damage_table(whoami_),
     inotable(NULL), snapserver(NULL), snapclient(NULL),
     sessionmap(this), logger(NULL), mlogger(NULL),
-    op_tracker(g_ceph_context, g_conf->mds_enable_op_tracker,
-               g_conf->osd_num_op_tracker_shard),
+    op_tracker(g_ceph_context, g_conf()->mds_enable_op_tracker,
+               g_conf()->osd_num_op_tracker_shard),
     last_state(MDSMap::STATE_BOOT),
     state(MDSMap::STATE_BOOT),
     cluster_degraded(false), stopping(false),
@@ -228,9 +228,9 @@ void MDSRank::update_targets()
 
 void MDSRank::hit_export_target(mds_rank_t rank, double amount)
 {
-  double rate = g_conf->mds_bal_target_decay;
+  double rate = g_conf()->mds_bal_target_decay;
   if (amount < 0.0) {
-    amount = 100.0/g_conf->mds_bal_target_decay; /* a good default for "i am trying to keep this export_target active" */
+    amount = 100.0/g_conf()->mds_bal_target_decay; /* a good default for "i am trying to keep this export_target active" */
   }
   auto em = export_targets.emplace(std::piecewise_construct, std::forward_as_tuple(rank), std::forward_as_tuple(DecayRate(rate)));
   auto &counter = em.first->second;
@@ -503,7 +503,7 @@ void MDSRank::damaged()
   beacon.set_want_state(mdsmap, MDSMap::STATE_DAMAGED);
   monc->flush_log();  // Flush any clog error from before we were called
   beacon.notify_health(this);  // Include latest status in our swan song
-  beacon.send_and_wait(g_conf->mds_mon_shutdown_timeout);
+  beacon.send_and_wait(g_conf()->mds_mon_shutdown_timeout);
 
   // It's okay if we timed out and the mon didn't get our beacon, because
   // another daemon (or ourselves after respawn) will eventually take the
@@ -526,10 +526,10 @@ void MDSRank::handle_write_error(int err)
     return;
   }
 
-  if (g_conf->mds_action_on_write_error >= 2) {
+  if (g_conf()->mds_action_on_write_error >= 2) {
     derr << "unhandled write error " << cpp_strerror(err) << ", suicide..." << dendl;
     respawn();
-  } else if (g_conf->mds_action_on_write_error == 1) {
+  } else if (g_conf()->mds_action_on_write_error == 1) {
     derr << "unhandled write error " << cpp_strerror(err) << ", force readonly..." << dendl;
     mdcache->force_readonly();
   } else {
@@ -640,17 +640,17 @@ bool MDSRank::_dispatch(Message *m, bool new_msg)
   /*double el = now - start;
   if (el > 30.0 &&
     el < 60.0)*/
-  for (int i=0; i<g_conf->mds_thrash_exports; i++) {
+  for (int i=0; i<g_conf()->mds_thrash_exports; i++) {
     set<mds_rank_t> s;
     if (!is_active()) break;
     mdsmap->get_mds_set(s, MDSMap::STATE_ACTIVE);
     if (s.size() < 2 || CInode::count() < 10)
       break;  // need peers for this to work.
-    if (mdcache->migrator->get_num_exporting() > g_conf->mds_thrash_exports * 5 ||
-       mdcache->migrator->get_export_queue_size() > g_conf->mds_thrash_exports * 10)
+    if (mdcache->migrator->get_num_exporting() > g_conf()->mds_thrash_exports * 5 ||
+       mdcache->migrator->get_export_queue_size() > g_conf()->mds_thrash_exports * 10)
       break;
 
-    dout(7) << "mds thrashing exports pass " << (i+1) << "/" << g_conf->mds_thrash_exports << dendl;
+    dout(7) << "mds thrashing exports pass " << (i+1) << "/" << g_conf()->mds_thrash_exports << dendl;
 
     // pick a random dir inode
     CInode *in = mdcache->hack_pick_random_inode();
@@ -677,10 +677,10 @@ bool MDSRank::_dispatch(Message *m, bool new_msg)
     }
   }
   // hack: thrash fragments
-  for (int i=0; i<g_conf->mds_thrash_fragments; i++) {
+  for (int i=0; i<g_conf()->mds_thrash_fragments; i++) {
     if (!is_active()) break;
-    if (mdcache->get_num_fragmenting_dirs() > 5 * g_conf->mds_thrash_fragments) break;
-    dout(7) << "mds thrashing fragments pass " << (i+1) << "/" << g_conf->mds_thrash_fragments << dendl;
+    if (mdcache->get_num_fragmenting_dirs() > 5 * g_conf()->mds_thrash_fragments) break;
+    dout(7) << "mds thrashing fragments pass " << (i+1) << "/" << g_conf()->mds_thrash_fragments << dendl;
 
     // pick a random dir inode
     CInode *in = mdcache->hack_pick_random_inode();
@@ -870,7 +870,7 @@ void MDSRank::heartbeat_reset()
   // NB not enabling suicide grace, because the mon takes care of killing us
   // (by blacklisting us) when we fail to send beacons, and it's simpler to
   // only have one way of dying.
-  g_ceph_context->get_heartbeat_map()->reset_timeout(hb, g_conf->mds_beacon_grace, 0);
+  g_ceph_context->get_heartbeat_map()->reset_timeout(hb, g_conf()->mds_beacon_grace, 0);
 }
 
 bool MDSRank::is_stale_message(Message *m) const
@@ -1363,7 +1363,7 @@ void MDSRank::replay_done()
     // The replay was done in standby state, and we are still in that state
     assert(standby_replaying);
     dout(10) << "setting replay timer" << dendl;
-    timer.add_event_after(g_conf->mds_replay_interval,
+    timer.add_event_after(g_conf()->mds_replay_interval,
                           new C_MDS_StandbyReplayRestart(this));
     return;
   } else if (standby_replaying) {
@@ -1378,7 +1378,7 @@ void MDSRank::replay_done()
     assert(!is_standby_replay());
 
     // Reformat and come back here
-    if (mdlog->get_journaler()->get_stream_format() < g_conf->mds_journal_format) {
+    if (mdlog->get_journaler()->get_stream_format() < g_conf()->mds_journal_format) {
         dout(4) << "reformatting journal on standbyreplay->replay transition" << dendl;
         mdlog->reopen(new C_MDS_BootStart(this, MDS_BOOT_REPLAY_DONE));
         return;
@@ -1395,18 +1395,18 @@ void MDSRank::replay_done()
     snapserver->save(new C_MDSInternalNoop);
   }
 
-  if (g_conf->mds_wipe_sessions) {
+  if (g_conf()->mds_wipe_sessions) {
     dout(1) << "wiping out client sessions" << dendl;
     sessionmap.wipe();
     sessionmap.save(new C_MDSInternalNoop);
   }
-  if (g_conf->mds_wipe_ino_prealloc) {
+  if (g_conf()->mds_wipe_ino_prealloc) {
     dout(1) << "wiping out ino prealloc from sessions" << dendl;
     sessionmap.wipe_ino_prealloc();
     sessionmap.save(new C_MDSInternalNoop);
   }
-  if (g_conf->mds_skip_ino) {
-    inodeno_t i = g_conf->mds_skip_ino;
+  if (g_conf()->mds_skip_ino) {
+    inodeno_t i = g_conf()->mds_skip_ino;
     dout(1) << "skipping " << i << " inodes" << dendl;
     inotable->skip_inos(i);
     inotable->save(new C_MDSInternalNoop);
@@ -1636,7 +1636,7 @@ void MDSRank::boot_create()
     snapserver->save(fin.new_sub());
   }
 
-  assert(g_conf->mds_kill_create_at != 1);
+  assert(g_conf()->mds_kill_create_at != 1);
 
   // ok now journal it
   mdlog->journal_segment_subtree_map(fin.new_sub());
@@ -1671,7 +1671,7 @@ void MDSRank::stopping_start()
     for (const auto &s : victims) {
       std::stringstream ss;
       evict_client(s->get_client().v, false,
-                   g_conf->mds_session_blacklist_on_evict, ss, gather.new_sub());
+                   g_conf()->mds_session_blacklist_on_evict, ss, gather.new_sub());
     }
     gather.activate();
   }
@@ -1737,7 +1737,7 @@ void MDSRankDispatcher::handle_mds_map(
     objecter->set_client_incarnation(incarnation);
 
   // for debug
-  if (g_conf->mds_dump_cache_on_map)
+  if (g_conf()->mds_dump_cache_on_map)
     mdcache->dump_cache();
 
   // did it change?
@@ -1822,7 +1822,7 @@ void MDSRankDispatcher::handle_mds_map(
       rejoin_joint_start();
 
     // did we finish?
-    if (g_conf->mds_dump_cache_after_rejoin &&
+    if (g_conf()->mds_dump_cache_after_rejoin &&
        oldmap->is_rejoining() && !mdsmap->is_rejoining())
       mdcache->dump_cache();      // for DEBUG only
 
@@ -2034,7 +2034,7 @@ bool MDSRankDispatcher::handle_asok_command(std::string_view command,
     mds_lock.Lock();
     std::stringstream dss;
     bool evicted = evict_client(strtol(client_id.c_str(), 0, 10), true,
-        g_conf->mds_session_blacklist_on_evict, dss);
+        g_conf()->mds_session_blacklist_on_evict, dss);
     if (!evicted) {
       dout(15) << dss.str() << dendl;
       ss << dss.str();
@@ -2196,7 +2196,7 @@ void MDSRankDispatcher::evict_clients(const SessionFilter &filter, MCommand *m)
   for (const auto s : victims) {
     std::stringstream ss;
     evict_client(s->get_client().v, false,
-                 g_conf->mds_session_blacklist_on_evict, ss, gather.new_sub());
+                 g_conf()->mds_session_blacklist_on_evict, ss, gather.new_sub());
   }
   gather.activate();
 }
index 20c5e0a4f9a76c4a5863e934b1b69cf065a35964..11dcd8e147f4530684b5707c07ec993573457096 100644 (file)
@@ -71,7 +71,7 @@ void MDSTableClient::handle_request(class MMDSTableRequest *m)
     break;
 
   case TABLESERVER_OP_NOTIFY_PREP:
-    assert(g_conf->mds_kill_mdstable_at != 9);
+    assert(g_conf()->mds_kill_mdstable_at != 9);
     handle_notify_prep(m);
     break;
     
@@ -79,7 +79,7 @@ void MDSTableClient::handle_request(class MMDSTableRequest *m)
     if (pending_prepare.count(reqid)) {
       dout(10) << "got agree on " << reqid << " atid " << tid << dendl;
 
-      assert(g_conf->mds_kill_mdstable_at != 3);
+      assert(g_conf()->mds_kill_mdstable_at != 3);
 
       MDSInternalContextBase *onfinish = pending_prepare[reqid].onfinish;
       *pending_prepare[reqid].ptid = tid;
@@ -116,7 +116,7 @@ void MDSTableClient::handle_request(class MMDSTableRequest *m)
        pending_commit[tid]->pending_commit_tids[table].count(tid)) {
       dout(10) << "got ack on tid " << tid << ", logging" << dendl;
       
-      assert(g_conf->mds_kill_mdstable_at != 7);
+      assert(g_conf()->mds_kill_mdstable_at != 7);
       
       // remove from committing list
       pending_commit[tid]->pending_commit_tids[table].erase(tid);
@@ -200,7 +200,7 @@ void MDSTableClient::commit(version_t tid, LogSegment *ls)
 
   notify_commit(tid);
 
-  assert(g_conf->mds_kill_mdstable_at != 4);
+  assert(g_conf()->mds_kill_mdstable_at != 4);
 
   if (server_ready) {
     // send message
index 874a496a9290ff83c8d3efc44e7a99bddcb6652f..c207425e9761e595f50ac69799c76b98a57ea304 100644 (file)
@@ -59,7 +59,7 @@ void MDSTableServer::handle_prepare(MMDSTableRequest *req)
   dout(7) << "handle_prepare " << *req << dendl;
   mds_rank_t from = mds_rank_t(req->get_source().num());
 
-  assert(g_conf->mds_kill_mdstable_at != 1);
+  assert(g_conf()->mds_kill_mdstable_at != 1);
 
   projected_version++;
 
@@ -76,7 +76,7 @@ void MDSTableServer::_prepare_logged(MMDSTableRequest *req, version_t tid)
   dout(7) << "_create_logged " << *req << " tid " << tid << dendl;
   mds_rank_t from = mds_rank_t(req->get_source().num());
 
-  assert(g_conf->mds_kill_mdstable_at != 2);
+  assert(g_conf()->mds_kill_mdstable_at != 2);
 
   _note_prepare(from, req->reqid);
   _prepare(req->bl, req->reqid, from);
@@ -147,7 +147,7 @@ void MDSTableServer::handle_commit(MMDSTableRequest *req)
       return;
     }
 
-    assert(g_conf->mds_kill_mdstable_at != 5);
+    assert(g_conf()->mds_kill_mdstable_at != 5);
 
     projected_version++;
     committing_tids.insert(tid);
@@ -175,7 +175,7 @@ void MDSTableServer::_commit_logged(MMDSTableRequest *req)
 {
   dout(7) << "_commit_logged, sending ACK" << dendl;
 
-  assert(g_conf->mds_kill_mdstable_at != 6);
+  assert(g_conf()->mds_kill_mdstable_at != 6);
   version_t tid = req->get_tid();
 
   pending_for_mds.erase(tid);
@@ -205,7 +205,7 @@ void MDSTableServer::handle_rollback(MMDSTableRequest *req)
 {
   dout(7) << "handle_rollback " << *req << dendl;
 
-  assert(g_conf->mds_kill_mdstable_at != 8);
+  assert(g_conf()->mds_kill_mdstable_at != 8);
   version_t tid = req->get_tid();
   assert(pending_for_mds.count(tid));
   assert(!committing_tids.count(tid));
index a514b018481b41c4c17e80fccc7e2bd666f6151f..4e6d9dd81f2bed6eb9ca3d629bcb4dc9539a3a9c 100644 (file)
@@ -221,7 +221,7 @@ void Migrator::find_stale_export_freeze()
 {
   utime_t now = ceph_clock_now();
   utime_t cutoff = now;
-  cutoff -= g_conf->mds_freeze_tree_timeout;
+  cutoff -= g_conf()->mds_freeze_tree_timeout;
 
 
   /*
@@ -536,7 +536,7 @@ void Migrator::handle_mds_failure_or_stop(mds_rank_t who)
          // notify bystanders ; wait in aborting state
          q->second.state = IMPORT_ABORTING;
          import_notify_abort(dir, bounds);
-         assert(g_conf->mds_kill_import_at != 10);
+         assert(g_conf()->mds_kill_import_at != 10);
        }
        break;
 
@@ -631,7 +631,7 @@ void Migrator::show_exporting()
 
 void Migrator::audit()
 {
-  if (!g_conf->subsys.should_gather<ceph_subsys_mds, 5>())
+  if (!g_conf()->subsys.should_gather<ceph_subsys_mds, 5>())
     return;  // hrm.
 
   // import_state
@@ -834,7 +834,7 @@ void Migrator::export_dir(CDir *dir, mds_rank_t dest)
     return;
   }
 
-  if (g_conf->mds_thrash_exports) {
+  if (g_conf()->mds_thrash_exports) {
     // create random subtree bound (which will not be exported)
     list<CDir*> ls;
     for (auto p = dir->begin(); p != dir->end(); ++p) {
@@ -946,7 +946,7 @@ void Migrator::dispatch_export_dir(MDRequestRef& mdr, int count)
     return;
   }
 
-  assert(g_conf->mds_kill_export_at != 1);
+  assert(g_conf()->mds_kill_export_at != 1);
   it->second.state = EXPORT_DISCOVERING;
 
   // send ExportDirDiscover (ask target)
@@ -956,7 +956,7 @@ void Migrator::dispatch_export_dir(MDRequestRef& mdr, int count)
                                                        mds->get_nodeid(),
                                                        it->second.tid);
   mds->send_message_mds(discover, dest);
-  assert(g_conf->mds_kill_export_at != 2);
+  assert(g_conf()->mds_kill_export_at != 2);
 
   it->second.last_cum_auth_pins_change = ceph_clock_now();
 
@@ -1000,7 +1000,7 @@ void Migrator::handle_export_discover_ack(MExportDirDiscoverAck *m)
       // freeze the subtree
       it->second.state = EXPORT_FREEZING;
       dir->auth_unpin(this);
-      assert(g_conf->mds_kill_export_at != 3);
+      assert(g_conf()->mds_kill_export_at != 3);
 
     } else {
       dout(7) << "peer failed to discover (not active?), canceling" << dendl;
@@ -1195,7 +1195,7 @@ void Migrator::export_frozen(CDir *dir, uint64_t tid)
   // send.
   it->second.state = EXPORT_PREPPING;
   mds->send_message_mds(prep, it->second.peer);
-  assert (g_conf->mds_kill_export_at != 4);
+  assert (g_conf()->mds_kill_export_at != 4);
 
   // make sure any new instantiations of caps are flushed out
   assert(it->second.warning_ack_waiting.empty());
@@ -1217,7 +1217,7 @@ void Migrator::check_export_size(CDir *dir, export_state_t& stat, set<client_t>&
   const unsigned link_size = 10;
   const unsigned null_size = 1;
 
-  uint64_t max_size = g_conf->get_val<uint64_t>("mds_max_export_size");
+  uint64_t max_size = g_conf().get_val<uint64_t>("mds_max_export_size");
   uint64_t approx_size = 0;
 
   list<CDir*> dfs;
@@ -1319,7 +1319,7 @@ void Migrator::handle_export_prep_ack(MExportDirPrepAck *m)
     return;
   }
 
-  assert (g_conf->mds_kill_export_at != 5);
+  assert (g_conf()->mds_kill_export_at != 5);
   // send warnings
   set<CDir*> bounds;
   cache->get_subtree_bounds(dir, bounds);
@@ -1348,7 +1348,7 @@ void Migrator::handle_export_prep_ack(MExportDirPrepAck *m)
 
   it->second.state = EXPORT_WARNING;
 
-  assert(g_conf->mds_kill_export_at != 6);
+  assert(g_conf()->mds_kill_export_at != 6);
   // nobody to warn?
   if (it->second.warning_ack_waiting.empty())
     export_go(dir);  // start export.
@@ -1400,7 +1400,7 @@ void Migrator::export_go_synced(CDir *dir, uint64_t tid)
   cache->show_subtrees();
   
   it->second.state = EXPORT_EXPORTING;
-  assert(g_conf->mds_kill_export_at != 7);
+  assert(g_conf()->mds_kill_export_at != 7);
 
   assert(dir->is_frozen_tree_root());
   assert(dir->get_cum_auth_pins() == 0);
@@ -1430,7 +1430,7 @@ void Migrator::export_go_synced(CDir *dir, uint64_t tid)
 
   // send
   mds->send_message_mds(req, dest);
-  assert(g_conf->mds_kill_export_at != 8);
+  assert(g_conf()->mds_kill_export_at != 8);
 
   mds->hit_export_target(dest, num_exported_inodes+1);
 
@@ -1740,7 +1740,7 @@ void Migrator::handle_export_ack(MExportDirAck *m)
   decode(it->second.peer_imported, bp);
 
   it->second.state = EXPORT_LOGGINGFINISH;
-  assert (g_conf->mds_kill_export_at != 9);
+  assert (g_conf()->mds_kill_export_at != 9);
   set<CDir*> bounds;
   cache->get_subtree_bounds(dir, bounds);
 
@@ -1767,7 +1767,7 @@ void Migrator::handle_export_ack(MExportDirAck *m)
   // log export completion, then finish (unfreeze, trigger finish context, etc.)
   mds->mdlog->submit_entry(le, new C_MDS_ExportFinishLogged(this, dir));
   mds->mdlog->flush();
-  assert (g_conf->mds_kill_export_at != 10);
+  assert (g_conf()->mds_kill_export_at != 10);
   
   m->put();
 }
@@ -1906,7 +1906,7 @@ void Migrator::export_logged_finish(CDir *dir)
 
   // wait for notifyacks
   stat.state = EXPORT_NOTIFYING;
-  assert (g_conf->mds_kill_export_at != 11);
+  assert (g_conf()->mds_kill_export_at != 11);
   
   // no notifies to wait for?
   if (stat.notify_ack_waiting.empty()) {
@@ -1992,7 +1992,7 @@ void Migrator::export_finish(CDir *dir)
 {
   dout(5) << "export_finish " << *dir << dendl;
 
-  assert (g_conf->mds_kill_export_at != 12);
+  assert (g_conf()->mds_kill_export_at != 12);
   map<CDir*,export_state_t>::iterator it = export_state.find(dir);
   if (it == export_state.end()) {
     dout(7) << "target must have failed, not sending final commit message.  export succeeded anyway." << dendl;
@@ -2006,7 +2006,7 @@ void Migrator::export_finish(CDir *dir)
   } else {
     dout(7) << "not sending MExportDirFinish last, dest has failed" << dendl;
   }
-  assert(g_conf->mds_kill_export_at != 13);
+  assert(g_conf()->mds_kill_export_at != 13);
   
   // finish export (adjust local cache state)
   int num_dentries = 0;
@@ -2136,7 +2136,7 @@ void Migrator::handle_export_discover(MExportDirDiscover *m)
     return;
   }
 
-  assert (g_conf->mds_kill_import_at != 1);
+  assert (g_conf()->mds_kill_import_at != 1);
 
   // do we have it?
   CInode *in = cache->get_inode(m->get_dirfrag().ino);
@@ -2168,7 +2168,7 @@ void Migrator::handle_export_discover(MExportDirDiscover *m)
   dout(7) << " sending export_discover_ack on " << *in << dendl;
   mds->send_message_mds(new MExportDirDiscoverAck(df, m->get_tid()), p_state->peer);
   m->put();
-  assert (g_conf->mds_kill_import_at != 2);  
+  assert (g_conf()->mds_kill_import_at != 2);
 }
 
 void Migrator::import_reverse_discovering(dirfrag_t df)
@@ -2283,7 +2283,7 @@ void Migrator::handle_export_prep(MExportDirPrep *m)
     it->second.state = IMPORT_PREPPING;
     it->second.bound_ls = m->get_bounds();
     it->second.bystanders = m->get_bystanders();
-    assert(g_conf->mds_kill_import_at != 3);
+    assert(g_conf()->mds_kill_import_at != 3);
 
     // bystander list
     dout(7) << "bystanders are " << it->second.bystanders << dendl;
@@ -2424,7 +2424,7 @@ void Migrator::handle_export_prep(MExportDirPrep *m)
   dout(7) << " sending export_prep_ack on " << *dir << dendl;
   mds->send_message(new MExportDirPrepAck(dir->dirfrag(), success, m->get_tid()), m->get_connection());
 
-  assert(g_conf->mds_kill_import_at != 4);
+  assert(g_conf()->mds_kill_import_at != 4);
   // done 
   m->put();
 }
@@ -2450,7 +2450,7 @@ public:
 /* This function DOES put the passed message before returning*/
 void Migrator::handle_export_dir(MExportDir *m)
 {
-  assert (g_conf->mds_kill_import_at != 5);
+  assert (g_conf()->mds_kill_import_at != 5);
   CDir *dir = cache->get_dirfrag(m->dirfrag);
   assert(dir);
 
@@ -2523,7 +2523,7 @@ void Migrator::handle_export_dir(MExportDir *m)
 
   // note state
   it->second.state = IMPORT_LOGGINGSTART;
-  assert (g_conf->mds_kill_import_at != 6);
+  assert (g_conf()->mds_kill_import_at != 6);
 
   // log it
   mds->mdlog->submit_entry(le, onlogged);
@@ -2752,7 +2752,7 @@ void Migrator::import_notify_abort(CDir *dir, set<CDir*>& bounds)
     dout(7) << "no bystanders, finishing reverse now" << dendl;
     import_reverse_unfreeze(dir);
   } else {
-    assert (g_conf->mds_kill_import_at != 10);
+    assert (g_conf()->mds_kill_import_at != 10);
   }
 }
 
@@ -2809,7 +2809,7 @@ void Migrator::import_logged_start(dirfrag_t df, CDir *dir, mds_rank_t from,
   // note state
   it->second.state = IMPORT_ACKING;
 
-  assert (g_conf->mds_kill_import_at != 7);
+  assert (g_conf()->mds_kill_import_at != 7);
 
   // force open client sessions and finish cap import
   mds->server->finish_force_open_sessions(imported_session_map, false);
@@ -2835,7 +2835,7 @@ void Migrator::import_logged_start(dirfrag_t df, CDir *dir, mds_rank_t from,
   encode(imported_caps, ack->imported_caps);
 
   mds->send_message_mds(ack, from);
-  assert (g_conf->mds_kill_import_at != 8);
+  assert (g_conf()->mds_kill_import_at != 8);
 
   cache->show_subtrees();
 }
@@ -2870,7 +2870,7 @@ void Migrator::import_finish(CDir *dir, bool notify, bool last)
   }
 
   // log finish
-  assert(g_conf->mds_kill_import_at != 9);
+  assert(g_conf()->mds_kill_import_at != 9);
 
   if (it->second.state == IMPORT_ACKING) {
     for (map<CInode*, map<client_t,Capability::Export> >::iterator p = it->second.peer_exports.begin();
@@ -3438,7 +3438,7 @@ void Migrator::logged_import_caps(CInode *in,
   in->auth_unpin(this);
 }
 
-void Migrator::handle_conf_change(const md_config_t *conf,
+void Migrator::handle_conf_change(const md_config_tconf,
                                   const std::set <std::string> &changed,
                                   const MDSMap &mds_map)
 {
index 184ff3c79f6b2eb7014a69857359dee558351858..b0399b72b1b27ed7550b8cb170e91965faad0b58 100644 (file)
@@ -103,7 +103,7 @@ public:
 
   // -- cons --
   Migrator(MDSRank *m, MDCache *c) : mds(m), cache(c) {
-    inject_session_race = g_conf->get_val<bool>("mds_inject_migrator_session_race");
+    inject_session_race = g_conf().get_val<bool>("mds_inject_migrator_session_race");
   }
 
   void handle_conf_change(const md_config_t *conf,
index 0c1a722d3c4297b5f90e77755e3f02d19889f2a2..60012db79c448243b02190848cc6900bbd60b29c 100644 (file)
@@ -279,7 +279,7 @@ void PurgeQueue::push(const PurgeItem &pi, Context *completion)
           });
 
       timer.add_event_after(
-          g_conf->mds_purge_queue_busy_flush_period,
+         g_conf()->mds_purge_queue_busy_flush_period,
           delayed_flush);
     }
   }
@@ -301,7 +301,7 @@ uint32_t PurgeQueue::_calculate_ops(const PurgeItem &item) const
     const uint64_t num = (item.size > 0) ?
       Striper::get_num_objects(item.layout, item.size) : 1;
 
-    ops_required = std::min(num, g_conf->filer_max_purge_ops);
+    ops_required = std::min(num, g_conf()->filer_max_purge_ops);
 
     // Account for removing (or zeroing) backtrace
     ops_required += 1;
@@ -318,7 +318,7 @@ uint32_t PurgeQueue::_calculate_ops(const PurgeItem &item) const
 bool PurgeQueue::can_consume()
 {
   dout(20) << ops_in_flight << "/" << max_purge_ops << " ops, "
-           << in_flight.size() << "/" << g_conf->mds_max_purge_files
+           << in_flight.size() << "/" << g_conf()->mds_max_purge_files
            << " files" << dendl;
 
   if (in_flight.size() == 0 && cct->_conf->mds_max_purge_files > 0) {
@@ -590,7 +590,7 @@ void PurgeQueue::update_op_limit(const MDSMap &mds_map)
   }
 }
 
-void PurgeQueue::handle_conf_change(const md_config_t *conf,
+void PurgeQueue::handle_conf_change(const md_config_t *mconf,
                             const std::set <std::string> &changed,
                              const MDSMap &mds_map)
 {
@@ -598,8 +598,8 @@ void PurgeQueue::handle_conf_change(const md_config_t *conf,
       || changed.count("mds_max_purge_ops_per_pg")) {
     update_op_limit(mds_map);
   } else if (changed.count("mds_max_purge_files")) {
+    ConfigReader conf{mconf};
     Mutex::Locker l(lock);
-
     if (in_flight.empty()) {
       // We might have gone from zero to a finite limit, so
       // might need to kick off consume.
index 6956c6355e7c035441100baf5bb4c9b9baae28f3..0309bab9f0d772c181fb6f0156ce2ed473972d81 100644 (file)
@@ -64,7 +64,7 @@ void RecoveryQueue::advance()
           << file_recover_queue_front_size << " prioritized, "
           << file_recovering.size() << " recovering" << dendl;
 
-  while (file_recovering.size() < g_conf->mds_max_file_recover) {
+  while (file_recovering.size() < g_conf()->mds_max_file_recover) {
     if (!file_recover_queue_front.empty()) {
       CInode *in = file_recover_queue_front.front();
       in->item_recover_queue_front.remove_myself();
index 05fd1eb2f2c3b89f541448c14f87d2846c64ce55..0f34069c586e024d26e6f0f8b79b85264d8c51c3 100644 (file)
@@ -85,7 +85,7 @@ void ScrubStack::kick_off_scrubs()
               "progress and " << stack_size << " in the stack" << dendl;
   bool can_continue = true;
   elist<CInode*>::iterator i = inode_stack.begin();
-  while (g_conf->mds_max_scrub_ops_in_progress > scrubs_in_progress &&
+  while (g_conf()->mds_max_scrub_ops_in_progress > scrubs_in_progress &&
       can_continue && !i.end()) {
     CInode *curi = *i;
     ++i; // we have our reference, push iterator forward
@@ -161,7 +161,7 @@ void ScrubStack::scrub_dir_inode(CInode *in,
             << " scrubbing cdirs" << dendl;
 
     list<CDir*>::iterator i = scrubbing_cdirs.begin();
-    while (g_conf->mds_max_scrub_ops_in_progress > scrubs_in_progress) {
+    while (g_conf()->mds_max_scrub_ops_in_progress > scrubs_in_progress) {
       // select next CDir
       CDir *cur_dir = NULL;
       if (i != scrubbing_cdirs.end()) {
@@ -402,7 +402,7 @@ void ScrubStack::_validate_inode_done(CInode *in, int r,
                    << " (" << path << ")";
     } else {
       clog->warn() << "Scrub error on inode " << in->ino()
-                   << " (" << path << ") see " << g_conf->name
+                   << " (" << path << ") see " << g_conf()->name
                    << " log and `damage ls` output for details";
     }
 
index ca2fe29837d96878f7f695f7505a9f5de5d4ead2..5ea6c8ebe7155b089fb6af0e2d67d5267699a060 100644 (file)
@@ -780,7 +780,7 @@ void Server::find_idle_sessions()
     dout(10) << "autoclosing stale session " << session->info.inst << " last "
              << session->last_cap_renew << dendl;
 
-    if (g_conf->mds_session_blacklist_on_timeout) {
+    if (g_conf()->mds_session_blacklist_on_timeout) {
       std::stringstream ss;
       mds->evict_client(session->get_client().v, false, true,
                         ss, nullptr);
@@ -925,7 +925,7 @@ void Server::handle_client_reconnect(MClientReconnect *m)
     mds->clog->info() << "denied reconnect attempt (mds is "
        << ceph_mds_state_name(mds->get_state())
        << ") from " << m->get_source_inst()
-       << " after " << delay << " (allowed interval " << g_conf->mds_reconnect_timeout << ")";
+       << " after " << delay << " (allowed interval " << g_conf()->mds_reconnect_timeout << ")";
     deny = true;
   } else if (!session->is_open()) {
     dout(1) << " session is closed, ignoring reconnect, sending close" << dendl;
@@ -1050,7 +1050,7 @@ void Server::reconnect_tick()
   }
 
   utime_t reconnect_end = reconnect_start;
-  reconnect_end += g_conf->mds_reconnect_timeout;
+  reconnect_end += g_conf()->mds_reconnect_timeout;
   if (ceph_clock_now() >= reconnect_end &&
       !client_reconnect_gather.empty()) {
     dout(10) << "reconnect timed out" << dendl;
@@ -1067,10 +1067,10 @@ void Server::reconnect_tick()
       dout(1) << "reconnect gave up on " << session->info.inst << dendl;
 
       mds->clog->warn() << "evicting unresponsive client " << *session
-                        << ", after waiting " << g_conf->mds_reconnect_timeout
+                        << ", after waiting " << g_conf()->mds_reconnect_timeout
                         << " seconds during MDS startup";
 
-      if (g_conf->mds_session_blacklist_on_timeout) {
+      if (g_conf()->mds_session_blacklist_on_timeout) {
         std::stringstream ss;
         mds->evict_client(session->get_client().v, false, true, ss,
                           gather.new_sub());
@@ -1125,8 +1125,8 @@ void Server::recover_filelocks(CInode *in, bufferlist locks, int64_t client)
 void Server::recall_client_state(void)
 {
   /* try to recall at least 80% of all caps */
-  uint64_t max_caps_per_client = Capability::count() * g_conf->get_val<double>("mds_max_ratio_caps_per_client");
-  uint64_t min_caps_per_client = g_conf->get_val<uint64_t>("mds_min_caps_per_client");
+  uint64_t max_caps_per_client = Capability::count() * g_conf().get_val<double>("mds_max_ratio_caps_per_client");
+  uint64_t min_caps_per_client = g_conf().get_val<uint64_t>("mds_min_caps_per_client");
   if (max_caps_per_client < min_caps_per_client) {
     dout(0) << "max_caps_per_client " << max_caps_per_client
             << " < min_caps_per_client " << min_caps_per_client << dendl;
@@ -1339,7 +1339,7 @@ void Server::perf_gather_op_latency(const MClientRequest* req, utime_t lat)
 
 void Server::early_reply(MDRequestRef& mdr, CInode *tracei, CDentry *tracedn)
 {
-  if (!g_conf->mds_early_reply)
+  if (!g_conf()->mds_early_reply)
     return;
 
   if (mdr->no_early_reply) {
@@ -1558,9 +1558,9 @@ void Server::set_trace_dist(Session *session, MClientReply *reply,
                            MDRequestRef& mdr)
 {
   // skip doing this for debugging purposes?
-  if (g_conf->mds_inject_traceless_reply_probability &&
+  if (g_conf()->mds_inject_traceless_reply_probability &&
       mdr->ls && !mdr->o_trunc &&
-      (rand() % 10000 < g_conf->mds_inject_traceless_reply_probability * 10000.0)) {
+      (rand() % 10000 < g_conf()->mds_inject_traceless_reply_probability * 10000.0)) {
     dout(5) << "deliberately skipping trace for " << *reply << dendl;
     return;
   }
@@ -1718,11 +1718,11 @@ void Server::handle_client_request(MClientRequest *req)
       mdlog->get_current_segment()->touched_sessions.insert(session->info.inst.name);
 
       if (session->get_num_trim_requests_warnings() > 0 &&
-         session->get_num_completed_requests() * 2 < g_conf->mds_max_completed_requests)
+         session->get_num_completed_requests() * 2 < g_conf()->mds_max_completed_requests)
        session->reset_num_trim_requests_warnings();
     } else {
       if (session->get_num_completed_requests() >=
-         (g_conf->mds_max_completed_requests << session->get_num_trim_requests_warnings())) {
+         (g_conf()->mds_max_completed_requests << session->get_num_trim_requests_warnings())) {
        session->inc_num_trim_requests_warnings();
        stringstream ss;
        ss << "client." << session->get_client() << " does not advance its oldest_client_tid ("
@@ -2493,8 +2493,8 @@ bool Server::check_access(MDRequestRef& mdr, CInode *in, unsigned mask)
 bool Server::check_fragment_space(MDRequestRef &mdr, CDir *in)
 {
   const auto size = in->get_frag_size();
-  if (size >= g_conf->mds_bal_fragment_size_max) {
-    dout(10) << "fragment " << *in << " size exceeds " << g_conf->mds_bal_fragment_size_max << " (ENOSPC)" << dendl;
+  if (size >= g_conf()->mds_bal_fragment_size_max) {
+    dout(10) << "fragment " << *in << " size exceeds " << g_conf()->mds_bal_fragment_size_max << " (ENOSPC)" << dendl;
     respond_to_request(mdr, -ENOSPC);
     return false;
   }
@@ -2649,8 +2649,8 @@ CInode* Server::prepare_new_inode(MDRequestRef& mdr, CDir *dir, inodeno_t useino
   }
     
   if (allow_prealloc_inos &&
-      mdr->session->get_num_projected_prealloc_inos() < g_conf->mds_client_prealloc_inos / 2) {
-    int need = g_conf->mds_client_prealloc_inos - mdr->session->get_num_projected_prealloc_inos();
+      mdr->session->get_num_projected_prealloc_inos() < g_conf()->mds_client_prealloc_inos / 2) {
+    int need = g_conf()->mds_client_prealloc_inos - mdr->session->get_num_projected_prealloc_inos();
     mds->inotable->project_alloc_ids(mdr->prealloc_inos, need);
     assert(mdr->prealloc_inos.size());  // or else fix projected increment semantics
     mdr->session->pending_prealloc_inos.insert(mdr->prealloc_inos);
@@ -2666,7 +2666,7 @@ CInode* Server::prepare_new_inode(MDRequestRef& mdr, CDir *dir, inodeno_t useino
 
   memset(&in->inode.dir_layout, 0, sizeof(in->inode.dir_layout));
   if (in->inode.is_dir()) {
-    in->inode.dir_layout.dl_dir_hash = g_conf->mds_default_dir_hash;
+    in->inode.dir_layout.dl_dir_hash = g_conf()->mds_default_dir_hash;
   } else if (layout) {
     in->inode.layout = *layout;
   } else {
@@ -3545,7 +3545,7 @@ public:
 
     server->respond_to_request(mdr, 0);
 
-    assert(g_conf->mds_kill_openc_at != 1);
+    assert(g_conf()->mds_kill_openc_at != 1);
   }
 };
 
@@ -3827,7 +3827,7 @@ void Server::handle_client_readdir(MDRequestRef& mdr)
   unsigned max_bytes = req->head.args.readdir.max_bytes;
   if (!max_bytes)
     // make sure at least one item can be encoded
-    max_bytes = (512 << 10) + g_conf->mds_max_xattr_pairs_size;
+    max_bytes = (512 << 10) + g_conf()->mds_max_xattr_pairs_size;
 
   // start final blob
   bufferlist dirbl;
@@ -5027,7 +5027,7 @@ void Server::handle_client_setxattr(MDRequestRef& mdr)
     cur_xattrs_size += p.first.length() + p.second.length();
   }
 
-  if (((cur_xattrs_size + inc) > g_conf->mds_max_xattr_pairs_size)) {
+  if (((cur_xattrs_size + inc) > g_conf()->mds_max_xattr_pairs_size)) {
     dout(10) << "xattr kv pairs size too big. cur_xattrs_size " 
              << cur_xattrs_size << ", inc " << inc << dendl;
     respond_to_request(mdr, -ENOSPC);
@@ -5473,7 +5473,7 @@ void Server::handle_client_link(MDRequestRef& mdr)
   }
 
   // go!
-  assert(g_conf->mds_kill_link_at != 1);
+  assert(g_conf()->mds_kill_link_at != 1);
 
   // local or remote?
   if (targeti->is_auth()) 
@@ -5629,7 +5629,7 @@ void Server::_link_remote(MDRequestRef& mdr, bool inc, CDentry *dn, CInode *targ
   }
   dout(10) << " targeti auth has prepared nlink++/--" << dendl;
 
-  assert(g_conf->mds_kill_link_at != 2);
+  assert(g_conf()->mds_kill_link_at != 2);
 
   if (auto& desti_srnode = mdr->more()->desti_srnode) {
     delete desti_srnode;
@@ -5674,7 +5674,7 @@ void Server::_link_remote_finish(MDRequestRef& mdr, bool inc,
           << (inc ? "link ":"unlink ")
           << *dn << " to " << *targeti << dendl;
 
-  assert(g_conf->mds_kill_link_at != 3);
+  assert(g_conf()->mds_kill_link_at != 3);
 
   if (!mdr->more()->witnessed.empty())
     mdcache->logged_master_update(mdr->reqid);
@@ -5745,7 +5745,7 @@ void Server::handle_slave_link_prep(MDRequestRef& mdr)
           << " on " << mdr->slave_request->get_object_info() 
           << dendl;
 
-  assert(g_conf->mds_kill_link_at != 4);
+  assert(g_conf()->mds_kill_link_at != 4);
 
   CInode *targeti = mdcache->get_inode(mdr->slave_request->get_object_info().ino);
   assert(targeti);
@@ -5759,7 +5759,7 @@ void Server::handle_slave_link_prep(MDRequestRef& mdr)
   mdr->auth_pin(targeti);
 
   //ceph_abort();  // test hack: make sure master can handle a slave that fails to prepare...
-  assert(g_conf->mds_kill_link_at != 5);
+  assert(g_conf()->mds_kill_link_at != 5);
 
   // journal it
   mdr->ls = mdlog->get_current_segment();
@@ -5844,7 +5844,7 @@ void Server::_logged_slave_link(MDRequestRef& mdr, CInode *targeti, bool adjust_
   dout(10) << "_logged_slave_link " << *mdr
           << " " << *targeti << dendl;
 
-  assert(g_conf->mds_kill_link_at != 6);
+  assert(g_conf()->mds_kill_link_at != 6);
 
   // update the target
   targeti->pop_and_dirty_projected_inode(mdr->ls);
@@ -5888,7 +5888,7 @@ void Server::_commit_slave_link(MDRequestRef& mdr, int r, CInode *targeti)
           << " r=" << r
           << " " << *targeti << dendl;
 
-  assert(g_conf->mds_kill_link_at != 7);
+  assert(g_conf()->mds_kill_link_at != 7);
 
   if (r == 0) {
     // drop our pins, etc.
@@ -5909,7 +5909,7 @@ void Server::_committed_slave(MDRequestRef& mdr)
 {
   dout(10) << "_committed_slave " << *mdr << dendl;
 
-  assert(g_conf->mds_kill_link_at != 8);
+  assert(g_conf()->mds_kill_link_at != 8);
 
   MMDSSlaveRequest *req = new MMDSSlaveRequest(mdr->reqid, mdr->attempt, 
                                               MMDSSlaveRequest::OP_COMMITTED);
@@ -5941,7 +5941,7 @@ void Server::do_link_rollback(bufferlist &rbl, mds_rank_t master, MDRequestRef&
           << " ino " << rollback.ino
           << dendl;
 
-  assert(g_conf->mds_kill_link_at != 9);
+  assert(g_conf()->mds_kill_link_at != 9);
 
   mdcache->add_rollback(rollback.reqid, master); // need to finish this update before resolve finishes
   assert(mdr || mds->is_resolve());
@@ -6017,7 +6017,7 @@ void Server::_link_rollback_finish(MutationRef& mut, MDRequestRef& mdr,
 {
   dout(10) << "_link_rollback_finish" << dendl;
 
-  assert(g_conf->mds_kill_link_at != 10);
+  assert(g_conf()->mds_kill_link_at != 10);
 
   mut->apply();
 
@@ -6040,7 +6040,7 @@ void Server::handle_slave_link_prep_ack(MDRequestRef& mdr, MMDSSlaveRequest *m)
           << " " << *m << dendl;
   mds_rank_t from = mds_rank_t(m->get_source().num());
 
-  assert(g_conf->mds_kill_link_at != 11);
+  assert(g_conf()->mds_kill_link_at != 11);
 
   // note slave
   mdr->more()->slaves.insert(from);
@@ -7130,7 +7130,7 @@ void Server::handle_client_rename(MDRequestRef& mdr)
   }
   */
 
-  assert(g_conf->mds_kill_rename_at != 1);
+  assert(g_conf()->mds_kill_rename_at != 1);
 
   // -- open all srcdn inode frags, if any --
   // we need these open so that auth can properly delegate from inode to dirfrags
@@ -7252,9 +7252,9 @@ void Server::handle_client_rename(MDRequestRef& mdr)
 
   // test hack: bail after slave does prepare, so we can verify it's _live_ rollback.
   if (!mdr->more()->slaves.empty() && !srci->is_dir())
-    assert(g_conf->mds_kill_rename_at != 3);
+    assert(g_conf()->mds_kill_rename_at != 3);
   if (!mdr->more()->slaves.empty() && srci->is_dir())
-    assert(g_conf->mds_kill_rename_at != 4);
+    assert(g_conf()->mds_kill_rename_at != 4);
 
   // -- declare now --
   mdr->set_mds_stamp(ceph_clock_now());
@@ -7304,9 +7304,9 @@ void Server::_rename_finish(MDRequestRef& mdr, CDentry *srcdn, CDentry *destdn,
 
   // test hack: test slave commit
   if (!mdr->more()->slaves.empty() && !in->is_dir())
-    assert(g_conf->mds_kill_rename_at != 5);
+    assert(g_conf()->mds_kill_rename_at != 5);
   if (!mdr->more()->slaves.empty() && in->is_dir())
-    assert(g_conf->mds_kill_rename_at != 6);
+    assert(g_conf()->mds_kill_rename_at != 6);
   
   // bump popularity
   mds->balancer->hit_dir(srcdn->get_dir(), META_POP_IWR);
@@ -7315,7 +7315,7 @@ void Server::_rename_finish(MDRequestRef& mdr, CDentry *srcdn, CDentry *destdn,
 
   // did we import srci?  if so, explicitly ack that import that, before we unlock and reply.
 
-  assert(g_conf->mds_kill_rename_at != 7);
+  assert(g_conf()->mds_kill_rename_at != 7);
 
   // reply
   respond_to_request(mdr, 0);
@@ -8978,7 +8978,7 @@ void Server::handle_client_lssnap(MDRequestRef& mdr)
   int max_bytes = req->head.args.readdir.max_bytes;
   if (!max_bytes)
     // make sure at least one item can be encoded
-    max_bytes = (512 << 10) + g_conf->mds_max_xattr_pairs_size;
+    max_bytes = (512 << 10) + g_conf()->mds_max_xattr_pairs_size;
 
   __u64 last_snapid = 0;
   string offset_str = req->get_path2();
@@ -9087,7 +9087,7 @@ void Server::handle_client_mksnap(MDRequestRef& mdr)
   
   std::string_view snapname = req->get_filepath().last_dentry();
 
-  if (mdr->client_request->get_caller_uid() < g_conf->mds_snap_min_uid || mdr->client_request->get_caller_uid() > g_conf->mds_snap_max_uid) {
+  if (mdr->client_request->get_caller_uid() < g_conf()->mds_snap_min_uid || mdr->client_request->get_caller_uid() > g_conf()->mds_snap_max_uid) {
     dout(20) << "mksnap " << snapname << " on " << *diri << " denied to uid " << mdr->client_request->get_caller_uid() << dendl;
     respond_to_request(mdr, -EPERM);
     return;
@@ -9235,7 +9235,7 @@ void Server::handle_client_rmsnap(MDRequestRef& mdr)
 
   std::string_view snapname = req->get_filepath().last_dentry();
 
-  if (mdr->client_request->get_caller_uid() < g_conf->mds_snap_min_uid || mdr->client_request->get_caller_uid() > g_conf->mds_snap_max_uid) {
+  if (mdr->client_request->get_caller_uid() < g_conf()->mds_snap_min_uid || mdr->client_request->get_caller_uid() > g_conf()->mds_snap_max_uid) {
     dout(20) << "rmsnap " << snapname << " on " << *diri << " denied to uid " << mdr->client_request->get_caller_uid() << dendl;
     respond_to_request(mdr, -EPERM);
     return;
@@ -9371,8 +9371,8 @@ void Server::handle_client_renamesnap(MDRequestRef& mdr)
     return;
   }
 
-  if (mdr->client_request->get_caller_uid() < g_conf->mds_snap_min_uid ||
-      mdr->client_request->get_caller_uid() > g_conf->mds_snap_max_uid) {
+  if (mdr->client_request->get_caller_uid() < g_conf()->mds_snap_min_uid ||
+      mdr->client_request->get_caller_uid() > g_conf()->mds_snap_max_uid) {
     respond_to_request(mdr, -EPERM);
     return;
   }
index 43464a92979726ab09f55d84476d4e26054a10a9..b1c874e89a5e17c1a0065c17ce2c9fd17794b0c3 100644 (file)
@@ -222,7 +222,7 @@ void SessionMap::_load_finish(
     object_locator_t oloc(mds->mdsmap->get_metadata_pool());
     C_IO_SM_Load *c = new C_IO_SM_Load(this, false);
     ObjectOperation op;
-    op.omap_get_vals(last_key, "", g_conf->mds_sessionmap_keys_per_op,
+    op.omap_get_vals(last_key, "", g_conf()->mds_sessionmap_keys_per_op,
                     &c->session_vals, &c->more_session_vals, &c->values_r);
     mds->objecter->read(oid, oloc, op, CEPH_NOSNAP, NULL, 0,
         new C_OnFinisher(c, mds->finisher));
@@ -265,7 +265,7 @@ void SessionMap::load(MDSInternalContextBase *onload)
 
   ObjectOperation op;
   op.omap_get_header(&c->header_bl, &c->header_r);
-  op.omap_get_vals("", "", g_conf->mds_sessionmap_keys_per_op,
+  op.omap_get_vals("", "", g_conf()->mds_sessionmap_keys_per_op,
                   &c->session_vals, &c->more_session_vals, &c->values_r);
 
   mds->objecter->read(oid, oloc, op, CEPH_NOSNAP, NULL, 0, new C_OnFinisher(c, mds->finisher));
@@ -631,7 +631,7 @@ void SessionMap::_mark_dirty(Session *s)
   if (dirty_sessions.count(s->info.inst.name))
     return;
 
-  if (dirty_sessions.size() >= g_conf->mds_sessionmap_keys_per_op) {
+  if (dirty_sessions.size() >= g_conf()->mds_sessionmap_keys_per_op) {
     // Pre-empt the usual save() call from journal segment trim, in
     // order to avoid building up an oversized OMAP update operation
     // from too many sessions modified at once
@@ -736,7 +736,7 @@ void SessionMap::save_if_dirty(const std::set<entity_name_t> &tgt_sessions,
   dout(4) << __func__ << ": writing " << write_sessions.size() << dendl;
 
   // Batch writes into mds_sessionmap_keys_per_op
-  const uint32_t kpo = g_conf->mds_sessionmap_keys_per_op;
+  const uint32_t kpo = g_conf()->mds_sessionmap_keys_per_op;
   map<string, bufferlist> to_set;
   for (uint32_t i = 0; i < write_sessions.size(); ++i) {
     const entity_name_t &session_id = write_sessions[i];
index 5fc864b955806ec6595edf3d47b3dc4939158af7..585f25a262c5a5aa7bd10a13b5bd68538a6a92a1 100644 (file)
@@ -67,7 +67,7 @@ void LogSegment::try_to_expire(MDSRank *mds, MDSGatherBuilder &gather_bld, int o
 
   dout(6) << "LogSegment(" << seq << "/" << offset << ").try_to_expire" << dendl;
 
-  assert(g_conf->mds_kill_journal_expire_at != 1);
+  assert(g_conf()->mds_kill_journal_expire_at != 1);
 
   // commit dirs
   for (elist<CDir*>::iterator p = new_dirfrags.begin(); !p.end(); ++p) {
@@ -143,7 +143,7 @@ void LogSegment::try_to_expire(MDSRank *mds, MDSGatherBuilder &gather_bld, int o
     mds->locker->scatter_nudge(&in->nestlock, gather_bld.new_sub());
   }
 
-  assert(g_conf->mds_kill_journal_expire_at != 2);
+  assert(g_conf()->mds_kill_journal_expire_at != 2);
 
   // open files and snap inodes 
   if (!open_files.empty()) {
@@ -176,7 +176,7 @@ void LogSegment::try_to_expire(MDSRank *mds, MDSGatherBuilder &gather_bld, int o
     }
   }
 
-  assert(g_conf->mds_kill_journal_expire_at != 3);
+  assert(g_conf()->mds_kill_journal_expire_at != 3);
 
   // backtraces to be stored/updated
   for (elist<CInode*>::iterator p = dirty_parent_inodes.begin(); !p.end(); ++p) {
@@ -191,7 +191,7 @@ void LogSegment::try_to_expire(MDSRank *mds, MDSGatherBuilder &gather_bld, int o
     }
   }
 
-  assert(g_conf->mds_kill_journal_expire_at != 4);
+  assert(g_conf()->mds_kill_journal_expire_at != 4);
 
   // slave updates
   for (elist<MDSlaveUpdate*>::iterator p = slave_updates.begin(member_offset(MDSlaveUpdate,
@@ -266,7 +266,7 @@ void LogSegment::try_to_expire(MDSRank *mds, MDSGatherBuilder &gather_bld, int o
     dout(6) << "LogSegment(" << seq << "/" << offset << ").try_to_expire waiting" << dendl;
     mds->mdlog->flush();
   } else {
-    assert(g_conf->mds_kill_journal_expire_at != 5);
+    assert(g_conf()->mds_kill_journal_expire_at != 5);
     dout(6) << "LogSegment(" << seq << "/" << offset << ").try_to_expire success" << dendl;
   }
 }
@@ -1129,7 +1129,7 @@ void EMetaBlob::replay(MDSRank *mds, LogSegment *logseg, MDSlaveUpdate *slaveup)
 
   assert(logseg);
 
-  assert(g_conf->mds_kill_journal_replay_at != 1);
+  assert(g_conf()->mds_kill_journal_replay_at != 1);
 
   for (list<std::shared_ptr<fullbit> >::iterator p = roots.begin(); p != roots.end(); ++p) {
     CInode *in = mds->mdcache->get_inode((*p)->inode.ino);
@@ -1324,7 +1324,7 @@ void EMetaBlob::replay(MDSRank *mds, LogSegment *logseg, MDSlaveUpdate *slaveup)
        in->state_set(CInode::STATE_AUTH);
       else
        in->state_clear(CInode::STATE_AUTH);
-      assert(g_conf->mds_kill_journal_replay_at != 2);
+      assert(g_conf()->mds_kill_journal_replay_at != 2);
     }
 
     // remote dentries
@@ -1398,7 +1398,7 @@ void EMetaBlob::replay(MDSRank *mds, LogSegment *logseg, MDSlaveUpdate *slaveup)
     }
   }
 
-  assert(g_conf->mds_kill_journal_replay_at != 3);
+  assert(g_conf()->mds_kill_journal_replay_at != 3);
 
   if (renamed_dirino) {
     if (renamed_diri) {
@@ -1569,7 +1569,7 @@ void EMetaBlob::replay(MDSRank *mds, LogSegment *logseg, MDSlaveUpdate *slaveup)
     } else {
       mds->clog->error() << "journal replay sessionmap v " << sessionmapv
                        << " -(1|2) > table " << mds->sessionmap.get_version();
-      assert(g_conf->mds_wipe_sessions);
+      assert(g_conf()->mds_wipe_sessions);
       mds->sessionmap.wipe();
       mds->sessionmap.set_version(sessionmapv);
     }
@@ -1652,7 +1652,7 @@ void EMetaBlob::replay(MDSRank *mds, LogSegment *logseg, MDSlaveUpdate *slaveup)
   // update segment
   update_segment(logseg);
 
-  assert(g_conf->mds_kill_journal_replay_at != 4);
+  assert(g_conf()->mds_kill_journal_replay_at != 4);
 }
 
 // -----------------------
@@ -2674,7 +2674,7 @@ void ESubtreeMap::replay(MDSRank *mds)
       dout(0) << "journal subtrees: " << subtrees << dendl;
       dout(0) << "journal ambig_subtrees: " << ambiguous_subtrees << dendl;
       mds->mdcache->show_subtrees();
-      assert(!g_conf->mds_debug_subtrees || errors == 0);
+      assert(!g_conf()->mds_debug_subtrees || errors == 0);
     }
     return;
   }
@@ -2757,7 +2757,7 @@ void EFragment::replay(MDSRank *mds)
   }
 
   metablob.replay(mds, _segment);
-  if (in && g_conf->mds_debug_frag)
+  if (in && g_conf()->mds_debug_frag)
     in->verify_dirfrags();
 }
 
index 30bab738f0a344d6daea301bcf101196e708301b..1c127cacd3cf57027ce5cbb1da5a18d78dd5f7df 100644 (file)
@@ -191,9 +191,9 @@ PyObject *ActivePyModules::get_python(const std::string &what)
   } else if (what.substr(0, 6) == "config") {
     PyFormatter f;
     if (what == "config_options") {
-      g_conf->config_options(&f);  
+      g_conf().config_options(&f);
     } else if (what == "config") {
-      g_conf->show_config(&f);
+      g_conf().show_config(&f);
     }
     return f.get();
   } else if (what == "mon_map") {
index 64a703136d0b868ea3652f6d7a46b874248a54d3..1f1f8cc5f17aa9613cdd5ac4bcfd18d2716bc06f 100644 (file)
@@ -344,7 +344,7 @@ ceph_get_server(BaseMgrModule *self, PyObject *args)
 static PyObject*
 ceph_get_mgr_id(BaseMgrModule *self, PyObject *args)
 {
-  return PyString_FromString(g_conf->name.get_id().c_str());
+  return PyString_FromString(g_conf()->name.get_id().c_str());
 }
 
 static PyObject*
index 12182f360ccb8910fcca452aacaca7a634560639..d4ad2b740110717101aad1ff115636ce835a4cb7 100644 (file)
@@ -57,7 +57,7 @@ BaseMgrStandbyModule_init(BaseMgrStandbyModule *self, PyObject *args, PyObject *
 static PyObject*
 ceph_get_mgr_id(BaseMgrStandbyModule *self, PyObject *args)
 {
-  return PyString_FromString(g_conf->name.get_id().c_str());
+  return PyString_FromString(g_conf()->name.get_id().c_str());
 }
 
 static PyObject*
index d5a25d99fc40e89384d325e51ad083ec075414cb..63eca2f6b6d56d4222b38b702d545d9fd83c4264 100644 (file)
@@ -52,21 +52,21 @@ DaemonServer::DaemonServer(MonClient *monc_,
                           LogChannelRef audit_clog_)
     : Dispatcher(g_ceph_context),
       client_byte_throttler(new Throttle(g_ceph_context, "mgr_client_bytes",
-                                        g_conf->get_val<Option::size_t>("mgr_client_bytes"))),
+                                        g_conf().get_val<Option::size_t>("mgr_client_bytes"))),
       client_msg_throttler(new Throttle(g_ceph_context, "mgr_client_messages",
-                                       g_conf->get_val<uint64_t>("mgr_client_messages"))),
+                                       g_conf().get_val<uint64_t>("mgr_client_messages"))),
       osd_byte_throttler(new Throttle(g_ceph_context, "mgr_osd_bytes",
-                                     g_conf->get_val<Option::size_t>("mgr_osd_bytes"))),
+                                     g_conf().get_val<Option::size_t>("mgr_osd_bytes"))),
       osd_msg_throttler(new Throttle(g_ceph_context, "mgr_osd_messsages",
-                                    g_conf->get_val<uint64_t>("mgr_osd_messages"))),
+                                    g_conf().get_val<uint64_t>("mgr_osd_messages"))),
       mds_byte_throttler(new Throttle(g_ceph_context, "mgr_mds_bytes",
-                                     g_conf->get_val<Option::size_t>("mgr_mds_bytes"))),
+                                     g_conf().get_val<Option::size_t>("mgr_mds_bytes"))),
       mds_msg_throttler(new Throttle(g_ceph_context, "mgr_mds_messsages",
-                                    g_conf->get_val<uint64_t>("mgr_mds_messages"))),
+                                    g_conf().get_val<uint64_t>("mgr_mds_messages"))),
       mon_byte_throttler(new Throttle(g_ceph_context, "mgr_mon_bytes",
-                                     g_conf->get_val<Option::size_t>("mgr_mon_bytes"))),
+                                     g_conf().get_val<Option::size_t>("mgr_mon_bytes"))),
       mon_msg_throttler(new Throttle(g_ceph_context, "mgr_mon_messsages",
-                                    g_conf->get_val<uint64_t>("mgr_mon_messages"))),
+                                    g_conf().get_val<uint64_t>("mgr_mon_messages"))),
       msgr(nullptr),
       monc(monc_),
       finisher(finisher_),
@@ -76,29 +76,29 @@ DaemonServer::DaemonServer(MonClient *monc_,
       clog(clog_),
       audit_clog(audit_clog_),
       auth_cluster_registry(g_ceph_context,
-                    g_conf->auth_supported.empty() ?
-                      g_conf->auth_cluster_required :
-                      g_conf->auth_supported),
+                    g_conf()->auth_supported.empty() ?
+                      g_conf()->auth_cluster_required :
+                      g_conf()->auth_supported),
       auth_service_registry(g_ceph_context,
-                   g_conf->auth_supported.empty() ?
-                      g_conf->auth_service_required :
-                      g_conf->auth_supported),
+                   g_conf()->auth_supported.empty() ?
+                      g_conf()->auth_service_required :
+                      g_conf()->auth_supported),
       lock("DaemonServer"),
       pgmap_ready(false)
 {
-  g_conf->add_observer(this);
+  g_conf().add_observer(this);
 }
 
 DaemonServer::~DaemonServer() {
   delete msgr;
-  g_conf->remove_observer(this);
+  g_conf().remove_observer(this);
 }
 
 int DaemonServer::init(uint64_t gid, entity_addrvec_t client_addrs)
 {
   // Initialize Messenger
-  std::string public_msgr_type = g_conf->ms_public_type.empty() ?
-    g_conf->get_val<std::string>("ms_type") : g_conf->ms_public_type;
+  std::string public_msgr_type = g_conf()->ms_public_type.empty() ?
+    g_conf().get_val<std::string>("ms_type") : g_conf()->ms_public_type;
   msgr = Messenger::create(g_ceph_context, public_msgr_type,
                           entity_name_t::MGR(gid),
                           "mgr",
@@ -887,9 +887,9 @@ bool DaemonServer::handle_command(MCommand *m)
     std::string val;
     cmd_getval(cct, cmdctx->cmdmap, "key", key);
     cmd_getval(cct, cmdctx->cmdmap, "value", val);
-    r = cct->_conf->set_val(key, val, &ss);
+    r = cct->_conf.set_val(key, val, &ss);
     if (r == 0) {
-      cct->_conf->apply_changes(nullptr);
+      cct->_conf.apply_changes(nullptr);
     }
     cmdctx->reply(0, ss);
     return true;
@@ -1073,14 +1073,14 @@ bool DaemonServer::handle_command(MCommand *m)
       return true;
     }
     
-    double max_change = g_conf->get_val<double>("mon_reweight_max_change");
+    double max_change = g_conf().get_val<double>("mon_reweight_max_change");
     cmd_getval(g_ceph_context, cmdctx->cmdmap, "max_change", max_change);
     if (max_change <= 0.0) {
       ss << "max_change " << max_change << " must be positive";
       cmdctx->reply(-EINVAL, ss);
       return true;
     }
-    int64_t max_osds = g_conf->get_val<int64_t>("mon_reweight_max_osds");
+    int64_t max_osds = g_conf().get_val<int64_t>("mon_reweight_max_osds");
     cmd_getval(g_ceph_context, cmdctx->cmdmap, "max_osds", max_osds);
     if (max_osds <= 0) {
       ss << "max_osds " << max_osds << " must be positive";
@@ -2002,7 +2002,7 @@ bool DaemonServer::handle_command(MCommand *m)
 void DaemonServer::_prune_pending_service_map()
 {
   utime_t cutoff = ceph_clock_now();
-  cutoff -= g_conf->get_val<double>("mgr_service_beacon_grace");
+  cutoff -= g_conf().get_val<double>("mgr_service_beacon_grace");
   auto p = pending_service_map.services.begin();
   while (p != pending_service_map.services.end()) {
     auto q = p->second.daemons.begin();
@@ -2042,7 +2042,7 @@ void DaemonServer::_prune_pending_service_map()
 void DaemonServer::send_report()
 {
   if (!pgmap_ready) {
-    if (ceph_clock_now() - started_at > g_conf->get_val<int64_t>("mgr_stats_period") * 4.0) {
+    if (ceph_clock_now() - started_at > g_conf().get_val<int64_t>("mgr_stats_period") * 4.0) {
       pgmap_ready = true;
       reported_osds.clear();
       dout(1) << "Giving up on OSDs that haven't reported yet, sending "
@@ -2232,8 +2232,8 @@ void DaemonServer::_send_configure(ConnectionRef c)
   assert(lock.is_locked_by_me());
 
   auto configure = new MMgrConfigure();
-  configure->stats_period = g_conf->get_val<int64_t>("mgr_stats_period");
-  configure->stats_threshold = g_conf->get_val<int64_t>("mgr_stats_threshold");
+  configure->stats_period = g_conf().get_val<int64_t>("mgr_stats_period");
+  configure->stats_threshold = g_conf().get_val<int64_t>("mgr_stats_threshold");
   c->send_message(configure);
 }
 
index 377e208626737105dc6c71a21df5b2b82dfffdfb..f1a10f0bd1713a8576273e942517128515320157 100644 (file)
@@ -69,7 +69,7 @@ void MgrClient::shutdown()
     m->service_name = service_name;
     session->con->send_message(m);
     utime_t timeout;
-    timeout.set_from_double(cct->_conf->get_val<double>(
+    timeout.set_from_double(cct->_conf.get_val<double>(
                              "mgr_client_service_daemon_unregister_timeout"));
     shutdown_cond.WaitInterval(lock, timeout);
   }
@@ -129,7 +129,7 @@ void MgrClient::reconnect()
   if (last_connect_attempt != utime_t()) {
     utime_t now = ceph_clock_now();
     utime_t when = last_connect_attempt;
-    when += cct->_conf->get_val<double>("mgr_connect_retry_interval");
+    when += cct->_conf.get_val<double>("mgr_connect_retry_interval");
     if (now < when) {
       if (!connect_retry_callback) {
        connect_retry_callback = timer.add_event_at(
@@ -190,8 +190,8 @@ void MgrClient::_send_open()
       open->service_daemon = service_daemon;
       open->daemon_metadata = daemon_metadata;
     }
-    cct->_conf->get_config_bl(0, &open->config_bl, &last_config_bl_version);
-    cct->_conf->get_defaults_bl(&open->config_defaults_bl);
+    cct->_conf.get_config_bl(0, &open->config_bl, &last_config_bl_version);
+    cct->_conf.get_defaults_bl(&open->config_defaults_bl);
     session->con->send_message(open);
   }
 }
@@ -347,7 +347,7 @@ void MgrClient::_send_report()
 
   report->daemon_health_metrics = std::move(daemon_health_metrics);
 
-  cct->_conf->get_config_bl(last_config_bl_version, &report->config_bl,
+  cct->_conf.get_config_bl(last_config_bl_version, &report->config_bl,
                            &last_config_bl_version);
 
   session->con->send_message(report);
index 22a7de3febe785e8f784c8e141e6596ab31b7e96..57289b31f64e5d05d533c17beb3fe6e2550cf7e2 100644 (file)
@@ -41,7 +41,7 @@ MgrStandby::MgrStandby(int argc, const char **argv) :
   monc{g_ceph_context},
   client_messenger(Messenger::create(
                     g_ceph_context,
-                    cct->_conf->get_val<std::string>("ms_type"),
+                    cct->_conf.get_val<std::string>("ms_type"),
                     entity_name_t::MGR(),
                     "mgr",
                     getpid(),
@@ -208,7 +208,7 @@ void MgrStandby::send_beacon()
 
   MMgrBeacon *m = new MMgrBeacon(monc.get_fsid(),
                                 monc.get_global_id(),
-                                 g_conf->name.get_id(),
+                                 g_conf()->name.get_id(),
                                  addrs,
                                  available,
                                 std::move(module_info),
@@ -243,7 +243,7 @@ void MgrStandby::tick()
   }
 
   timer.add_event_after(
-      g_conf->get_val<std::chrono::seconds>("mgr_tick_period").count(),
+      g_conf().get_val<std::chrono::seconds>("mgr_tick_period").count(),
       new FunctionContext([this](int r){
           tick();
       }
@@ -396,7 +396,7 @@ void MgrStandby::handle_mgr_map(MMgrMap* mmap)
     derr << "I was active but no longer am" << dendl;
     respawn();
   } else {
-    if (map.active_gid != 0 && map.active_name != g_conf->name.get_id()) {
+    if (map.active_gid != 0 && map.active_name != g_conf()->name.get_id()) {
       // I am the standby and someone else is active, start modules
       // in standby mode to do redirects if needed
       if (!py_module_registry.is_standby_running()) {
index 65656d0a60a864ced379399089e14d73f622f0c4..e34752f3f0c5daa4d06be2bc375b7ff6fcd04ae1 100644 (file)
@@ -337,7 +337,7 @@ int PyModule::load(PyThreadState *pMainThreadState)
 #endif
       // Configure sys.path to include mgr_module_path
       string paths = (":" + get_site_packages() +
-                     ":" + g_conf->get_val<std::string>("mgr_module_path"));
+                     ":" + g_conf().get_val<std::string>("mgr_module_path"));
 #if PY_MAJOR_VERSION >= 3
       wstring sys_path(Py_GetPath() + wstring(begin(paths), end(paths)));
       PySys_SetPath(const_cast<wchar_t*>(sys_path.c_str()));
index 036d824717979256c9a8ee50a664875164cb180e..ebb01a5c5b269522252d0b22349f3c2fe1cf3c16 100644 (file)
@@ -46,7 +46,7 @@ void PyModuleRegistry::init()
   Py_SetProgramName(const_cast<char*>(PYTHON_EXECUTABLE));
 #endif
   // Add more modules
-  if (g_conf->get_val<bool>("daemonize")) {
+  if (g_conf().get_val<bool>("daemonize")) {
     PyImport_AppendInittab("ceph_logger", PyModule::init_ceph_logger);
   }
   PyImport_AppendInittab("ceph_module", PyModule::init_ceph_module);
@@ -257,7 +257,7 @@ void PyModuleRegistry::shutdown()
 
 std::set<std::string> PyModuleRegistry::probe_modules() const
 {
-  std::string path = g_conf->get_val<std::string>("mgr_module_path");
+  std::string path = g_conf().get_val<std::string>("mgr_module_path");
 
   DIR *dir = opendir(path.c_str());
   if (!dir) {
index 88197b6d67689a7104e21290fa78b4faa24d742c..b0324d488d68e792bf5c6461d2f673da2249fc53 100644 (file)
@@ -60,7 +60,7 @@ int PyModuleRunner::serve()
     std::string exc_msg = peek_pyerror();
     
     clog->error() << "Unhandled exception from module '" << get_name()
-                  << "' while running on mgr." << g_conf->name.get_id()
+                  << "' while running on mgr." << g_conf()->name.get_id()
                   << ": " << exc_msg;
     derr << get_name() << ".serve:" << dendl;
     derr << handle_pyerror() << dendl;
index aeeed1b217f12ea68cc11a87c68582076eeaea18..147e4d69f81b828c85b5709cd6b0a3961bc53fd6 100644 (file)
@@ -288,7 +288,7 @@ void AuthMonitor::increase_max_global_id()
 {
   assert(mon->is_leader());
 
-  max_global_id += g_conf->mon_globalid_prealloc;
+  max_global_id += g_conf()->mon_globalid_prealloc;
   dout(10) << "increasing max_global_id to " << max_global_id << dendl;
   Incremental inc;
   inc.inc_type = GLOBAL_ID;
@@ -350,7 +350,7 @@ void AuthMonitor::encode_full(MonitorDBStore::TransactionRef t)
 
 version_t AuthMonitor::get_trim_to() const
 {
-  unsigned max = g_conf->paxos_max_join_drift * 2;
+  unsigned max = g_conf()->paxos_max_join_drift * 2;
   version_t version = get_last_committed();
   if (mon->is_leader() && (version > max))
     return version - max;
@@ -419,8 +419,8 @@ uint64_t AuthMonitor::assign_global_id(MonOpRequestRef op, bool should_increase_
 
   // bump the max?
   while (mon->is_leader() &&
-        (max_global_id < g_conf->mon_globalid_prealloc ||
-         next_global_id >= max_global_id - g_conf->mon_globalid_prealloc / 2)) {
+        (max_global_id < g_conf()->mon_globalid_prealloc ||
+         next_global_id >= max_global_id - g_conf()->mon_globalid_prealloc / 2)) {
     increase_max_global_id();
   }
 
@@ -477,8 +477,8 @@ bool AuthMonitor::prep_auth(MonOpRequestRef op, bool paxos_writable)
          entity_name.get_type() == CEPH_ENTITY_TYPE_OSD ||
          entity_name.get_type() == CEPH_ENTITY_TYPE_MDS ||
          entity_name.get_type() == CEPH_ENTITY_TYPE_MGR) {
-       if (g_conf->cephx_cluster_require_signatures ||
-           g_conf->cephx_require_signatures) {
+       if (g_conf()->cephx_cluster_require_signatures ||
+           g_conf()->cephx_require_signatures) {
          dout(1) << m->get_source_inst()
                   << " supports cephx but not signatures and"
                   << " 'cephx [cluster] require signatures = true';"
@@ -486,8 +486,8 @@ bool AuthMonitor::prep_auth(MonOpRequestRef op, bool paxos_writable)
          supported.erase(CEPH_AUTH_CEPHX);
        }
       } else {
-       if (g_conf->cephx_service_require_signatures ||
-           g_conf->cephx_require_signatures) {
+       if (g_conf()->cephx_service_require_signatures ||
+           g_conf()->cephx_require_signatures) {
          dout(1) << m->get_source_inst()
                   << " supports cephx but not signatures and"
                   << " 'cephx [service] require signatures = true';"
@@ -500,8 +500,8 @@ bool AuthMonitor::prep_auth(MonOpRequestRef op, bool paxos_writable)
          entity_name.get_type() == CEPH_ENTITY_TYPE_OSD ||
          entity_name.get_type() == CEPH_ENTITY_TYPE_MDS ||
          entity_name.get_type() == CEPH_ENTITY_TYPE_MGR) {
-       if (g_conf->cephx_cluster_require_version >= 2 ||
-           g_conf->cephx_require_version >= 2) {
+       if (g_conf()->cephx_cluster_require_version >= 2 ||
+           g_conf()->cephx_require_version >= 2) {
          dout(1) << m->get_source_inst()
                   << " supports cephx but not v2 and"
                   << " 'cephx [cluster] require version >= 2';"
@@ -509,8 +509,8 @@ bool AuthMonitor::prep_auth(MonOpRequestRef op, bool paxos_writable)
          supported.erase(CEPH_AUTH_CEPHX);
        }
       } else {
-       if (g_conf->cephx_service_require_version >= 2 ||
-           g_conf->cephx_require_version >= 2) {
+       if (g_conf()->cephx_service_require_version >= 2 ||
+           g_conf()->cephx_require_version >= 2) {
          dout(1) << m->get_source_inst()
                   << " supports cephx but not v2 and"
                   << " 'cephx [service] require version >= 2';"
index 6dbdea91664eaa8ce3f0c731300a638786391594..b083628d5c66972ab65da3801757f2089622b5bd 100644 (file)
@@ -229,10 +229,10 @@ bool ConfigKeyService::service_dispatch(MonOpRequestRef op)
       // they specified '-i <file>'
       data = cmd->get_data();
     }
-    if (data.length() > (size_t) g_conf->mon_config_key_max_entry_size) {
+    if (data.length() > (size_t) g_conf()->mon_config_key_max_entry_size) {
       ret = -EFBIG; // File too large
       ss << "error: entry size limited to "
-         << g_conf->mon_config_key_max_entry_size << " bytes. "
+         << g_conf()->mon_config_key_max_entry_size << " bytes. "
          << "Use 'mon config key max entry size' to manually adjust";
       goto out;
     }
index 972378d1155cb45abde7c03e2dc1198ac688bde0..1f5cfb25d8e5a834cac765998a93f2b344559e9d 100644 (file)
@@ -148,7 +148,7 @@ bool ConfigMonitor::preprocess_command(MonOpRequestRef op)
   if (prefix == "config help") {
     string name;
     cmd_getval(g_ceph_context, cmdmap, "key", name);
-    const Option *opt = g_conf->find_option(name);
+    const Option *opt = g_conf().find_option(name);
     if (!opt) {
       ss << "configuration option '" << name << "' not recognized";
       err = -ENOENT;
@@ -254,7 +254,7 @@ bool ConfigMonitor::preprocess_command(MonOpRequestRef op)
        odata.append("\n");
        goto reply;
       }
-      const Option *opt = g_conf->find_option(name);
+      const Option *opt = g_conf().find_option(name);
       if (!opt) {
        err = -ENOENT;
        goto reply;
@@ -399,7 +399,7 @@ bool ConfigMonitor::prepare_command(MonOpRequestRef op)
 
     if (prefix == "config set") {
       if (name.substr(0, 4) != "mgr/") {
-       const Option *opt = g_conf->find_option(name);
+       const Option *opt = g_conf().find_option(name);
        if (!opt) {
          ss << "unrecognized config option '" << name << "'";
          err = -EINVAL;
@@ -500,7 +500,7 @@ bool ConfigMonitor::prepare_command(MonOpRequestRef op)
          continue;
        }
        // a known and worthy option?
-       const Option *o = g_conf->find_option(j.key);
+       const Option *o = g_conf().find_option(j.key);
        if (!o ||
            o->flags & Option::FLAG_NO_MON_UPDATE) {
          goto skip;
@@ -649,7 +649,7 @@ void ConfigMonitor::load_config()
       section->options.insert(make_pair(name, std::move(mopt)));
       ++num;      
     } else {
-      const Option *opt = g_conf->find_option(name);
+      const Option *opt = g_conf().find_option(name);
       if (!opt) {
        dout(10) << __func__ << " unrecognized option '" << name << "'" << dendl;
        opt = new Option(name, Option::TYPE_STR, Option::LEVEL_UNKNOWN);
@@ -694,15 +694,15 @@ void ConfigMonitor::load_config()
   {
     const OSDMap& osdmap = mon->osdmon()->osdmap;
     map<string,string> crush_location;
-    osdmap.crush->get_full_location(g_conf->host, &crush_location);
+    osdmap.crush->get_full_location(g_conf()->host, &crush_location);
     map<string,string> out;
     config_map.generate_entity_map(
-      g_conf->name,
+      g_conf()->name,
       crush_location,
       osdmap.crush.get(),
       string(), // no device class
       &out);
-    g_conf->set_mon_vals(g_ceph_context, out, nullptr);
+    g_conf().set_mon_vals(g_ceph_context, out, nullptr);
   }
 }
 
index da81e6fd63710394bfb37df2c9b9254c778de040..6169e4344d425a00a1868ba2bb52e951222b51c1 100644 (file)
@@ -152,7 +152,7 @@ void Elector::reset_timer(double plus)
    * Leader.
    */
   expire_event = mon->timer.add_event_after(
-    g_conf->mon_election_timeout + plus,
+    g_conf()->mon_election_timeout + plus,
     new C_MonContext(mon, [this](int) {
        expire();
       }));
index 42e6b33023e509b07c1588b2fa6780f0655df986..992c712608b68275e1b5294c52f696f897aa28f3 100644 (file)
@@ -210,7 +210,7 @@ class FsNewHandler : public FileSystemCommandHandler
     // assign a standby to rank 0 to avoid health warnings
     std::string _name;
     mds_gid_t gid = fsmap.find_replacement_for({fs->fscid, 0}, _name,
-        g_conf->mon_force_standby_active);
+        g_conf()->mon_force_standby_active);
 
     if (gid != MDS_GID_NONE) {
       const auto &info = fsmap.get_info_gid(gid);
index a6236acd14303d41c7c2a7daab4cc4b302246a8f..b982ae312f5576d4257674f541f2b473a9cf4804 100644 (file)
@@ -202,7 +202,7 @@ bool HealthMonitor::check_member_health()
 
   // snapshot of usage
   DataStats stats;
-  get_fs_stats(stats.fs_stats, g_conf->mon_data.c_str());
+  get_fs_stats(stats.fs_stats, g_conf()->mon_data.c_str());
   map<string,uint64_t> extra;
   uint64_t store_size = mon->store->get_estimated_size(extra);
   assert(store_size > 0);
@@ -218,14 +218,14 @@ bool HealthMonitor::check_member_health()
 
   // MON_DISK_{LOW,CRIT,BIG}
   health_check_map_t next;
-  if (stats.fs_stats.avail_percent <= g_conf->mon_data_avail_crit) {
+  if (stats.fs_stats.avail_percent <= g_conf()->mon_data_avail_crit) {
     stringstream ss, ss2;
     ss << "mon%plurals% %names% %isorare% very low on available space";
     auto& d = next.add("MON_DISK_CRIT", HEALTH_ERR, ss.str());
     ss2 << "mon." << mon->name << " has " << stats.fs_stats.avail_percent
        << "% avail";
     d.detail.push_back(ss2.str());
-  } else if (stats.fs_stats.avail_percent <= g_conf->mon_data_avail_warn) {
+  } else if (stats.fs_stats.avail_percent <= g_conf()->mon_data_avail_warn) {
     stringstream ss, ss2;
     ss << "mon%plurals% %names% %isorare% low on available space";
     auto& d = next.add("MON_DISK_LOW", HEALTH_WARN, ss.str());
@@ -233,14 +233,14 @@ bool HealthMonitor::check_member_health()
        << "% avail";
     d.detail.push_back(ss2.str());
   }
-  if (stats.store_stats.bytes_total >= g_conf->mon_data_size_warn) {
+  if (stats.store_stats.bytes_total >= g_conf()->mon_data_size_warn) {
     stringstream ss, ss2;
     ss << "mon%plurals% %names% %isorare% using a lot of disk space";
     auto& d = next.add("MON_DISK_BIG", HEALTH_WARN, ss.str());
     ss2 << "mon." << mon->name << " is "
        << byte_u_t(stats.store_stats.bytes_total)
        << " >= mon_data_size_warn ("
-       << byte_u_t(g_conf->mon_data_size_warn) << ")";
+       << byte_u_t(g_conf()->mon_data_size_warn) << ")";
     d.detail.push_back(ss2.str());
   }
 
@@ -258,8 +258,8 @@ bool HealthMonitor::check_member_health()
     // There's also the obvious drawback that if this is set on a single
     // monitor on a 3-monitor cluster, this warning will only be shown every
     // third monitor connection.
-    if (g_conf->mon_warn_on_osd_down_out_interval_zero &&
-        g_conf->mon_osd_down_out_interval == 0) {
+    if (g_conf()->mon_warn_on_osd_down_out_interval_zero &&
+        g_conf()->mon_osd_down_out_interval == 0) {
       ostringstream ss, ds;
       ss << "mon%plurals% %names% %hasorhave% mon_osd_down_out_interval set to 0";
       auto& d = next.add("OSD_NO_DOWN_OUT_INTERVAL", HEALTH_WARN, ss.str());
index 9f270377d1ed7d0af34ab2d08455c75222498103..4209c4aa401a67061ddc7ca4505a298de8515484 100644 (file)
@@ -62,7 +62,7 @@ void LogMonitor::create_initial()
 {
   dout(10) << "create_initial -- creating initial map" << dendl;
   LogEntry e;
-  e.name = g_conf->name;
+  e.name = g_conf()->name;
   e.rank = entity_name_t::MON(mon->rank);
   e.addrs = mon->messenger->get_myaddrs();
   e.stamp = ceph_clock_now();
@@ -117,7 +117,7 @@ void LogMonitor::update_from_paxos(bool *need_bootstrap)
       if (channel.empty()) // keep retrocompatibility
         channel = CLOG_CHANNEL_CLUSTER;
 
-      if (g_conf->get_val<bool>("mon_cluster_log_to_stderr")) {
+      if (g_conf().get_val<bool>("mon_cluster_log_to_stderr")) {
        cerr << channel << " " << le << std::endl;
       }
 
@@ -170,7 +170,7 @@ void LogMonitor::update_from_paxos(bool *need_bootstrap)
     }
 
     summary.version++;
-    summary.prune(g_conf->mon_log_max_summary);
+    summary.prune(g_conf()->mon_log_max_summary);
   }
 
   dout(15) << __func__ << " logging for "
@@ -244,7 +244,7 @@ version_t LogMonitor::get_trim_to() const
   if (!mon->is_leader())
     return 0;
 
-  unsigned max = g_conf->mon_max_log_epochs;
+  unsigned max = g_conf()->mon_max_log_epochs;
   version_t version = get_last_committed();
   if (version > max)
     return version - max;
@@ -352,7 +352,7 @@ bool LogMonitor::prepare_log(MonOpRequestRef op)
       pending_log.insert(pair<utime_t,LogEntry>(p->stamp, *p));
     }
   }
-  pending_summary.prune(g_conf->mon_log_max_summary);
+  pending_summary.prune(g_conf()->mon_log_max_summary);
   wait_for_finished_proposal(op, new C_Log(this, op));
   return true;
 }
@@ -367,8 +367,8 @@ void LogMonitor::_updated_log(MonOpRequestRef op)
 bool LogMonitor::should_propose(double& delay)
 {
   // commit now if we have a lot of pending events
-  if (g_conf->mon_max_log_entries_per_event > 0 &&
-      pending_log.size() >= (unsigned)g_conf->mon_max_log_entries_per_event)
+  if (g_conf()->mon_max_log_entries_per_event > 0 &&
+      pending_log.size() >= (unsigned)g_conf()->mon_max_log_entries_per_event)
     return true;
 
   // otherwise fall back to generic policy
@@ -539,7 +539,7 @@ bool LogMonitor::prepare_command(MonOpRequestRef op)
     le.channel = CLOG_CHANNEL_DEFAULT;
     le.msg = str_join(logtext, " ");
     pending_summary.add(le);
-    pending_summary.prune(g_conf->mon_log_max_summary);
+    pending_summary.prune(g_conf()->mon_log_max_summary);
     pending_log.insert(pair<utime_t,LogEntry>(le.stamp, le));
     wait_for_finished_proposal(op, new Monitor::C_Command(
           mon, op, 0, string(), get_last_committed() + 1));
@@ -675,7 +675,7 @@ void LogMonitor::update_log_channels()
 
   channels.clear();
 
-  int r = get_conf_str_map_helper(g_conf->mon_cluster_log_to_syslog,
+  int r = get_conf_str_map_helper(g_conf()->mon_cluster_log_to_syslog,
                                   oss, &channels.log_to_syslog,
                                   CLOG_CONFIG_DEFAULT_KEY);
   if (r < 0) {
@@ -683,7 +683,7 @@ void LogMonitor::update_log_channels()
     return;
   }
 
-  r = get_conf_str_map_helper(g_conf->mon_cluster_log_to_syslog_level,
+  r = get_conf_str_map_helper(g_conf()->mon_cluster_log_to_syslog_level,
                               oss, &channels.syslog_level,
                               CLOG_CONFIG_DEFAULT_KEY);
   if (r < 0) {
@@ -692,7 +692,7 @@ void LogMonitor::update_log_channels()
     return;
   }
 
-  r = get_conf_str_map_helper(g_conf->mon_cluster_log_to_syslog_facility,
+  r = get_conf_str_map_helper(g_conf()->mon_cluster_log_to_syslog_facility,
                               oss, &channels.syslog_facility,
                               CLOG_CONFIG_DEFAULT_KEY);
   if (r < 0) {
@@ -701,7 +701,7 @@ void LogMonitor::update_log_channels()
     return;
   }
 
-  r = get_conf_str_map_helper(g_conf->mon_cluster_log_file, oss,
+  r = get_conf_str_map_helper(g_conf()->mon_cluster_log_file, oss,
                               &channels.log_file,
                               CLOG_CONFIG_DEFAULT_KEY);
   if (r < 0) {
@@ -709,7 +709,7 @@ void LogMonitor::update_log_channels()
     return;
   }
 
-  r = get_conf_str_map_helper(g_conf->mon_cluster_log_file_level, oss,
+  r = get_conf_str_map_helper(g_conf()->mon_cluster_log_file_level, oss,
                               &channels.log_file_level,
                               CLOG_CONFIG_DEFAULT_KEY);
   if (r < 0) {
@@ -718,7 +718,7 @@ void LogMonitor::update_log_channels()
     return;
   }
 
-  r = get_conf_str_map_helper(g_conf->mon_cluster_log_to_graylog, oss,
+  r = get_conf_str_map_helper(g_conf()->mon_cluster_log_to_graylog, oss,
                               &channels.log_to_graylog,
                               CLOG_CONFIG_DEFAULT_KEY);
   if (r < 0) {
@@ -727,7 +727,7 @@ void LogMonitor::update_log_channels()
     return;
   }
 
-  r = get_conf_str_map_helper(g_conf->mon_cluster_log_to_graylog_host, oss,
+  r = get_conf_str_map_helper(g_conf()->mon_cluster_log_to_graylog_host, oss,
                               &channels.log_to_graylog_host,
                               CLOG_CONFIG_DEFAULT_KEY);
   if (r < 0) {
@@ -736,7 +736,7 @@ void LogMonitor::update_log_channels()
     return;
   }
 
-  r = get_conf_str_map_helper(g_conf->mon_cluster_log_to_graylog_port, oss,
+  r = get_conf_str_map_helper(g_conf()->mon_cluster_log_to_graylog_port, oss,
                               &channels.log_to_graylog_port,
                               CLOG_CONFIG_DEFAULT_KEY);
   if (r < 0) {
@@ -811,8 +811,8 @@ ceph::logging::Graylog::Ref LogMonitor::log_channel_info::get_graylog(
   if (graylogs.count(channel) == 0) {
     auto graylog(std::make_shared<ceph::logging::Graylog>("mon"));
 
-    graylog->set_fsid(g_conf->get_val<uuid_d>("fsid"));
-    graylog->set_hostname(g_conf->host);
+    graylog->set_fsid(g_conf().get_val<uuid_d>("fsid"));
+    graylog->set_hostname(g_conf()->host);
     graylog->set_destination(get_str_map_key(log_to_graylog_host, channel,
                                             &CLOG_CONFIG_DEFAULT_KEY),
                             atoi(get_str_map_key(log_to_graylog_port, channel,
index 19e996ee6468bb057d5310b2cbd24eca134880dd..f7c003489c8919485395ce0de0d9a2fdbc4fb97b 100644 (file)
@@ -164,7 +164,7 @@ private:
 
   void init() override {
     generic_dout(10) << "LogMonitor::init" << dendl;
-    g_conf->add_observer(this);
+    g_conf().add_observer(this);
     update_log_channels();
   }
   
@@ -182,7 +182,7 @@ private:
   int sub_name_to_id(const string& n);
 
   void on_shutdown() override {
-    g_conf->remove_observer(this);
+    g_conf().remove_observer(this);
   }
 
   const char **get_tracked_conf_keys() const override {
index 58eb2cc9c00f21c063d9f14dfb4a60e56f926078..f716a75419a7c5897d6fdafceba063a201771a17 100644 (file)
@@ -122,7 +122,7 @@ void MDSMonitor::update_from_paxos(bool *need_bootstrap)
   // new map
   dout(4) << "new map" << dendl;
   print_map<0>(get_fsmap());
-  if (!g_conf->mon_mds_skip_sanity) {
+  if (!g_conf()->mon_mds_skip_sanity) {
     get_fsmap().sanity();
   }
 
@@ -155,7 +155,7 @@ void MDSMonitor::encode_pending(MonitorDBStore::TransactionRef t)
 
   // print map iff 'debug mon = 30' or higher
   print_map<30>(pending);
-  if (!g_conf->mon_mds_skip_sanity) {
+  if (!g_conf()->mon_mds_skip_sanity) {
     pending.sanity();
   }
 
@@ -259,14 +259,14 @@ void MDSMonitor::encode_pending(MonitorDBStore::TransactionRef t)
 version_t MDSMonitor::get_trim_to() const
 {
   version_t floor = 0;
-  if (g_conf->mon_mds_force_trim_to > 0 &&
-      g_conf->mon_mds_force_trim_to < (int)get_last_committed()) {
-    floor = g_conf->mon_mds_force_trim_to;
+  if (g_conf()->mon_mds_force_trim_to > 0 &&
+      g_conf()->mon_mds_force_trim_to < (int)get_last_committed()) {
+    floor = g_conf()->mon_mds_force_trim_to;
     dout(10) << __func__ << " explicit mon_mds_force_trim_to = "
              << floor << dendl;
   }
 
-  unsigned max = g_conf->mon_max_mdsmap_epochs;
+  unsigned max = g_conf()->mon_max_mdsmap_epochs;
   version_t last = get_last_committed();
 
   if (last - get_first_committed() > max && floor < last - max)
@@ -561,7 +561,7 @@ bool MDSMonitor::prepare_beacon(MonOpRequestRef op)
   // boot?
   if (state == MDSMap::STATE_BOOT) {
     // zap previous instance of this name?
-    if (g_conf->mds_enforce_unique_name) {
+    if (g_conf()->mds_enforce_unique_name) {
       bool failed_mds = false;
       while (mds_gid_t existing = pending.find_mds_gid_by_name(m->get_name())) {
         if (!mon->osdmon()->is_writeable()) {
@@ -697,7 +697,7 @@ bool MDSMonitor::prepare_beacon(MonOpRequestRef op)
               << info.rank << " damaged" << dendl;
 
       utime_t until = ceph_clock_now();
-      until += g_conf->get_val<double>("mon_mds_blacklist_interval");
+      until += g_conf().get_val<double>("mon_mds_blacklist_interval");
       const auto blacklist_epoch = mon->osdmon()->blacklist(info.addrs, until);
       request_proposal(mon->osdmon());
       pending.damaged(gid, blacklist_epoch);
@@ -1075,7 +1075,7 @@ bool MDSMonitor::fail_mds_gid(FSMap &fsmap, mds_gid_t gid)
   epoch_t blacklist_epoch = 0;
   if (info.rank >= 0 && info.state != MDSMap::STATE_STANDBY_REPLAY) {
     utime_t until = ceph_clock_now();
-    until += g_conf->get_val<double>("mon_mds_blacklist_interval");
+    until += g_conf().get_val<double>("mon_mds_blacklist_interval");
     blacklist_epoch = mon->osdmon()->blacklist(info.addrs, until);
   }
 
@@ -1731,7 +1731,7 @@ bool MDSMonitor::maybe_resize_cluster(FSMap &fsmap, fs_cluster_id_t fscid)
       mds++;
     }
     mds_gid_t newgid = fsmap.find_replacement_for({fscid, mds},
-                         name, g_conf->mon_force_standby_active);
+                         name, g_conf()->mon_force_standby_active);
     if (newgid == MDS_GID_NONE) {
       return false;
     }
@@ -1790,7 +1790,7 @@ void MDSMonitor::maybe_replace_gid(FSMap &fsmap, mds_gid_t gid,
   mono_time now = mono_clock::now();
   chrono::duration<double> since = now-latest_beacon;
   const bool may_replace = since.count() <
-      std::max(g_conf->mds_beacon_interval, g_conf->mds_beacon_grace * 0.5);
+      std::max(g_conf()->mds_beacon_interval, g_conf()->mds_beacon_grace * 0.5);
 
   // are we in?
   // and is there a non-laggy standby that can take over for us?
@@ -1801,7 +1801,7 @@ void MDSMonitor::maybe_replace_gid(FSMap &fsmap, mds_gid_t gid,
       may_replace &&
       !fsmap.get_filesystem(fscid)->mds_map.test_flag(CEPH_MDSMAP_NOT_JOINABLE) &&
       (sgid = fsmap.find_replacement_for({fscid, info.rank}, info.name,
-                g_conf->mon_force_standby_active)) != MDS_GID_NONE)
+                g_conf()->mon_force_standby_active)) != MDS_GID_NONE)
   {
     
     MDSMap::mds_info_t si = fsmap.get_info_gid(sgid);
@@ -1865,7 +1865,7 @@ bool MDSMonitor::maybe_promote_standby(FSMap &fsmap, std::shared_ptr<Filesystem>
     while (p != failed.end()) {
       mds_rank_t f = *p++;
       mds_gid_t sgid = fsmap.find_replacement_for({fs->fscid, f}, {},
-          g_conf->mon_force_standby_active);
+          g_conf()->mon_force_standby_active);
       if (sgid) {
         const MDSMap::mds_info_t si = fsmap.get_info_gid(sgid);
         dout(0) << " taking over failed mds." << f << " with " << sgid
@@ -1994,7 +1994,7 @@ void MDSMonitor::tick()
   chrono::duration<double> since_last = now-last_tick;
 
   if (since_last.count() >
-      (g_conf->mds_beacon_grace - g_conf->mds_beacon_interval)) {
+      (g_conf()->mds_beacon_grace - g_conf()->mds_beacon_interval)) {
     // This case handles either local slowness (calls being delayed
     // for whatever reason) or cluster election slowness (a long gap
     // between calls while an election happened)
@@ -2031,7 +2031,7 @@ void MDSMonitor::tick()
     }
 
 
-    if (since_last.count() >= g_conf->mds_beacon_grace) {
+    if (since_last.count() >= g_conf()->mds_beacon_grace) {
       auto &info = pending.get_info_gid(gid);
       dout(1) << "no beacon from mds." << info.rank << "." << info.inc
               << " (gid: " << gid << " addr: " << info.addrs
index acfea13a8b260d9b6fe49c12640d79fe29e9f709..a7af4241c00dd33327f386d6999f40287e511c55 100644 (file)
@@ -42,7 +42,7 @@ const static std::string command_descs_prefix = "mgr_command_descs";
 
 version_t MgrMonitor::get_trim_to() const
 {
-  int64_t max = g_conf->get_val<int64_t>("mon_max_mgrmap_epochs");
+  int64_t max = g_conf().get_val<int64_t>("mon_max_mgrmap_epochs");
   if (map.epoch > max) {
     return map.epoch - max;
   }
@@ -52,7 +52,7 @@ version_t MgrMonitor::get_trim_to() const
 void MgrMonitor::create_initial()
 {
   // Take a local copy of initial_modules for tokenizer to iterate over.
-  auto initial_modules = g_conf->get_val<std::string>("mgr_initial_modules");
+  auto initial_modules = g_conf().get_val<std::string>("mgr_initial_modules");
   boost::tokenizer<> tok(initial_modules);
   for (auto& m : tok) {
     pending_map.modules.insert(m);
@@ -138,10 +138,10 @@ health_status_t MgrMonitor::should_warn_about_mgr_down()
   // no OSDs are ever created.
   if (ever_had_active_mgr ||
       (mon->osdmon()->osdmap.get_num_osds() > 0 &&
-       now > mon->monmap->created + g_conf->get_val<int64_t>("mon_mgr_mkfs_grace"))) {
+       now > mon->monmap->created + g_conf().get_val<int64_t>("mon_mgr_mkfs_grace"))) {
     health_status_t level = HEALTH_WARN;
     if (first_seen_inactive != utime_t() &&
-       now - first_seen_inactive > g_conf->get_val<int64_t>("mon_mgr_inactive_grace")) {
+       now - first_seen_inactive > g_conf().get_val<int64_t>("mon_mgr_inactive_grace")) {
       level = HEALTH_ERR;
     }
     return level;
@@ -482,7 +482,7 @@ void MgrMonitor::send_digests()
 
 timer:
   digest_event = mon->timer.add_event_after(
-    g_conf->get_val<int64_t>("mon_mgr_digest_period"),
+    g_conf().get_val<int64_t>("mon_mgr_digest_period"),
     new C_MonContext(mon, [this](int) {
       send_digests();
   }));
@@ -511,12 +511,12 @@ void MgrMonitor::tick()
   const auto now = ceph::coarse_mono_clock::now();
 
   const auto mgr_beacon_grace =
-      g_conf->get_val<std::chrono::seconds>("mon_mgr_beacon_grace");
+      g_conf().get_val<std::chrono::seconds>("mon_mgr_beacon_grace");
 
   // Note that this is the mgr daemon's tick period, not ours (the
   // beacon is sent with this period).
   const auto mgr_tick_period =
-      g_conf->get_val<std::chrono::seconds>("mgr_tick_period");
+      g_conf().get_val<std::chrono::seconds>("mgr_tick_period");
 
   if (last_tick != ceph::coarse_mono_clock::time_point::min()
       && (now - last_tick > (mgr_beacon_grace - mgr_tick_period))) {
@@ -593,7 +593,7 @@ void MgrMonitor::tick()
       !ever_had_active_mgr &&
       should_warn_about_mgr_down() != HEALTH_OK) {
     dout(10) << " exceeded mon_mgr_mkfs_grace "
-             << g_conf->get_val<int64_t>("mon_mgr_mkfs_grace")
+             << g_conf().get_val<int64_t>("mon_mgr_mkfs_grace")
              << " seconds" << dendl;
     propose = true;
   }
index b53ee2fe14b96551a77a9a041e8ea1bf65af3da5..220910f947ee2eaa0ebc1c664707956a042a26cf 100644 (file)
@@ -61,7 +61,7 @@ MonClient::MonClient(CephContext *cct_) :
   want_monmap(true),
   had_a_connection(false),
   reopen_interval_multiplier(
-    cct_->_conf->get_val<double>("mon_client_hunt_interval_min_multiple")),
+    cct_->_conf.get_val<double>("mon_client_hunt_interval_min_multiple")),
   last_mon_command_tid(0),
   version_req_id(0)
 {}
@@ -163,7 +163,7 @@ out_msgr:
   messenger = nullptr;
 
   if (!monmap.fsid.is_zero()) {
-    cct->_conf->set_val("fsid", stringify(monmap.fsid));
+    cct->_conf.set_val("fsid", stringify(monmap.fsid));
   }
 
 out:
@@ -374,7 +374,7 @@ void MonClient::handle_config(MConfig *m)
 {
   ldout(cct,10) << __func__ << " " << *m << dendl;
   finisher.queue(new FunctionContext([this, m](int r) {
-       cct->_conf->set_mon_vals(cct, m->config, config_cb);
+       cct->_conf.set_mon_vals(cct, m->config, config_cb);
        m->put();
       }));
   got_config = true;
@@ -818,9 +818,9 @@ void MonClient::_un_backoff()
 {
   // un-backoff our reconnect interval
   reopen_interval_multiplier = std::max(
-    cct->_conf->get_val<double>("mon_client_hunt_interval_min_multiple"),
+    cct->_conf.get_val<double>("mon_client_hunt_interval_min_multiple"),
     reopen_interval_multiplier /
-    cct->_conf->get_val<double>("mon_client_hunt_interval_backoff"));
+    cct->_conf.get_val<double>("mon_client_hunt_interval_backoff"));
   ldout(cct, 20) << __func__ << " reopen_interval_multipler now "
                 << reopen_interval_multiplier << dendl;
 }
index 24b0db5cd03696d16940f72f53b9a22926868f9b..aac923c93c0b983adb56f47f50c9da3bec1bd5cf 100644 (file)
@@ -415,9 +415,9 @@ void MonMap::set_initial_members(CephContext *cct,
 
 int MonMap::build_initial(CephContext *cct, ostream& errout)
 {
-  const md_config_t *conf = cct->_conf;
+  const auto& conf = cct->_conf;
   // file?
-  const auto monmap = conf->get_val<std::string>("monmap");
+  const auto monmap = conf.get_val<std::string>("monmap");
   if (!monmap.empty()) {
     int r;
     try {
@@ -434,13 +434,13 @@ int MonMap::build_initial(CephContext *cct, ostream& errout)
   }
 
   // fsid from conf?
-  const auto new_fsid = conf->get_val<uuid_d>("fsid");
+  const auto new_fsid = conf.get_val<uuid_d>("fsid");
   if (!new_fsid.is_zero()) {
     fsid = new_fsid;
   }
 
   // -m foo?
-  const auto mon_host = conf->get_val<std::string>("mon_host");
+  const auto mon_host = conf.get_val<std::string>("mon_host");
   if (!mon_host.empty()) {
     int r = build_from_host_list(mon_host, "noname-");
     if (r < 0) {
@@ -456,7 +456,7 @@ int MonMap::build_initial(CephContext *cct, ostream& errout)
 
   // What monitors are in the config file?
   std::vector <std::string> sections;
-  int ret = conf->get_all_sections(sections);
+  int ret = conf.get_all_sections(sections);
   if (ret) {
     errout << "Unable to find any monitors in the configuration "
          << "file, because there was an error listing the sections. error "
@@ -482,7 +482,7 @@ int MonMap::build_initial(CephContext *cct, ostream& errout)
     sections.push_back("mon");
     sections.push_back("global");
     std::string val;
-    int res = conf->get_val_from_conf_file(sections, "mon addr", val, true);
+    int res = conf.get_val_from_conf_file(sections, "mon addr", val, true);
     if (res) {
       errout << "failed to get an address for mon." << *m << ": error "
           << res << std::endl;
@@ -498,7 +498,7 @@ int MonMap::build_initial(CephContext *cct, ostream& errout)
       addr.set_port(CEPH_MON_PORT_LEGACY);
 
     uint16_t priority = 0;
-    if (!conf->get_val_from_conf_file(sections, "mon priority", val, false)) {
+    if (!conf.get_val_from_conf_file(sections, "mon priority", val, false)) {
       try {
         priority = std::stoul(val);
       } catch (std::logic_error&) {
@@ -518,7 +518,7 @@ int MonMap::build_initial(CephContext *cct, ostream& errout)
 
   if (size() == 0) {
     // no info found from conf options lets try use DNS SRV records
-    string srv_name = conf->get_val<std::string>("mon_dns_srv_name");
+    string srv_name = conf.get_val<std::string>("mon_dns_srv_name");
     string domain;
     // check if domain is also provided and extract it from srv_name
     size_t idx = srv_name.find("_");
index 263ba6cd3d72cbf5d6fbbc02e03518877eb37196..ff31d211c5c133cd5df0913886063d180ab45e0e 100644 (file)
@@ -130,7 +130,7 @@ Monitor::Monitor(CephContext* cct_, string nm, MonitorDBStore *s,
   lock("Monitor::lock"),
   timer(cct_, lock),
   finisher(cct_, "mon_finisher", "fin"),
-  cpu_tp(cct, "Monitor::cpu_tp", "cpu_tp", g_conf->mon_cpu_threads),
+  cpu_tp(cct, "Monitor::cpu_tp", "cpu_tp", g_conf()->mon_cpu_threads),
   has_ever_joined(false),
   logger(NULL), cluster_logger(NULL), cluster_logger_registered(false),
   monmap(map),
@@ -173,7 +173,7 @@ Monitor::Monitor(CephContext* cct_, string nm, MonitorDBStore *s,
   paxos_service(PAXOS_NUM),
   admin_hook(NULL),
   routed_request_tid(0),
-  op_tracker(cct, g_conf->get_val<bool>("mon_enable_op_tracker"), 1)
+  op_tracker(cct, g_conf().get_val<bool>("mon_enable_op_tracker"), 1)
 {
   clog = log_client.create_channel(CLOG_CHANNEL_CLUSTER);
   audit_clog = log_client.create_channel(CLOG_CHANNEL_AUDIT);
@@ -181,14 +181,14 @@ Monitor::Monitor(CephContext* cct_, string nm, MonitorDBStore *s,
   update_log_clients();
 
   op_tracker.set_complaint_and_threshold(
-      g_conf->get_val<std::chrono::seconds>("mon_op_complaint_time").count(),
-      g_conf->get_val<int64_t>("mon_op_log_threshold"));
+      g_conf().get_val<std::chrono::seconds>("mon_op_complaint_time").count(),
+      g_conf().get_val<int64_t>("mon_op_log_threshold"));
   op_tracker.set_history_size_and_duration(
-      g_conf->get_val<uint64_t>("mon_op_history_size"),
-      g_conf->get_val<std::chrono::seconds>("mon_op_history_duration").count());
+      g_conf().get_val<uint64_t>("mon_op_history_size"),
+      g_conf().get_val<std::chrono::seconds>("mon_op_history_duration").count());
   op_tracker.set_history_slow_op_size_and_threshold(
-      g_conf->get_val<uint64_t>("mon_op_history_slow_op_size"),
-      g_conf->get_val<std::chrono::seconds>("mon_op_history_slow_op_threshold").count());
+      g_conf().get_val<uint64_t>("mon_op_history_slow_op_size"),
+      g_conf().get_val<std::chrono::seconds>("mon_op_history_slow_op_threshold").count());
 
   paxos = new Paxos(this, "paxos");
 
@@ -495,7 +495,7 @@ const char** Monitor::get_tracked_conf_keys() const
   return KEYS;
 }
 
-void Monitor::handle_conf_change(const md_config_t *conf,
+void Monitor::handle_conf_change(const md_config_t *mconf,
                                  const std::set<std::string> &changed)
 {
   sanitize_options();
@@ -521,6 +521,7 @@ void Monitor::handle_conf_change(const md_config_t *conf,
   }
 
   if (changed.count("mon_scrub_interval")) {
+    ConfigReader conf{mconf};
     scrub_update_interval(conf->mon_scrub_interval);
   }
 }
@@ -560,9 +561,9 @@ int Monitor::sanitize_options()
 
   // mon_lease must be greater than mon_lease_renewal; otherwise we
   // may incur in leases expiring before they are renewed.
-  if (g_conf->mon_lease_renew_interval_factor >= 1.0) {
+  if (g_conf()->mon_lease_renew_interval_factor >= 1.0) {
     clog->error() << "mon_lease_renew_interval_factor ("
-                 << g_conf->mon_lease_renew_interval_factor
+                 << g_conf()->mon_lease_renew_interval_factor
                  << ") must be less than 1.0";
     r = -EINVAL;
   }
@@ -572,9 +573,9 @@ int Monitor::sanitize_options()
   // with the same value, for a given small vale, could mean timing out if
   // the monitors happened to be overloaded -- or even under normal load for
   // a small enough value.
-  if (g_conf->mon_lease_ack_timeout_factor <= 1.0) {
+  if (g_conf()->mon_lease_ack_timeout_factor <= 1.0) {
     clog->error() << "mon_lease_ack_timeout_factor ("
-                 << g_conf->mon_lease_ack_timeout_factor
+                 << g_conf()->mon_lease_ack_timeout_factor
                  << ") must be greater than 1.0";
     r = -EINVAL;
   }
@@ -666,7 +667,7 @@ int Monitor::preinit()
   if (!has_ever_joined) {
     // impose initial quorum restrictions?
     list<string> initial_members;
-    get_str_list(g_conf->mon_initial_members, initial_members);
+    get_str_list(g_conf()->mon_initial_members, initial_members);
 
     if (!initial_members.empty()) {
       dout(1) << " initial_members " << initial_members << ", filtering seed monmap" << dendl;
@@ -680,7 +681,7 @@ int Monitor::preinit()
   } else if (!monmap->contains(name)) {
     derr << "not in monmap and have been in a quorum before; "
          << "must have been removed" << dendl;
-    if (g_conf->mon_force_quorum_join) {
+    if (g_conf()->mon_force_quorum_join) {
       dout(0) << "we should have died but "
               << "'mon_force_quorum_join' is set -- allowing boot" << dendl;
     } else {
@@ -732,7 +733,7 @@ int Monitor::preinit()
       }
     }
 
-    string keyring_loc = g_conf->mon_data + "/keyring";
+    string keyring_loc = g_conf()->mon_data + "/keyring";
 
     r = keyring.load(cct, keyring_loc);
     if (r < 0) {
@@ -746,7 +747,7 @@ int Monitor::preinit()
        keyring.encode_plaintext(bl);
        write_default_keyring(bl);
       } else {
-       derr << "unable to load initial keyring " << g_conf->keyring << dendl;
+       derr << "unable to load initial keyring " << g_conf()->keyring << dendl;
        lock.Unlock();
        return r;
       }
@@ -812,7 +813,7 @@ int Monitor::preinit()
   lock.Lock();
 
   // add ourselves as a conf observer
-  g_conf->add_observer(this);
+  g_conf().add_observer(this);
 
   lock.Unlock();
   return 0;
@@ -922,7 +923,7 @@ void Monitor::shutdown()
 
   state = STATE_SHUTDOWN;
 
-  g_conf->remove_observer(this);
+  g_conf().remove_observer(this);
 
   if (admin_hook) {
     cct->get_admin_socket()->unregister_commands(admin_hook);
@@ -1024,7 +1025,7 @@ void Monitor::bootstrap()
   _reset();
 
   // sync store
-  if (g_conf->mon_compact_on_bootstrap) {
+  if (g_conf()->mon_compact_on_bootstrap) {
     dout(10) << "bootstrap -- triggering compaction" << dendl;
     store->compact();
     dout(10) << "bootstrap -- finished compaction" << dendl;
@@ -1244,7 +1245,7 @@ void Monitor::sync_start(entity_inst_t &other, bool full)
 
     store->apply_transaction(t);
 
-    assert(g_conf->mon_sync_requester_kill_at != 1);
+    assert(g_conf()->mon_sync_requester_kill_at != 1);
 
     // clear the underlying store
     set<string> targets = get_sync_targets_names();
@@ -1256,7 +1257,7 @@ void Monitor::sync_start(entity_inst_t &other, bool full)
     // deciding a partial or no sync is needed.
     paxos->init();
 
-    assert(g_conf->mon_sync_requester_kill_at != 2);
+    assert(g_conf()->mon_sync_requester_kill_at != 2);
   }
 
   // assume 'other' as the leader. We will update the leader once we receive
@@ -1286,7 +1287,7 @@ void Monitor::sync_reset_timeout()
   if (sync_timeout_event)
     timer.cancel_event(sync_timeout_event);
   sync_timeout_event = timer.add_event_after(
-    g_conf->mon_sync_timeout,
+    g_conf()->mon_sync_timeout,
     new C_MonContext(this, [this](int) {
        sync_timeout();
       }));
@@ -1296,7 +1297,7 @@ void Monitor::sync_finish(version_t last_committed)
 {
   dout(10) << __func__ << " lc " << last_committed << " from " << sync_provider << dendl;
 
-  assert(g_conf->mon_sync_requester_kill_at != 7);
+  assert(g_conf()->mon_sync_requester_kill_at != 7);
 
   if (sync_full) {
     // finalize the paxos commits
@@ -1314,7 +1315,7 @@ void Monitor::sync_finish(version_t last_committed)
     store->apply_transaction(tx);
   }
 
-  assert(g_conf->mon_sync_requester_kill_at != 8);
+  assert(g_conf()->mon_sync_requester_kill_at != 8);
 
   auto t(std::make_shared<MonitorDBStore::Transaction>());
   t->erase("mon_sync", "in_sync");
@@ -1322,11 +1323,11 @@ void Monitor::sync_finish(version_t last_committed)
   t->erase("mon_sync", "last_committed_floor");
   store->apply_transaction(t);
 
-  assert(g_conf->mon_sync_requester_kill_at != 9);
+  assert(g_conf()->mon_sync_requester_kill_at != 9);
 
   init_paxos();
 
-  assert(g_conf->mon_sync_requester_kill_at != 10);
+  assert(g_conf()->mon_sync_requester_kill_at != 10);
 
   bootstrap();
 }
@@ -1384,7 +1385,7 @@ void Monitor::handle_sync_get_cookie(MonOpRequestRef op)
     return;
   }
 
-  assert(g_conf->mon_sync_provider_kill_at != 1);
+  assert(g_conf()->mon_sync_provider_kill_at != 1);
 
   // make sure they can understand us.
   if ((required_features ^ m->get_connection()->get_features()) &
@@ -1408,7 +1409,7 @@ void Monitor::handle_sync_get_cookie(MonOpRequestRef op)
   SyncProvider& sp = sync_providers[cookie];
   sp.cookie = cookie;
   sp.entity = m->get_source_inst();
-  sp.reset_timeout(g_ceph_context, g_conf->mon_sync_timeout * 2);
+  sp.reset_timeout(g_ceph_context, g_conf()->mon_sync_timeout * 2);
 
   set<string> sync_targets;
   if (m->op == MMonSync::OP_GET_COOKIE_FULL) {
@@ -1440,10 +1441,10 @@ void Monitor::handle_sync_get_chunk(MonOpRequestRef op)
     return;
   }
 
-  assert(g_conf->mon_sync_provider_kill_at != 2);
+  assert(g_conf()->mon_sync_provider_kill_at != 2);
 
   SyncProvider& sp = sync_providers[m->cookie];
-  sp.reset_timeout(g_ceph_context, g_conf->mon_sync_timeout * 2);
+  sp.reset_timeout(g_ceph_context, g_conf()->mon_sync_timeout * 2);
 
   if (sp.last_committed < paxos->get_first_committed() &&
       paxos->get_first_committed() > 1) {
@@ -1457,7 +1458,7 @@ void Monitor::handle_sync_get_chunk(MonOpRequestRef op)
   MMonSync *reply = new MMonSync(MMonSync::OP_CHUNK, sp.cookie);
   auto tx(std::make_shared<MonitorDBStore::Transaction>());
 
-  int left = g_conf->mon_sync_max_payload_size;
+  int left = g_conf()->mon_sync_max_payload_size;
   while (sp.last_committed < paxos->get_version() && left > 0) {
     bufferlist bl;
     sp.last_committed++;
@@ -1487,7 +1488,7 @@ void Monitor::handle_sync_get_chunk(MonOpRequestRef op)
             << " key " << sp.last_key << dendl;
     reply->op = MMonSync::OP_LAST_CHUNK;
 
-    assert(g_conf->mon_sync_provider_kill_at != 3);
+    assert(g_conf()->mon_sync_provider_kill_at != 3);
 
     // clean up our local state
     sync_providers.erase(sp.cookie);
@@ -1518,20 +1519,20 @@ void Monitor::handle_sync_cookie(MonOpRequestRef op)
   sync_reset_timeout();
   sync_get_next_chunk();
 
-  assert(g_conf->mon_sync_requester_kill_at != 3);
+  assert(g_conf()->mon_sync_requester_kill_at != 3);
 }
 
 void Monitor::sync_get_next_chunk()
 {
   dout(20) << __func__ << " cookie " << sync_cookie << " provider " << sync_provider << dendl;
-  if (g_conf->mon_inject_sync_get_chunk_delay > 0) {
-    dout(20) << __func__ << " injecting delay of " << g_conf->mon_inject_sync_get_chunk_delay << dendl;
-    usleep((long long)(g_conf->mon_inject_sync_get_chunk_delay * 1000000.0));
+  if (g_conf()->mon_inject_sync_get_chunk_delay > 0) {
+    dout(20) << __func__ << " injecting delay of " << g_conf()->mon_inject_sync_get_chunk_delay << dendl;
+    usleep((long long)(g_conf()->mon_inject_sync_get_chunk_delay * 1000000.0));
   }
   MMonSync *r = new MMonSync(MMonSync::OP_GET_CHUNK, sync_cookie);
   messenger->send_message(r, sync_provider);
 
-  assert(g_conf->mon_sync_requester_kill_at != 4);
+  assert(g_conf()->mon_sync_requester_kill_at != 4);
 }
 
 void Monitor::handle_sync_chunk(MonOpRequestRef op)
@@ -1549,7 +1550,7 @@ void Monitor::handle_sync_chunk(MonOpRequestRef op)
   }
 
   assert(state == STATE_SYNCHRONIZING);
-  assert(g_conf->mon_sync_requester_kill_at != 5);
+  assert(g_conf()->mon_sync_requester_kill_at != 5);
 
   auto tx(std::make_shared<MonitorDBStore::Transaction>());
   tx->append_from_encoded(m->chunk_bl);
@@ -1562,7 +1563,7 @@ void Monitor::handle_sync_chunk(MonOpRequestRef op)
 
   store->apply_transaction(tx);
 
-  assert(g_conf->mon_sync_requester_kill_at != 6);
+  assert(g_conf()->mon_sync_requester_kill_at != 6);
 
   if (!sync_full) {
     dout(10) << __func__ << " applying recent paxos transactions as we go" << dendl;
@@ -1631,7 +1632,7 @@ void Monitor::reset_probe_timeout()
   probe_timeout_event = new C_MonContext(this, [this](int r) {
       probe_timeout(r);
     });
-  double t = g_conf->mon_probe_timeout;
+  double t = g_conf()->mon_probe_timeout;
   if (timer.add_event_after(t, probe_timeout_event)) {
     dout(10) << "reset_probe_timeout " << probe_timeout_event
             << " after " << t << " seconds" << dendl;
@@ -1820,7 +1821,7 @@ void Monitor::handle_probe_reply(MonOpRequestRef op)
       sync_start(other, true);
       return;
     }
-    if (paxos->get_version() + g_conf->paxos_max_join_drift < m->paxos_last_version) {
+    if (paxos->get_version() + g_conf()->paxos_max_join_drift < m->paxos_last_version) {
       dout(10) << " peer paxos last version " << m->paxos_last_version
               << " vs my version " << paxos->get_version()
               << " (too far ahead)"
@@ -2366,10 +2367,10 @@ void Monitor::get_mon_status(Formatter *f, ostream& ss)
     f->close_section();
   }
 
-  if (g_conf->mon_sync_provider_kill_at > 0)
-    f->dump_int("provider_kill_at", g_conf->mon_sync_provider_kill_at);
-  if (g_conf->mon_sync_requester_kill_at > 0)
-    f->dump_int("requester_kill_at", g_conf->mon_sync_requester_kill_at);
+  if (g_conf()->mon_sync_provider_kill_at > 0)
+    f->dump_int("provider_kill_at", g_conf()->mon_sync_provider_kill_at);
+  if (g_conf()->mon_sync_requester_kill_at > 0)
+    f->dump_int("requester_kill_at", g_conf()->mon_sync_requester_kill_at);
 
   f->open_object_section("monmap");
   monmap->dump(f);
@@ -2552,8 +2553,8 @@ health_status_t Monitor::get_health_status(
   const char *sep2)
 {
   health_status_t r = HEALTH_OK;
-  bool compat = g_conf->mon_health_preluminous_compat;
-  bool compat_warn = g_conf->get_val<bool>("mon_health_preluminous_compat_warning");
+  bool compat = g_conf()->mon_health_preluminous_compat;
+  bool compat_warn = g_conf().get_val<bool>("mon_health_preluminous_compat_warning");
   if (f) {
     f->open_object_section("health");
     f->open_object_section("checks");
@@ -2624,7 +2625,7 @@ void Monitor::log_health(
   const health_check_map_t& previous,
   MonitorDBStore::TransactionRef t)
 {
-  if (!g_conf->mon_health_to_clog) {
+  if (!g_conf()->mon_health_to_clog) {
     return;
   }
 
@@ -2634,7 +2635,7 @@ void Monitor::log_health(
   dout(10) << __func__ << " updated " << updated.checks.size()
           << " previous " << previous.checks.size()
           << dendl;
-  const auto min_log_period = g_conf->get_val<int64_t>(
+  const auto min_log_period = g_conf().get_val<int64_t>(
       "mon_health_log_update_period");
   for (auto& p : updated.checks) {
     auto q = previous.checks.find(p.first);
@@ -2891,10 +2892,10 @@ void Monitor::format_command_descriptions(const std::vector<MonCommand> &command
 
 bool Monitor::is_keyring_required()
 {
-  string auth_cluster_required = g_conf->auth_supported.empty() ?
-    g_conf->auth_cluster_required : g_conf->auth_supported;
-  string auth_service_required = g_conf->auth_supported.empty() ?
-    g_conf->auth_service_required : g_conf->auth_supported;
+  string auth_cluster_required = g_conf()->auth_supported.empty() ?
+    g_conf()->auth_cluster_required : g_conf()->auth_supported;
+  string auth_service_required = g_conf()->auth_supported.empty() ?
+    g_conf()->auth_service_required : g_conf()->auth_supported;
 
   return auth_service_required == "cephx" ||
     auth_cluster_required == "cephx";
@@ -3103,8 +3104,8 @@ void Monitor::handle_command(MonOpRequestRef op)
   if (mon_cmd->is_mgr()) {
     const auto& hdr = m->get_header();
     uint64_t size = hdr.front_len + hdr.middle_len + hdr.data_len;
-    uint64_t max = g_conf->get_val<uint64_t>("mon_client_bytes")
-                 * g_conf->get_val<double>("mon_mgr_proxy_client_bytes_ratio");
+    uint64_t max = g_conf().get_val<uint64_t>("mon_client_bytes")
+                 * g_conf().get_val<double>("mon_mgr_proxy_client_bytes_ratio");
     if (mgr_proxy_bytes + size > max) {
       dout(10) << __func__ << " current mgr proxy bytes " << mgr_proxy_bytes
               << " + " << size << " > max " << max << dendl;
@@ -3209,7 +3210,7 @@ void Monitor::handle_command(MonOpRequestRef op)
     double duration = std::chrono::duration<double>(end-start).count();
     dout(1) << "finished manual compaction in " << duration << " seconds" << dendl;
     ostringstream oss;
-    oss << "compacted " << g_conf->get_val<std::string>("mon_keyvaluedb") << " in " << duration << " seconds";
+    oss << "compacted " << g_conf().get_val<std::string>("mon_keyvaluedb") << " in " << duration << " seconds";
     rs = oss.str();
     r = 0;
   }
@@ -3219,7 +3220,7 @@ void Monitor::handle_command(MonOpRequestRef op)
     if (!injected_args.empty()) {
       dout(0) << "parsing injected options '" << injected_args << "'" << dendl;
       ostringstream oss;
-      r = g_conf->injectargs(str_join(injected_args, " "), &oss);
+      r = g_conf().injectargs(str_join(injected_args, " "), &oss);
       ss << "injectargs:"  << oss.str();
       rs = ss.str();
       goto out;
@@ -3265,9 +3266,9 @@ void Monitor::handle_command(MonOpRequestRef op)
     cmd_getval(cct, cmdmap, "key", key);
     std::string val;
     cmd_getval(cct, cmdmap, "value", val);
-    r = g_conf->set_val(key, val, &ss);
+    r = g_conf().set_val(key, val, &ss);
     if (r == 0) {
-      g_conf->apply_changes(nullptr);
+      g_conf().apply_changes(nullptr);
     }
     rs = ss.str();
     goto out;
@@ -4066,7 +4067,7 @@ void Monitor::_ms_dispatch(Message *m)
   assert(s);
 
   s->session_timeout = ceph_clock_now();
-  s->session_timeout += g_conf->mon_session_timeout;
+  s->session_timeout += g_conf()->mon_session_timeout;
 
   if (s->auth_handler) {
     s->entity_name = s->auth_handler->get_entity_name();
@@ -4373,7 +4374,7 @@ void Monitor::timecheck_start_round()
   if (timecheck_round % 2) {
     dout(10) << __func__ << " there's a timecheck going on" << dendl;
     utime_t curr_time = ceph_clock_now();
-    double max = g_conf->mon_timecheck_interval*3;
+    double max = g_conf()->mon_timecheck_interval*3;
     if (curr_time - timecheck_round_start < max) {
       dout(10) << __func__ << " keep current round going" << dendl;
       goto out;
@@ -4589,7 +4590,7 @@ health_status_t Monitor::timecheck_status(ostringstream &ss,
   if (timecheck_has_skew(skew_bound, &abs_skew)) {
     status = HEALTH_WARN;
     ss << "clock skew " << abs_skew << "s"
-       << " > max " << g_conf->mon_clock_drift_allowed << "s";
+       << " > max " << g_conf()->mon_clock_drift_allowed << "s";
   }
 
   return status;
@@ -4861,7 +4862,7 @@ void Monitor::handle_subscribe(MonOpRequestRef op)
     ConnectionRef con = m->get_connection();
     if (!con->has_feature(CEPH_FEATURE_MON_STATEFUL_SUB))
       m->get_connection()->send_message(new MMonSubscribeAck(
-       monmap->get_fsid(), (int)g_conf->mon_subscribe_interval));
+       monmap->get_fsid(), (int)g_conf()->mon_subscribe_interval));
   }
 
 }
@@ -5344,7 +5345,7 @@ void Monitor::scrub_reset_timeout()
   dout(15) << __func__ << " reset timeout event" << dendl;
   scrub_cancel_timeout();
   scrub_timeout_event = timer.add_event_after(
-    g_conf->mon_scrub_timeout,
+    g_conf()->mon_scrub_timeout,
     new C_MonContext(this, [this](int) {
       scrub_timeout();
     }));
@@ -5353,7 +5354,7 @@ void Monitor::scrub_reset_timeout()
 /************ TICK ***************/
 void Monitor::new_tick()
 {
-  timer.add_event_after(g_conf->mon_tick_interval, new C_MonContext(this, [this](int) {
+  timer.add_event_after(g_conf()->mon_tick_interval, new C_MonContext(this, [this](int) {
        tick();
       }));
 }
@@ -5366,7 +5367,7 @@ void Monitor::tick()
   
   // Check if we need to emit any delayed health check updated messages
   if (is_leader()) {
-    const auto min_period = g_conf->get_val<int64_t>(
+    const auto min_period = g_conf().get_val<int64_t>(
                               "mon_health_log_update_period");
     for (auto& svc : paxos_service) {
       auto health = svc->get_health_checks();
@@ -5410,7 +5411,7 @@ void Monitor::tick()
     auto p = session_map.sessions.begin();
 
     bool out_for_too_long = (!exited_quorum.is_zero() &&
-                            now > (exited_quorum + 2*g_conf->mon_lease));
+                            now > (exited_quorum + 2*g_conf()->mon_lease));
 
     while (!p.end()) {
       MonSession *s = *p;
@@ -5423,7 +5424,7 @@ void Monitor::tick()
       if (s->session_timeout < now && s->con) {
        // check keepalive, too
        s->session_timeout = s->con->get_last_keepalive();
-       s->session_timeout += g_conf->mon_session_timeout;
+       s->session_timeout += g_conf()->mon_session_timeout;
       }
       if (s->session_timeout < now) {
        dout(10) << " trimming session " << s->con << " " << s->name
@@ -5467,7 +5468,7 @@ vector<DaemonHealthMetric> Monitor::get_health_metrics()
   utime_t oldest_secs;
   const utime_t now = ceph_clock_now();
   auto too_old = now;
-  too_old -= g_conf->get_val<std::chrono::seconds>("mon_op_complaint_time").count();
+  too_old -= g_conf().get_val<std::chrono::seconds>("mon_op_complaint_time").count();
   int slow = 0;
   TrackedOpRef oldest_op;
   auto count_slow_ops = [&](TrackedOp& op) {
@@ -5601,12 +5602,12 @@ int Monitor::mkfs(bufferlist& osdmapbl)
     KeyRing keyring;
     string keyring_filename;
 
-    r = ceph_resolve_file_search(g_conf->keyring, keyring_filename);
+    r = ceph_resolve_file_search(g_conf()->keyring, keyring_filename);
     if (r) {
-      derr << "unable to find a keyring file on " << g_conf->keyring
+      derr << "unable to find a keyring file on " << g_conf()->keyring
           << ": " << cpp_strerror(r) << dendl;
-      if (g_conf->key != "") {
-       string keyring_plaintext = "[mon.]\n\tkey = " + g_conf->key +
+      if (g_conf()->key != "") {
+       string keyring_plaintext = "[mon.]\n\tkey = " + g_conf()->key +
          "\n\tcaps mon = \"allow *\"\n";
        bufferlist bl;
        bl.append(keyring_plaintext);
@@ -5625,7 +5626,7 @@ int Monitor::mkfs(bufferlist& osdmapbl)
     } else {
       r = keyring.load(g_ceph_context, keyring_filename);
       if (r < 0) {
-       derr << "unable to load initial keyring " << g_conf->keyring << dendl;
+       derr << "unable to load initial keyring " << g_conf()->keyring << dendl;
        return r;
       }
     }
@@ -5646,7 +5647,7 @@ int Monitor::mkfs(bufferlist& osdmapbl)
 int Monitor::write_default_keyring(bufferlist& bl)
 {
   ostringstream os;
-  os << g_conf->mon_data << "/keyring";
+  os << g_conf()->mon_data << "/keyring";
 
   int err = 0;
   int fd = ::open(os.str().c_str(), O_WRONLY|O_CREAT, 0600);
index 65413f4caf8017fd0dc343d893e9d651590bcafa..e078d691082e57e6542e8f45883eb340166325cc 100644 (file)
@@ -533,7 +533,7 @@ private:
     double abs_skew = std::fabs(skew_bound);
     if (abs)
       *abs = abs_skew;
-    return (abs_skew > g_conf->mon_clock_drift_allowed);
+    return (abs_skew > g_conf()->mon_clock_drift_allowed);
   }
 
   /**
index 93fa2ac5f57abc4c8c511867b181fa514eba070d..29ad0cda96b9a43ced2ed814029b9caa355b4855 100644 (file)
@@ -265,7 +265,7 @@ class MonitorDBStore
     KeyValueDB::Transaction dbt = db->get_transaction();
 
     if (do_dump) {
-      if (!g_conf->mon_debug_dump_json) {
+      if (!g_conf()->mon_debug_dump_json) {
         bufferlist bl;
         t->encode(bl);
         bl.write_fd(dump_fd_binary);
@@ -330,10 +330,10 @@ class MonitorDBStore
        * We will now randomly inject random delays.  We can safely sleep prior
        * to applying the transaction as it won't break the model.
        */
-      double delay_prob = g_conf->mon_inject_transaction_delay_probability;
+      double delay_prob = g_conf()->mon_inject_transaction_delay_probability;
       if (delay_prob && (rand() % 10000 < delay_prob * 10000.0)) {
         utime_t delay;
-        double delay_max = g_conf->mon_inject_transaction_delay_max;
+        double delay_max = g_conf()->mon_inject_transaction_delay_max;
         delay.set_from_double(delay_max * (double)(rand() % 10000) / 10000.0);
         lsubdout(g_ceph_context, mon, 1)
           << "apply_transaction will be delayed for " << delay
@@ -395,7 +395,7 @@ class MonitorDBStore
       last_key.first = prefix;
       last_key.second = key;
 
-      if (g_conf->mon_sync_debug) {
+      if (g_conf()->mon_sync_debug) {
        encode(prefix, crc_bl);
        encode(key, crc_bl);
        encode(value, crc_bl);
@@ -408,7 +408,7 @@ class MonitorDBStore
 
   public:
     __u32 crc() {
-      if (g_conf->mon_sync_debug)
+      if (g_conf()->mon_sync_debug)
        return crc_bl.crc32c(0);
       return 0;
     }
@@ -604,10 +604,10 @@ class MonitorDBStore
     }
     db.reset(db_ptr);
 
-    if (g_conf->mon_debug_dump_transactions) {
-      if (!g_conf->mon_debug_dump_json) {
+    if (g_conf()->mon_debug_dump_transactions) {
+      if (!g_conf()->mon_debug_dump_json) {
         dump_fd_binary = ::open(
-          g_conf->mon_debug_dump_location.c_str(),
+          g_conf()->mon_debug_dump_location.c_str(),
           O_CREAT|O_APPEND|O_WRONLY, 0644);
         if (dump_fd_binary < 0) {
           dump_fd_binary = -errno;
@@ -617,12 +617,12 @@ class MonitorDBStore
       } else {
         dump_fmt.reset();
         dump_fmt.open_array_section("dump");
-        dump_fd_json.open(g_conf->mon_debug_dump_location.c_str());
+        dump_fd_json.open(g_conf()->mon_debug_dump_location.c_str());
       }
       do_dump = true;
     }
     if (kv_type == "rocksdb")
-      db->init(g_conf->mon_rocksdb_options);
+      db->init(g_conf()->mon_rocksdb_options);
     else
       db->init();
 
@@ -663,7 +663,7 @@ class MonitorDBStore
     string kv_type;
     int r = read_meta("kv_backend", &kv_type);
     if (r < 0) {
-      kv_type = g_conf->mon_keyvaluedb;
+      kv_type = g_conf()->mon_keyvaluedb;
       r = write_meta("kv_backend", kv_type);
       if (r < 0)
        return r;
@@ -763,7 +763,7 @@ class MonitorDBStore
   ~MonitorDBStore() {
     assert(!is_open);
     if (do_dump) {
-      if (!g_conf->mon_debug_dump_json) {
+      if (!g_conf()->mon_debug_dump_json) {
         ::close(dump_fd_binary);
       } else {
         dump_fmt.close_section();
index aec6ec28de4dfcd77c01deb674e38ffcac32b0a0..245acde6e162e4e852d3ffdd4f93ba0e38b69d3f 100644 (file)
@@ -41,7 +41,7 @@ void MonmapMonitor::create_initial()
   pending_map = *mon->monmap;
   pending_map.epoch = 1;
 
-  if (g_conf->mon_debug_no_initial_persistent_features) {
+  if (g_conf()->mon_debug_no_initial_persistent_features) {
     derr << __func__ << " mon_debug_no_initial_persistent_features=true"
         << dendl;
   } else {
index 8aeb565329198b3f6dad4c7af48bd1031694674a..f90f32924590b7dcd8c4e5bf29948c2b47dab601 100644 (file)
@@ -271,8 +271,8 @@ OSDMonitor::OSDMonitor(
   const string& service_name)
  : PaxosService(mn, p, service_name),
    cct(cct),
-   inc_osd_cache(g_conf->mon_osd_cache_size),
-   full_osd_cache(g_conf->mon_osd_cache_size),
+   inc_osd_cache(g_conf()->mon_osd_cache_size),
+   full_osd_cache(g_conf()->mon_osd_cache_size),
    has_osdmap_manifest(false),
    mapper(mn->cct, &mn->cpu_tp)
 {}
@@ -323,16 +323,16 @@ void OSDMonitor::create_initial()
   newmap.flags |=
     CEPH_OSDMAP_RECOVERY_DELETES |
     CEPH_OSDMAP_PURGED_SNAPDIRS;
-  newmap.full_ratio = g_conf->mon_osd_full_ratio;
+  newmap.full_ratio = g_conf()->mon_osd_full_ratio;
   if (newmap.full_ratio > 1.0) newmap.full_ratio /= 100;
-  newmap.backfillfull_ratio = g_conf->mon_osd_backfillfull_ratio;
+  newmap.backfillfull_ratio = g_conf()->mon_osd_backfillfull_ratio;
   if (newmap.backfillfull_ratio > 1.0) newmap.backfillfull_ratio /= 100;
-  newmap.nearfull_ratio = g_conf->mon_osd_nearfull_ratio;
+  newmap.nearfull_ratio = g_conf()->mon_osd_nearfull_ratio;
   if (newmap.nearfull_ratio > 1.0) newmap.nearfull_ratio /= 100;
 
   // new cluster should require latest by default
-  if (g_conf->get_val<bool>("mon_debug_no_require_nautilus")) {
-    if (g_conf->mon_debug_no_require_mimic) {
+  if (g_conf().get_val<bool>("mon_debug_no_require_nautilus")) {
+    if (g_conf()->mon_debug_no_require_mimic) {
       derr << __func__ << " mon_debug_no_require_mimic=true and nautilus=true" << dendl;
       newmap.require_osd_release = CEPH_RELEASE_LUMINOUS;
     } else {
@@ -342,7 +342,7 @@ void OSDMonitor::create_initial()
   } else {
     newmap.require_osd_release = CEPH_RELEASE_NAUTILUS;
     int r = ceph_release_from_name(
-      g_conf->mon_osd_initial_require_min_compat_client.c_str());
+      g_conf()->mon_osd_initial_require_min_compat_client.c_str());
     if (r <= 0) {
       assert(0 == "mon_osd_initial_require_min_compat_client is not valid");
     }
@@ -536,7 +536,7 @@ void OSDMonitor::update_from_paxos(bool *need_bootstrap)
       t->erase("mkfs", "osdmap");
     }
 
-    if (tx_size > g_conf->mon_sync_max_payload_size*2) {
+    if (tx_size > g_conf()->mon_sync_max_payload_size*2) {
       mon->store->apply_transaction(t);
       t = MonitorDBStore::TransactionRef();
       tx_size = 0;
@@ -604,7 +604,7 @@ void OSDMonitor::start_mapping()
   if (!osdmap.get_pools().empty()) {
     auto fin = new C_UpdateCreatingPGs(this, osdmap.get_epoch());
     mapping_job = mapping.start_update(osdmap, mapper,
-                                      g_conf->mon_osd_mapping_pgs_per_chunk);
+                                      g_conf()->mon_osd_mapping_pgs_per_chunk);
     dout(10) << __func__ << " started mapping job " << mapping_job.get()
             << " at " << fin->start << dendl;
     mapping_job->set_finish_event(fin);
@@ -698,21 +698,21 @@ void OSDMonitor::create_pending()
   // safety checks (this shouldn't really happen)
   {
     if (osdmap.backfillfull_ratio <= 0) {
-      pending_inc.new_backfillfull_ratio = g_conf->mon_osd_backfillfull_ratio;
+      pending_inc.new_backfillfull_ratio = g_conf()->mon_osd_backfillfull_ratio;
       if (pending_inc.new_backfillfull_ratio > 1.0)
        pending_inc.new_backfillfull_ratio /= 100;
       dout(1) << __func__ << " setting backfillfull_ratio = "
              << pending_inc.new_backfillfull_ratio << dendl;
     }
     if (osdmap.full_ratio <= 0) {
-      pending_inc.new_full_ratio = g_conf->mon_osd_full_ratio;
+      pending_inc.new_full_ratio = g_conf()->mon_osd_full_ratio;
       if (pending_inc.new_full_ratio > 1.0)
         pending_inc.new_full_ratio /= 100;
       dout(1) << __func__ << " setting full_ratio = "
              << pending_inc.new_full_ratio << dendl;
     }
     if (osdmap.nearfull_ratio <= 0) {
-      pending_inc.new_nearfull_ratio = g_conf->mon_osd_nearfull_ratio;
+      pending_inc.new_nearfull_ratio = g_conf()->mon_osd_nearfull_ratio;
       if (pending_inc.new_nearfull_ratio > 1.0)
         pending_inc.new_nearfull_ratio /= 100;
       dout(1) << __func__ << " setting nearfull_ratio = "
@@ -815,7 +815,7 @@ OSDMonitor::update_pending_pgs(const OSDMap::Incremental& inc,
   }
 
   // process queue
-  unsigned max = std::max<int64_t>(1, g_conf->mon_osd_max_creating_pgs);
+  unsigned max = std::max<int64_t>(1, g_conf()->mon_osd_max_creating_pgs);
   const auto total = pending_creatings.pgs.size();
   while (pending_creatings.pgs.size() < max &&
         !pending_creatings.queue.empty()) {
@@ -900,10 +900,10 @@ void OSDMonitor::maybe_prime_pg_temp()
     unsigned estimate =
       mapping.get_osd_acting_pgs(*osds.begin()).size() * osds.size();
     if (estimate > mapping.get_num_pgs() *
-       g_conf->mon_osd_prime_pg_temp_max_estimate) {
+       g_conf()->mon_osd_prime_pg_temp_max_estimate) {
       dout(10) << __func__ << " estimate " << estimate << " pgs on "
               << osds.size() << " osds >= "
-              << g_conf->mon_osd_prime_pg_temp_max_estimate << " of total "
+              << g_conf()->mon_osd_prime_pg_temp_max_estimate << " of total "
               << mapping.get_num_pgs() << " pgs, all"
               << dendl;
       all = true;
@@ -921,19 +921,19 @@ void OSDMonitor::maybe_prime_pg_temp()
     dout(10) << __func__ << " no pools, no pg_temp priming" << dendl;
   } else if (all) {
     PrimeTempJob job(next, this);
-    mapper.queue(&job, g_conf->mon_osd_mapping_pgs_per_chunk);
-    if (job.wait_for(g_conf->mon_osd_prime_pg_temp_max_time)) {
+    mapper.queue(&job, g_conf()->mon_osd_mapping_pgs_per_chunk);
+    if (job.wait_for(g_conf()->mon_osd_prime_pg_temp_max_time)) {
       dout(10) << __func__ << " done in " << job.get_duration() << dendl;
     } else {
       dout(10) << __func__ << " did not finish in "
-              << g_conf->mon_osd_prime_pg_temp_max_time
+              << g_conf()->mon_osd_prime_pg_temp_max_time
               << ", stopping" << dendl;
       job.abort();
     }
   } else {
     dout(10) << __func__ << " " << osds.size() << " interesting osds" << dendl;
     utime_t stop = ceph_clock_now();
-    stop += g_conf->mon_osd_prime_pg_temp_max_time;
+    stop += g_conf()->mon_osd_prime_pg_temp_max_time;
     const int chunk = 1000;
     int n = chunk;
     std::unordered_set<pg_t> did_pgs;
@@ -949,7 +949,7 @@ void OSDMonitor::maybe_prime_pg_temp()
          n = chunk;
          if (ceph_clock_now() > stop) {
            dout(10) << __func__ << " consumed more than "
-                    << g_conf->mon_osd_prime_pg_temp_max_time
+                    << g_conf()->mon_osd_prime_pg_temp_max_time
                     << " seconds, stopping"
                     << dendl;
            return;
@@ -1038,11 +1038,11 @@ void OSDMonitor::encode_pending(MonitorDBStore::TransactionRef t)
              << mapping_job.get() << " is prior epoch "
              << mapping.get_epoch() << dendl;
     } else {
-      if (g_conf->mon_osd_prime_pg_temp) {
+      if (g_conf()->mon_osd_prime_pg_temp) {
        maybe_prime_pg_temp();
       }
     } 
-  } else if (g_conf->mon_osd_prime_pg_temp) {
+  } else if (g_conf()->mon_osd_prime_pg_temp) {
     dout(1) << __func__ << " skipping prime_pg_temp; mapping job did not start"
            << dendl;
   }
@@ -1615,7 +1615,7 @@ version_t OSDMonitor::get_trim_to() const
     }
   }
 
-  if (g_conf->get_val<bool>("mon_debug_block_osdmap_trim")) {
+  if (g_conf().get_val<bool>("mon_debug_block_osdmap_trim")) {
     dout(0) << __func__
             << " blocking osdmap trim"
                " ('mon_debug_block_osdmap_trim' set to 'true')"
@@ -1626,12 +1626,12 @@ version_t OSDMonitor::get_trim_to() const
   {
     epoch_t floor = get_min_last_epoch_clean();
     dout(10) << " min_last_epoch_clean " << floor << dendl;
-    if (g_conf->mon_osd_force_trim_to > 0 &&
-       g_conf->mon_osd_force_trim_to < (int)get_last_committed()) {
-      floor = g_conf->mon_osd_force_trim_to;
+    if (g_conf()->mon_osd_force_trim_to > 0 &&
+       g_conf()->mon_osd_force_trim_to < (int)get_last_committed()) {
+      floor = g_conf()->mon_osd_force_trim_to;
       dout(10) << " explicit mon_osd_force_trim_to = " << floor << dendl;
     }
-    unsigned min = g_conf->mon_min_osdmap_epochs;
+    unsigned min = g_conf()->mon_min_osdmap_epochs;
     if (floor + min > get_last_committed()) {
       if (min < get_last_committed())
        floor = get_last_committed() - min;
@@ -1719,11 +1719,11 @@ bool OSDMonitor::should_prune() const
   version_t first = get_first_committed();
   version_t last = get_last_committed();
   version_t min_osdmap_epochs =
-    g_conf->get_val<int64_t>("mon_min_osdmap_epochs");
+    g_conf().get_val<int64_t>("mon_min_osdmap_epochs");
   version_t prune_min =
-    g_conf->get_val<uint64_t>("mon_osdmap_full_prune_min");
+    g_conf().get_val<uint64_t>("mon_osdmap_full_prune_min");
   version_t prune_interval =
-    g_conf->get_val<uint64_t>("mon_osdmap_full_prune_interval");
+    g_conf().get_val<uint64_t>("mon_osdmap_full_prune_interval");
   version_t last_pinned = osdmap_manifest.get_last_pinned();
   version_t last_to_pin = last - min_osdmap_epochs;
 
@@ -1844,11 +1844,11 @@ void OSDMonitor::prune_init()
 bool OSDMonitor::_prune_sanitize_options() const
 {
   uint64_t prune_interval =
-    g_conf->get_val<uint64_t>("mon_osdmap_full_prune_interval");
+    g_conf().get_val<uint64_t>("mon_osdmap_full_prune_interval");
   uint64_t prune_min =
-    g_conf->get_val<uint64_t>("mon_osdmap_full_prune_min");
+    g_conf().get_val<uint64_t>("mon_osdmap_full_prune_min");
   uint64_t txsize =
-    g_conf->get_val<uint64_t>("mon_osdmap_full_prune_txsize");
+    g_conf().get_val<uint64_t>("mon_osdmap_full_prune_txsize");
 
   bool r = true;
 
@@ -1890,7 +1890,7 @@ bool OSDMonitor::_prune_sanitize_options() const
 }
 
 bool OSDMonitor::is_prune_enabled() const {
-  return g_conf->get_val<bool>("mon_osdmap_full_prune_enabled");
+  return g_conf().get_val<bool>("mon_osdmap_full_prune_enabled");
 }
 
 bool OSDMonitor::is_prune_supported() const {
@@ -1926,12 +1926,12 @@ bool OSDMonitor::do_prune(MonitorDBStore::TransactionRef tx)
   version_t first = get_first_committed();
   version_t last = get_last_committed();
 
-  version_t last_to_pin = last - g_conf->mon_min_osdmap_epochs;
+  version_t last_to_pin = last - g_conf()->mon_min_osdmap_epochs;
   version_t last_pinned = osdmap_manifest.get_last_pinned();
   uint64_t prune_interval =
-    g_conf->get_val<uint64_t>("mon_osdmap_full_prune_interval");
+    g_conf().get_val<uint64_t>("mon_osdmap_full_prune_interval");
   uint64_t txsize =
-    g_conf->get_val<uint64_t>("mon_osdmap_full_prune_txsize");
+    g_conf().get_val<uint64_t>("mon_osdmap_full_prune_txsize");
 
   prune_init();
 
@@ -2152,7 +2152,7 @@ bool OSDMonitor::preprocess_get_osdmap(MonOpRequestRef op)
   MOSDMap *reply = new MOSDMap(mon->monmap->fsid, features);
   epoch_t first = get_first_committed();
   epoch_t last = osdmap.get_epoch();
-  int max = g_conf->osd_map_message_max;
+  int max = g_conf()->osd_map_message_max;
   for (epoch_t e = std::max(first, m->get_full_first());
        e <= std::min(last, m->get_full_last()) && max > 0;
        ++e, --max) {
@@ -2367,9 +2367,9 @@ bool OSDMonitor::can_mark_down(int i)
   }
   int up = osdmap.get_num_up_osds() - pending_inc.get_net_marked_down(&osdmap);
   float up_ratio = (float)up / (float)num_osds;
-  if (up_ratio < g_conf->mon_osd_min_up_ratio) {
+  if (up_ratio < g_conf()->mon_osd_min_up_ratio) {
     dout(2) << __func__ << " current up_ratio " << up_ratio << " < min "
-           << g_conf->mon_osd_min_up_ratio
+           << g_conf()->mon_osd_min_up_ratio
            << ", will not mark osd." << i << " down" << dendl;
     return false;
   }
@@ -2417,14 +2417,14 @@ bool OSDMonitor::can_mark_out(int i)
   }
   int in = osdmap.get_num_in_osds() - pending_inc.get_net_marked_out(&osdmap);
   float in_ratio = (float)in / (float)num_osds;
-  if (in_ratio < g_conf->mon_osd_min_in_ratio) {
+  if (in_ratio < g_conf()->mon_osd_min_in_ratio) {
     if (i >= 0)
       dout(5) << __func__ << " current in_ratio " << in_ratio << " < min "
-             << g_conf->mon_osd_min_in_ratio
+             << g_conf()->mon_osd_min_in_ratio
              << ", will not mark osd." << i << " out" << dendl;
     else
       dout(5) << __func__ << " current in_ratio " << in_ratio << " < min "
-             << g_conf->mon_osd_min_in_ratio
+             << g_conf()->mon_osd_min_in_ratio
              << ", will not mark osds out" << dendl;
     return false;
   }
@@ -2472,16 +2472,16 @@ bool OSDMonitor::check_failure(utime_t now, int target_osd, failure_info_t& fi)
   }
 
   set<string> reporters_by_subtree;
-  auto reporter_subtree_level = g_conf->get_val<string>("mon_osd_reporter_subtree_level");
-  utime_t orig_grace(g_conf->osd_heartbeat_grace, 0);
+  auto reporter_subtree_level = g_conf().get_val<string>("mon_osd_reporter_subtree_level");
+  utime_t orig_grace(g_conf()->osd_heartbeat_grace, 0);
   utime_t max_failed_since = fi.get_failed_since();
   utime_t failed_for = now - max_failed_since;
 
   utime_t grace = orig_grace;
   double my_grace = 0, peer_grace = 0;
   double decay_k = 0;
-  if (g_conf->mon_osd_adjust_heartbeat_grace) {
-    double halflife = (double)g_conf->mon_osd_laggy_halflife;
+  if (g_conf()->mon_osd_adjust_heartbeat_grace) {
+    double halflife = (double)g_conf()->mon_osd_laggy_halflife;
     decay_k = ::log(.5) / halflife;
 
     // scale grace period based on historical probability of 'lagginess'
@@ -2512,7 +2512,7 @@ bool OSDMonitor::check_failure(utime_t now, int target_osd, failure_info_t& fi)
     } else {
       reporters_by_subtree.insert(iter->second);
     }
-    if (g_conf->mon_osd_adjust_heartbeat_grace) {
+    if (g_conf()->mon_osd_adjust_heartbeat_grace) {
       const osd_xinfo_t& xi = osdmap.get_xinfo(p->first);
       utime_t elapsed = now - xi.down_stamp;
       double decay = exp((double)elapsed * decay_k);
@@ -2520,7 +2520,7 @@ bool OSDMonitor::check_failure(utime_t now, int target_osd, failure_info_t& fi)
     }
   }
   
-  if (g_conf->mon_osd_adjust_heartbeat_grace) {
+  if (g_conf()->mon_osd_adjust_heartbeat_grace) {
     peer_grace /= (double)fi.reporters.size();
     grace += peer_grace;
   }
@@ -2532,7 +2532,7 @@ bool OSDMonitor::check_failure(utime_t now, int target_osd, failure_info_t& fi)
           << dendl;
 
   if (failed_for >= grace &&
-      reporters_by_subtree.size() >= g_conf->get_val<uint64_t>("mon_osd_min_down_reporters")) {
+      reporters_by_subtree.size() >= g_conf().get_val<uint64_t>("mon_osd_min_down_reporters")) {
     dout(1) << " we have enough reporters to mark osd." << target_osd
            << " down" << dendl;
     pending_inc.new_state[target_osd] = CEPH_OSD_UP;
@@ -2898,24 +2898,24 @@ bool OSDMonitor::prepare_boot(MonOpRequestRef op)
 
     osd_xinfo_t xi = osdmap.get_xinfo(from);
     if (m->boot_epoch == 0) {
-      xi.laggy_probability *= (1.0 - g_conf->mon_osd_laggy_weight);
-      xi.laggy_interval *= (1.0 - g_conf->mon_osd_laggy_weight);
+      xi.laggy_probability *= (1.0 - g_conf()->mon_osd_laggy_weight);
+      xi.laggy_interval *= (1.0 - g_conf()->mon_osd_laggy_weight);
       dout(10) << " not laggy, new xi " << xi << dendl;
     } else {
       if (xi.down_stamp.sec()) {
         int interval = ceph_clock_now().sec() -
          xi.down_stamp.sec();
-        if (g_conf->mon_osd_laggy_max_interval &&
-           (interval > g_conf->mon_osd_laggy_max_interval)) {
-          interval =  g_conf->mon_osd_laggy_max_interval;
+        if (g_conf()->mon_osd_laggy_max_interval &&
+           (interval > g_conf()->mon_osd_laggy_max_interval)) {
+          interval =  g_conf()->mon_osd_laggy_max_interval;
         }
         xi.laggy_interval =
-         interval * g_conf->mon_osd_laggy_weight +
-         xi.laggy_interval * (1.0 - g_conf->mon_osd_laggy_weight);
+         interval * g_conf()->mon_osd_laggy_weight +
+         xi.laggy_interval * (1.0 - g_conf()->mon_osd_laggy_weight);
       }
       xi.laggy_probability =
-       g_conf->mon_osd_laggy_weight +
-       xi.laggy_probability * (1.0 - g_conf->mon_osd_laggy_weight);
+       g_conf()->mon_osd_laggy_weight +
+       xi.laggy_probability * (1.0 - g_conf()->mon_osd_laggy_weight);
       dout(10) << " laggy, now xi " << xi << dendl;
     }
 
@@ -2926,10 +2926,10 @@ bool OSDMonitor::prepare_boot(MonOpRequestRef op)
       xi.features = m->get_connection()->get_features();
 
     // mark in?
-    if ((g_conf->mon_osd_auto_mark_auto_out_in &&
+    if ((g_conf()->mon_osd_auto_mark_auto_out_in &&
         (oldstate & CEPH_OSD_AUTOOUT)) ||
-       (g_conf->mon_osd_auto_mark_new_in && (oldstate & CEPH_OSD_NEW)) ||
-       (g_conf->mon_osd_auto_mark_in)) {
+       (g_conf()->mon_osd_auto_mark_new_in && (oldstate & CEPH_OSD_NEW)) ||
+       (g_conf()->mon_osd_auto_mark_in)) {
       if (can_mark_in(from)) {
        if (osdmap.osd_xinfo[from].old_weight > 0) {
          pending_inc.new_weight[from] = osdmap.osd_xinfo[from].old_weight;
@@ -3575,7 +3575,7 @@ void OSDMonitor::send_incremental(epoch_t first,
   }
 
   while (first <= osdmap.get_epoch()) {
-    epoch_t last = std::min<epoch_t>(first + g_conf->osd_map_message_max - 1,
+    epoch_t last = std::min<epoch_t>(first + g_conf()->osd_map_message_max - 1,
                                     osdmap.get_epoch());
     MOSDMap *m = build_incremental(first, last, features);
 
@@ -3761,7 +3761,7 @@ int OSDMonitor::get_full_from_pinned_map(version_t ver, bufferlist& bl)
     ceph_assert(err == 0);
 
     // this block performs paranoid checks on map retrieval
-    if (g_conf->get_val<bool>("mon_debug_extra_checks") &&
+    if (g_conf().get_val<bool>("mon_debug_extra_checks") &&
         inc.full_crc != 0) {
 
       uint64_t f = encode_features;
@@ -4137,7 +4137,7 @@ void OSDMonitor::tick()
   /* can_mark_out() checks if we can mark osds as being out. The -1 has no
    * influence at all. The decision is made based on the ratio of "in" osds,
    * and the function returns false if this ratio is lower that the minimum
-   * ratio set by g_conf->mon_osd_min_in_ratio. So it's not really up to us.
+   * ratio set by g_conf()->mon_osd_min_in_ratio. So it's not really up to us.
    */
   if (can_mark_out(-1)) {
     set<int> down_cache;  // quick cache of down subtrees
@@ -4152,14 +4152,14 @@ void OSDMonitor::tick()
       if (osdmap.is_down(o) &&
          osdmap.is_in(o) &&
          can_mark_out(o)) {
-       utime_t orig_grace(g_conf->mon_osd_down_out_interval, 0);
+       utime_t orig_grace(g_conf()->mon_osd_down_out_interval, 0);
        utime_t grace = orig_grace;
        double my_grace = 0.0;
 
-       if (g_conf->mon_osd_adjust_down_out_interval) {
+       if (g_conf()->mon_osd_adjust_down_out_interval) {
          // scale grace period the same way we do the heartbeat grace.
          const osd_xinfo_t& xi = osdmap.get_xinfo(o);
-         double halflife = (double)g_conf->mon_osd_laggy_halflife;
+         double halflife = (double)g_conf()->mon_osd_laggy_halflife;
          double decay_k = ::log(.5) / halflife;
          double decay = exp((double)down * decay_k);
          dout(20) << "osd." << o << " laggy halflife " << halflife << " decay_k " << decay_k
@@ -4169,11 +4169,11 @@ void OSDMonitor::tick()
        }
 
        // is this an entire large subtree down?
-       if (g_conf->mon_osd_down_out_subtree_limit.length()) {
-         int type = osdmap.crush->get_type_id(g_conf->mon_osd_down_out_subtree_limit);
+       if (g_conf()->mon_osd_down_out_subtree_limit.length()) {
+         int type = osdmap.crush->get_type_id(g_conf()->mon_osd_down_out_subtree_limit);
          if (type > 0) {
            if (osdmap.containing_subtree_is_down(cct, o, type, &down_cache)) {
-             dout(10) << "tick entire containing " << g_conf->mon_osd_down_out_subtree_limit
+             dout(10) << "tick entire containing " << g_conf()->mon_osd_down_out_subtree_limit
                       << " subtree for osd." << o << " is down; resetting timer" << dendl;
              // reset timer, too.
              down_pending_out[o] = now;
@@ -4183,13 +4183,13 @@ void OSDMonitor::tick()
        }
 
         bool down_out = !osdmap.is_destroyed(o) &&
-          g_conf->mon_osd_down_out_interval > 0 && down.sec() >= grace;
+          g_conf()->mon_osd_down_out_interval > 0 && down.sec() >= grace;
         bool destroyed_out = osdmap.is_destroyed(o) &&
-          g_conf->mon_osd_destroyed_out_interval > 0 &&
+          g_conf()->mon_osd_destroyed_out_interval > 0 &&
         // this is not precise enough as we did not make a note when this osd
         // was marked as destroyed, but let's not bother with that
         // complexity for now.
-          down.sec() >= g_conf->mon_osd_destroyed_out_interval;
+          down.sec() >= g_conf()->mon_osd_destroyed_out_interval;
         if (down_out || destroyed_out) {
          dout(10) << "tick marking osd." << o << " OUT after " << down
                   << " sec (target " << grace << " = " << orig_grace << " + " << my_grace << ")" << dendl;
@@ -4245,7 +4245,7 @@ void OSDMonitor::tick()
 bool OSDMonitor::handle_osd_timeouts(const utime_t &now,
                                     std::map<int,utime_t> &last_osd_report)
 {
-  utime_t timeo(g_conf->mon_osd_report_timeout, 0);
+  utime_t timeo(g_conf()->mon_osd_report_timeout, 0);
   if (now - mon->get_leader_since() < timeo) {
     // We haven't been the leader for long enough to consider OSD timeouts
     return false;
@@ -5785,7 +5785,7 @@ bool OSDMonitor::try_prune_purged_snaps()
     return false;  // we already pruned for this epoch
   }
 
-  unsigned max_prune = cct->_conf->get_val<uint64_t>(
+  unsigned max_prune = cct->_conf.get_val<uint64_t>(
     "mon_max_snap_prune_per_epoch");
   if (!max_prune) {
     max_prune = 100000;
@@ -6011,7 +6011,7 @@ int OSDMonitor::normalize_profile(const string& profilename,
   ErasureCodeProfile::const_iterator plugin = profile.find("plugin");
   check_legacy_ec_plugin(plugin->second, profilename);
   int err = instance.factory(plugin->second,
-                            g_conf->get_val<std::string>("erasure_code_dir"),
+                            g_conf().get_val<std::string>("erasure_code_dir"),
                             profile, &erasure_code, ss);
   if (err) {
     return err;
@@ -6104,7 +6104,7 @@ int OSDMonitor::get_erasure_code(const string &erasure_code_profile,
   check_legacy_ec_plugin(plugin->second, erasure_code_profile);
   ErasureCodePluginRegistry &instance = ErasureCodePluginRegistry::instance();
   return instance.factory(plugin->second,
-                         g_conf->get_val<std::string>("erasure_code_dir"),
+                         g_conf().get_val<std::string>("erasure_code_dir"),
                          profile, erasure_code, ss);
 }
 
@@ -6210,7 +6210,7 @@ int OSDMonitor::parse_erasure_code_profile(const vector<string> &erasure_code_pr
                                           map<string,string> *erasure_code_profile_map,
                                           ostream *ss)
 {
-  int r = g_conf->with_val<string>("osd_pool_default_erasure_code_profile",
+  int r = g_conf().with_val<string>("osd_pool_default_erasure_code_profile",
                                   get_json_str_map,
                                   *ss,
                                   erasure_code_profile_map,
@@ -6255,8 +6255,8 @@ int OSDMonitor::prepare_pool_size(const unsigned pool_type,
   int err = 0;
   switch (pool_type) {
   case pg_pool_t::TYPE_REPLICATED:
-    *size = g_conf->get_val<uint64_t>("osd_pool_default_size");
-    *min_size = g_conf->get_osd_pool_default_min_size();
+    *size = g_conf().get_val<uint64_t>("osd_pool_default_size");
+    *min_size = g_conf().get_osd_pool_default_min_size();
     break;
   case pg_pool_t::TYPE_ERASURE:
     {
@@ -6295,7 +6295,7 @@ int OSDMonitor::prepare_pool_stripe_width(const unsigned pool_type,
       if (err)
        break;
       uint32_t data_chunks = erasure_code->get_data_chunk_count();
-      uint32_t stripe_unit = g_conf->get_val<Option::size_t>("osd_pool_erasure_code_stripe_unit");
+      uint32_t stripe_unit = g_conf().get_val<Option::size_t>("osd_pool_erasure_code_stripe_unit");
       auto it = profile.find("stripe_unit");
       if (it != profile.end()) {
        string err_str;
@@ -6407,7 +6407,7 @@ int OSDMonitor::get_crush_rule(const string &rule_name,
 
 int OSDMonitor::check_pg_num(int64_t pool, int pg_num, int size, ostream *ss)
 {
-  auto max_pgs_per_osd = g_conf->get_val<uint64_t>("mon_max_pg_per_osd");
+  auto max_pgs_per_osd = g_conf().get_val<uint64_t>("mon_max_pg_per_osd");
   auto num_osds = std::max(osdmap.get_num_in_osds(), 3u);   // assume min cluster size 3
   auto max_pgs = max_pgs_per_osd * num_osds;
   uint64_t projected = 0;
@@ -6463,12 +6463,12 @@ int OSDMonitor::prepare_new_pool(string& name, uint64_t auid,
   if (name.length() == 0)
     return -EINVAL;
   if (pg_num == 0)
-    pg_num = g_conf->get_val<uint64_t>("osd_pool_default_pg_num");
+    pg_num = g_conf().get_val<uint64_t>("osd_pool_default_pg_num");
   if (pgp_num == 0)
-    pgp_num = g_conf->get_val<uint64_t>("osd_pool_default_pgp_num");
-  if (pg_num > g_conf->get_val<uint64_t>("mon_max_pool_pg_num")) {
+    pgp_num = g_conf().get_val<uint64_t>("osd_pool_default_pgp_num");
+  if (pg_num > g_conf().get_val<uint64_t>("mon_max_pool_pg_num")) {
     *ss << "'pg_num' must be greater than 0 and less than or equal to "
-        << g_conf->get_val<uint64_t>("mon_max_pool_pg_num")
+        << g_conf().get_val<uint64_t>("mon_max_pool_pg_num")
         << " (you may adjust 'mon max pool pg num' for higher values)";
     return -ERANGE;
   }
@@ -6488,7 +6488,7 @@ int OSDMonitor::prepare_new_pool(string& name, uint64_t auid,
     dout(10) << "prepare_pool_crush_rule returns " << r << dendl;
     return r;
   }
-  if (g_conf->mon_osd_crush_smoke_test) {
+  if (g_conf()->mon_osd_crush_smoke_test) {
     CrushWrapper newcrush;
     _get_pending_crush(newcrush);
     ostringstream err;
@@ -6497,7 +6497,7 @@ int OSDMonitor::prepare_new_pool(string& name, uint64_t auid,
     tester.set_max_x(50);
     tester.set_rule(crush_rule);
     auto start = ceph::coarse_mono_clock::now();
-    r = tester.test_with_fork(g_conf->mon_lease);
+    r = tester.test_with_fork(g_conf()->mon_lease);
     auto duration = ceph::coarse_mono_clock::now() - start;
     if (r < 0) {
       dout(10) << "tester.test_with_fork returns " << r
@@ -6541,7 +6541,7 @@ int OSDMonitor::prepare_new_pool(string& name, uint64_t auid,
         fread = true;
         break;
       case FAST_READ_DEFAULT:
-        fread = g_conf->mon_osd_pool_ec_fast_read;
+        fread = g_conf()->mon_osd_pool_ec_fast_read;
         break;
       default:
         *ss << "invalid fast_read setting: " << fast_read;
@@ -6564,16 +6564,16 @@ int OSDMonitor::prepare_new_pool(string& name, uint64_t auid,
   pi->create_time = ceph_clock_now();
   pi->type = pool_type;
   pi->fast_read = fread; 
-  pi->flags = g_conf->osd_pool_default_flags;
-  if (g_conf->osd_pool_default_flag_hashpspool)
+  pi->flags = g_conf()->osd_pool_default_flags;
+  if (g_conf()->osd_pool_default_flag_hashpspool)
     pi->set_flag(pg_pool_t::FLAG_HASHPSPOOL);
-  if (g_conf->osd_pool_default_flag_nodelete)
+  if (g_conf()->osd_pool_default_flag_nodelete)
     pi->set_flag(pg_pool_t::FLAG_NODELETE);
-  if (g_conf->osd_pool_default_flag_nopgchange)
+  if (g_conf()->osd_pool_default_flag_nopgchange)
     pi->set_flag(pg_pool_t::FLAG_NOPGCHANGE);
-  if (g_conf->osd_pool_default_flag_nosizechange)
+  if (g_conf()->osd_pool_default_flag_nosizechange)
     pi->set_flag(pg_pool_t::FLAG_NOSIZECHANGE);
-  if (g_conf->osd_pool_use_gmt_hitset)
+  if (g_conf()->osd_pool_use_gmt_hitset)
     pi->use_gmt_hitset = true;
   else
     pi->use_gmt_hitset = false;
@@ -6594,13 +6594,13 @@ int OSDMonitor::prepare_new_pool(string& name, uint64_t auid,
   }
   pi->stripe_width = stripe_width;
   pi->cache_target_dirty_ratio_micro =
-    g_conf->osd_pool_default_cache_target_dirty_ratio * 1000000;
+    g_conf()->osd_pool_default_cache_target_dirty_ratio * 1000000;
   pi->cache_target_dirty_high_ratio_micro =
-    g_conf->osd_pool_default_cache_target_dirty_high_ratio * 1000000;
+    g_conf()->osd_pool_default_cache_target_dirty_high_ratio * 1000000;
   pi->cache_target_full_ratio_micro =
-    g_conf->osd_pool_default_cache_target_full_ratio * 1000000;
-  pi->cache_min_flush_age = g_conf->osd_pool_default_cache_min_flush_age;
-  pi->cache_min_evict_age = g_conf->osd_pool_default_cache_min_evict_age;
+    g_conf()->osd_pool_default_cache_target_full_ratio * 1000000;
+  pi->cache_min_flush_age = g_conf()->osd_pool_default_cache_min_flush_age;
+  pi->cache_min_evict_age = g_conf()->osd_pool_default_cache_min_evict_age;
   pending_inc.new_pool_names[pool] = name;
   return 0;
 }
@@ -6760,9 +6760,9 @@ int OSDMonitor::prepare_command_pool_set(const cmdmap_t& cmdmap,
        return -EEXIST;
       return 0;
     }
-    if (static_cast<uint64_t>(n) > g_conf->get_val<uint64_t>("mon_max_pool_pg_num")) {
+    if (static_cast<uint64_t>(n) > g_conf().get_val<uint64_t>("mon_max_pool_pg_num")) {
       ss << "'pg_num' must be greater than 0 and less than or equal to "
-         << g_conf->get_val<uint64_t>("mon_max_pool_pg_num")
+         << g_conf().get_val<uint64_t>("mon_max_pool_pg_num")
          << " (you may adjust 'mon max pool pg num' for higher values)";
       return -ERANGE;
     }
@@ -6779,11 +6779,11 @@ int OSDMonitor::prepare_command_pool_set(const cmdmap_t& cmdmap,
     }
     int expected_osds = std::min(p.get_pg_num(), osdmap.get_num_osds());
     int64_t new_pgs = n - p.get_pg_num();
-    if (new_pgs > g_conf->mon_osd_max_split_count * expected_osds) {
+    if (new_pgs > g_conf()->mon_osd_max_split_count * expected_osds) {
       ss << "specified pg_num " << n << " is too large (creating "
         << new_pgs << " new PGs on ~" << expected_osds
         << " OSDs exceeds per-OSD max with mon_osd_max_split_count of "
-         << g_conf->mon_osd_max_split_count << ')';
+         << g_conf()->mon_osd_max_split_count << ')';
       return -E2BIG;
     }
     p.set_pg_num(n);
@@ -6863,7 +6863,7 @@ int OSDMonitor::prepare_command_pool_set(const cmdmap_t& cmdmap,
        return err;
       if (val == "bloom") {
        BloomHitSet::Params *bsp = new BloomHitSet::Params;
-       bsp->set_fpp(g_conf->get_val<double>("osd_pool_default_hit_set_bloom_fpp"));
+       bsp->set_fpp(g_conf().get_val<double>("osd_pool_default_hit_set_bloom_fpp"));
        p.hit_set_params = HitSet::Params(bsp);
       } else if (val == "explicit_hash")
        p.hit_set_params = HitSet::Params(new ExplicitHashHitSet::Params);
@@ -6910,7 +6910,7 @@ int OSDMonitor::prepare_command_pool_set(const cmdmap_t& cmdmap,
       return -EINVAL;
     }
     stringstream err;
-    if (!g_conf->mon_debug_no_require_bluestore_for_ec_overwrites &&
+    if (!g_conf()->mon_debug_no_require_bluestore_for_ec_overwrites &&
        !is_pool_currently_all_bluestore(pool, p, &err)) {
       ss << "pool must only be stored on bluestore for scrubbing to work: " << err.str();
       return -EINVAL;
@@ -8129,7 +8129,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       goto reply;
     }
 
-    if (g_conf->mon_osd_crush_smoke_test) {
+    if (g_conf()->mon_osd_crush_smoke_test) {
       // sanity check: test some inputs to make sure this map isn't
       // totally broken
       dout(10) << " testing map" << dendl;
@@ -8138,7 +8138,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       tester.set_min_x(0);
       tester.set_max_x(50);
       auto start = ceph::coarse_mono_clock::now();
-      int r = tester.test_with_fork(g_conf->mon_lease);
+      int r = tester.test_with_fork(g_conf()->mon_lease);
       auto duration = ceph::coarse_mono_clock::now() - start;
       if (r < 0) {
        dout(10) << " tester.test_with_fork returns " << r
@@ -9392,10 +9392,10 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       goto reply;
     }
 
-    if (newmax > g_conf->mon_max_osd) {
+    if (newmax > g_conf()->mon_max_osd) {
       err = -ERANGE;
       ss << "cannot set max_osd to " << newmax << " which is > conf.mon_max_osd ("
-        << g_conf->mon_max_osd << ")";
+        << g_conf()->mon_max_osd << ")";
       goto reply;
     }
 
@@ -10884,7 +10884,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
        double d;
        // default one hour
        cmd_getval(cct, cmdmap, "expire", d,
-          g_conf->mon_osd_blacklist_default_expire);
+          g_conf()->mon_osd_blacklist_default_expire);
        expires += d;
 
        pending_inc.new_blacklist[addr] = expires;
@@ -11013,7 +11013,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     string pool_type_str;
     cmd_getval(cct, cmdmap, "pool_type", pool_type_str);
     if (pool_type_str.empty())
-      pool_type_str = g_conf->get_val<string>("osd_pool_default_type");
+      pool_type_str = g_conf().get_val<string>("osd_pool_default_type");
 
     string poolstr;
     cmd_getval(cct, cmdmap, "pool", poolstr);
@@ -11290,7 +11290,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     }
     if ((!tp->removed_snaps.empty() || !tp->snaps.empty()) &&
        ((force_nonempty != "--force-nonempty") ||
-        (!g_conf->mon_debug_unsafe_allow_tier_with_nonempty_snaps))) {
+        (!g_conf()->mon_debug_unsafe_allow_tier_with_nonempty_snaps))) {
       ss << "tier pool '" << tierpoolstr << "' has snapshot state; it cannot be added as a tier without breaking the pool";
       err = -ENOTEMPTY;
       goto reply;
@@ -11663,7 +11663,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       err = -ENOTEMPTY;
       goto reply;
     }
-    auto& modestr = g_conf->get_val<string>("osd_tier_default_cache_mode");
+    auto& modestr = g_conf().get_val<string>("osd_tier_default_cache_mode");
     pg_pool_t::cache_mode_t mode = pg_pool_t::get_cache_mode_from_str(modestr);
     if (mode < 0) {
       ss << "osd tier cache default mode '" << modestr << "' is not a valid cache mode";
@@ -11672,10 +11672,10 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     }
     HitSet::Params hsp;
     auto& cache_hit_set_type =
-      g_conf->get_val<string>("osd_tier_default_cache_hit_set_type");
+      g_conf().get_val<string>("osd_tier_default_cache_hit_set_type");
     if (cache_hit_set_type == "bloom") {
       BloomHitSet::Params *bsp = new BloomHitSet::Params;
-      bsp->set_fpp(g_conf->get_val<double>("osd_pool_default_hit_set_bloom_fpp"));
+      bsp->set_fpp(g_conf().get_val<double>("osd_pool_default_hit_set_bloom_fpp"));
       hsp = HitSet::Params(bsp);
     } else if (cache_hit_set_type == "explicit_hash") {
       hsp = HitSet::Params(new ExplicitHashHitSet::Params);
@@ -11701,12 +11701,12 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     ntp->set_last_force_op_resend(pending_inc.epoch);
     ntp->tier_of = pool_id;
     ntp->cache_mode = mode;
-    ntp->hit_set_count = g_conf->get_val<uint64_t>("osd_tier_default_cache_hit_set_count");
-    ntp->hit_set_period = g_conf->get_val<uint64_t>("osd_tier_default_cache_hit_set_period");
-    ntp->min_read_recency_for_promote = g_conf->get_val<uint64_t>("osd_tier_default_cache_min_read_recency_for_promote");
-    ntp->min_write_recency_for_promote = g_conf->get_val<uint64_t>("osd_tier_default_cache_min_write_recency_for_promote");
-    ntp->hit_set_grade_decay_rate = g_conf->get_val<uint64_t>("osd_tier_default_cache_hit_set_grade_decay_rate");
-    ntp->hit_set_search_last_n = g_conf->get_val<uint64_t>("osd_tier_default_cache_hit_set_search_last_n");
+    ntp->hit_set_count = g_conf().get_val<uint64_t>("osd_tier_default_cache_hit_set_count");
+    ntp->hit_set_period = g_conf().get_val<uint64_t>("osd_tier_default_cache_hit_set_period");
+    ntp->min_read_recency_for_promote = g_conf().get_val<uint64_t>("osd_tier_default_cache_min_read_recency_for_promote");
+    ntp->min_write_recency_for_promote = g_conf().get_val<uint64_t>("osd_tier_default_cache_min_write_recency_for_promote");
+    ntp->hit_set_grade_decay_rate = g_conf().get_val<uint64_t>("osd_tier_default_cache_hit_set_grade_decay_rate");
+    ntp->hit_set_search_last_n = g_conf().get_val<uint64_t>("osd_tier_default_cache_hit_set_search_last_n");
     ntp->hit_set_params = hsp;
     ntp->target_max_bytes = size;
     ss << "pool '" << tierpoolstr << "' is now (or already was) a cache tier of '" << poolstr << "'";
@@ -12167,7 +12167,7 @@ int OSDMonitor::_check_remove_pool(int64_t pool_id, const pg_pool_t& pool,
     return -EBUSY;
   }
 
-  if (!g_conf->mon_allow_pool_delete) {
+  if (!g_conf()->mon_allow_pool_delete) {
     *ss << "pool deletion is disabled; you must first set the mon_allow_pool_delete config option to true before you can destroy a pool";
     return -EPERM;
   }
@@ -12308,7 +12308,7 @@ int OSDMonitor::_prepare_remove_pool(
     return 0;
   }
 
-  if (g_conf->mon_fake_pool_delete && !no_fake) {
+  if (g_conf()->mon_fake_pool_delete && !no_fake) {
     string old_name = osdmap.get_pool_name(pool);
     string new_name = old_name + "." + stringify(pool) + ".DELETED";
     dout(1) << __func__ << " faking pool deletion: renaming " << pool << " "
index aba19b5f73a0f74c306ec99e0ace6f914c08a741..1c622625eb104d010ebbc7f5174f6b9b83d00e72 100644 (file)
@@ -1119,7 +1119,7 @@ void PGMap::apply_incremental(CephContext *cct, const Incremental& inc)
     stamp_delta += delta_t;
     pg_sum_delta.stats.add(d.stats);
     auto smooth_intervals =
-      cct ? cct->_conf->get_val<uint64_t>("mon_stat_smooth_intervals") : 1;
+      cct ? cct->_conf.get_val<uint64_t>("mon_stat_smooth_intervals") : 1;
     if (pg_sum_deltas.size() > smooth_intervals) {
       pg_sum_delta.stats.sub(pg_sum_deltas.front().first.stats);
       stamp_delta -= pg_sum_deltas.front().second;
@@ -1961,7 +1961,7 @@ void PGMap::update_delta(
     *result_ts_delta += delta_t;
     result_pool_delta->stats.add(d.stats);
   }
-  size_t s = cct ? cct->_conf->get_val<uint64_t>("mon_stat_smooth_intervals") : 1;
+  size_t s = cct ? cct->_conf.get_val<uint64_t>("mon_stat_smooth_intervals") : 1;
   if (delta_avg_list->size() > s) {
     result_pool_delta->stats.sub(delta_avg_list->front().first.stats);
     *result_ts_delta -= delta_avg_list->front().second;
@@ -2180,7 +2180,7 @@ void PGMap::get_health_checks(
   health_check_map_t *checks) const
 {
   utime_t now = ceph_clock_now();
-  const auto max = cct->_conf->get_val<uint64_t>("mon_health_max_detail");
+  const auto max = cct->_conf.get_val<uint64_t>("mon_health_max_detail");
   const auto& pools = osdmap.get_pools();
 
   typedef enum pg_consequence_t {
@@ -2286,7 +2286,7 @@ void PGMap::get_health_checks(
     }
   }
 
-  utime_t cutoff = now - utime_t(cct->_conf->get_val<int64_t>("mon_pg_stuck_threshold"), 0);
+  utime_t cutoff = now - utime_t(cct->_conf.get_val<int64_t>("mon_pg_stuck_threshold"), 0);
   // Loop over all PGs, if there are any possibly-unhealthy states in there
   if (!possible_responses.empty()) {
     for (const auto& i : pg_stat) {
@@ -2527,7 +2527,7 @@ void PGMap::get_health_checks(
   unsigned num_in = osdmap.get_num_in_osds();
   auto sum_pg_up = std::max(static_cast<size_t>(pg_sum.up), pg_stat.size());
   const auto min_pg_per_osd =
-    cct->_conf->get_val<uint64_t>("mon_pg_warn_min_per_osd");
+    cct->_conf.get_val<uint64_t>("mon_pg_warn_min_per_osd");
   if (num_in && min_pg_per_osd > 0 && osdmap.get_pools().size() > 0) {
     auto per = sum_pg_up / num_in;
     if (per < min_pg_per_osd && per) {
@@ -2539,7 +2539,7 @@ void PGMap::get_health_checks(
   }
 
   // TOO_MANY_PGS
-  auto max_pg_per_osd = cct->_conf->get_val<uint64_t>("mon_max_pg_per_osd");
+  auto max_pg_per_osd = cct->_conf.get_val<uint64_t>("mon_max_pg_per_osd");
   if (num_in && max_pg_per_osd > 0) {
     auto per = sum_pg_up / num_in;
     if (per > max_pg_per_osd) {
@@ -2555,11 +2555,11 @@ void PGMap::get_health_checks(
   if (!pg_stat.empty()) {
     list<string> pgp_detail, many_detail;
     const auto mon_pg_warn_min_objects =
-      cct->_conf->get_val<int64_t>("mon_pg_warn_min_objects");
+      cct->_conf.get_val<int64_t>("mon_pg_warn_min_objects");
     const auto mon_pg_warn_min_pool_objects =
-      cct->_conf->get_val<int64_t>("mon_pg_warn_min_pool_objects");
+      cct->_conf.get_val<int64_t>("mon_pg_warn_min_pool_objects");
     const auto mon_pg_warn_max_object_skew =
-      cct->_conf->get_val<double>("mon_pg_warn_max_object_skew");
+      cct->_conf.get_val<double>("mon_pg_warn_max_object_skew");
     for (auto p = pg_pool_sum.begin();
          p != pg_pool_sum.end();
          ++p) {
@@ -2610,8 +2610,8 @@ void PGMap::get_health_checks(
   // POOL_FULL
   // POOL_NEAR_FULL
   {
-    float warn_threshold = (float)g_conf->get_val<int64_t>("mon_pool_quota_warn_threshold")/100;
-    float crit_threshold = (float)g_conf->get_val<int64_t>("mon_pool_quota_crit_threshold")/100;
+    float warn_threshold = (float)g_conf().get_val<int64_t>("mon_pool_quota_warn_threshold")/100;
+    float crit_threshold = (float)g_conf().get_val<int64_t>("mon_pool_quota_crit_threshold")/100;
     list<string> full_detail, nearfull_detail;
     unsigned full_pools = 0, nearfull_pools = 0;
     for (auto it : pools) {
@@ -2900,7 +2900,7 @@ void PGMap::get_health_checks(
   }
 
   // POOL_APP
-  if (g_conf->get_val<bool>("mon_warn_on_pool_no_app")) {
+  if (g_conf().get_val<bool>("mon_warn_on_pool_no_app")) {
     list<string> detail;
     for (auto &it : pools) {
       const pg_pool_t &pool = it.second;
@@ -3171,7 +3171,7 @@ int process_pg_map_command(
       stuckop_vec.push_back("unclean");
     int64_t threshold;
     cmd_getval(g_ceph_context, cmdmap, "threshold", threshold,
-               g_conf->get_val<int64_t>("mon_pg_stuck_threshold"));
+               g_conf().get_val<int64_t>("mon_pg_stuck_threshold"));
 
     if (pg_map.dump_stuck_pg_stats(ds, f, (int)threshold, stuckop_vec) < 0) {
       *ss << "failed";
@@ -3368,7 +3368,7 @@ void PGMapUpdater::check_down_pgs(
   // if a large number of osds changed state, just iterate over the whole
   // pg map.
   if (need_check_down_pg_osds.size() > (unsigned)osdmap.get_num_osds() *
-      g_conf->get_val<double>("mon_pg_check_down_all_threshold")) {
+      g_conf().get_val<double>("mon_pg_check_down_all_threshold")) {
     check_all = true;
   }
 
@@ -3446,7 +3446,7 @@ int reweight::by_utilization(
       }
     }
 
-    if (!num_osds || (num_pg_copies / num_osds < g_conf->mon_reweight_min_pgs_per_osd)) {
+    if (!num_osds || (num_pg_copies / num_osds < g_conf()->mon_reweight_min_pgs_per_osd)) {
       *ss << "Refusing to reweight: we only have " << num_pg_copies
          << " PGs across " << num_osds << " osds!\n";
       return -EDOM;
@@ -3457,13 +3457,13 @@ int reweight::by_utilization(
     // by osd utilization
     int num_osd = std::max<size_t>(1, pgm.osd_stat.size());
     if ((uint64_t)pgm.osd_sum.kb * 1024 / num_osd
-       < g_conf->mon_reweight_min_bytes_per_osd) {
+       < g_conf()->mon_reweight_min_bytes_per_osd) {
       *ss << "Refusing to reweight: we only have " << pgm.osd_sum.kb
          << " kb across all osds!\n";
       return -EDOM;
     }
     if ((uint64_t)pgm.osd_sum.kb_used * 1024 / num_osd
-       < g_conf->mon_reweight_min_bytes_per_osd) {
+       < g_conf()->mon_reweight_min_bytes_per_osd) {
       *ss << "Refusing to reweight: we only have " << pgm.osd_sum.kb_used
          << " kb used across all osds!\n";
       return -EDOM;
index ff48eef828550575ae758b05cee2a8f2c5973bdb..dc87aa6e056c2a4c4acbf0e968dfa414a1930fac 100644 (file)
@@ -201,8 +201,8 @@ void Paxos::collect(version_t oldpn)
 
   // set timeout event
   collect_timeout_event = mon->timer.add_event_after(
-    g_conf->mon_accept_timeout_factor *
-    g_conf->mon_lease,
+    g_conf()->mon_accept_timeout_factor *
+    g_conf()->mon_lease,
     new C_MonContext(mon, [this](int r) {
        if (r == -ECANCELED)
          return;
@@ -488,12 +488,12 @@ void Paxos::handle_last(MonOpRequestRef op)
     return;
   }
 
-  assert(g_conf->paxos_kill_at != 1);
+  assert(g_conf()->paxos_kill_at != 1);
 
   // store any committed values if any are specified in the message
   need_refresh = store_state(last);
 
-  assert(g_conf->paxos_kill_at != 2);
+  assert(g_conf()->paxos_kill_at != 2);
 
   // is everyone contiguous and up to date?
   for (map<int,version_t>::iterator p = peer_last_committed.begin();
@@ -667,7 +667,7 @@ void Paxos::begin(bufferlist& v)
 
   logger->tinc(l_paxos_begin_latency, to_timespan(end - start));
 
-  assert(g_conf->paxos_kill_at != 3);
+  assert(g_conf()->paxos_kill_at != 3);
 
   if (mon->get_quorum().size() == 1) {
     // we're alone, take it easy
@@ -693,7 +693,7 @@ void Paxos::begin(bufferlist& v)
 
   // set timeout event
   accept_timeout_event = mon->timer.add_event_after(
-    g_conf->mon_accept_timeout_factor * g_conf->mon_lease,
+    g_conf()->mon_accept_timeout_factor * g_conf()->mon_lease,
     new C_MonContext(mon, [this](int r) {
        if (r == -ECANCELED)
          return;
@@ -717,7 +717,7 @@ void Paxos::handle_begin(MonOpRequestRef op)
   assert(begin->pn == accepted_pn);
   assert(begin->last_committed == last_committed);
   
-  assert(g_conf->paxos_kill_at != 4);
+  assert(g_conf()->paxos_kill_at != 4);
 
   logger->inc(l_paxos_begin);
 
@@ -751,7 +751,7 @@ void Paxos::handle_begin(MonOpRequestRef op)
 
   logger->tinc(l_paxos_begin_latency, to_timespan(end - start));
 
-  assert(g_conf->paxos_kill_at != 5);
+  assert(g_conf()->paxos_kill_at != 5);
 
   // reply
   MMonPaxos *accept = new MMonPaxos(mon->get_epoch(), MMonPaxos::OP_ACCEPT,
@@ -789,7 +789,7 @@ void Paxos::handle_accept(MonOpRequestRef op)
   accepted.insert(from);
   dout(10) << " now " << accepted << " have accepted" << dendl;
 
-  assert(g_conf->paxos_kill_at != 6);
+  assert(g_conf()->paxos_kill_at != 6);
 
   // only commit (and expose committed state) when we get *all* quorum
   // members to accept.  otherwise, they may still be sharing the now
@@ -841,7 +841,7 @@ void Paxos::commit_start()
 {
   dout(10) << __func__ << " " << (last_committed+1) << dendl;
 
-  assert(g_conf->paxos_kill_at != 7);
+  assert(g_conf()->paxos_kill_at != 7);
 
   auto t(std::make_shared<MonitorDBStore::Transaction>());
 
@@ -886,7 +886,7 @@ void Paxos::commit_finish()
   utime_t end = ceph_clock_now();
   logger->tinc(l_paxos_commit_latency, end - commit_start_stamp);
 
-  assert(g_conf->paxos_kill_at != 8);
+  assert(g_conf()->paxos_kill_at != 8);
 
   // cancel lease - it was for the old value.
   //  (this would only happen if message layer lost the 'begin', but
@@ -917,7 +917,7 @@ void Paxos::commit_finish()
     mon->send_mon_message(commit, *p);
   }
 
-  assert(g_conf->paxos_kill_at != 9);
+  assert(g_conf()->paxos_kill_at != 9);
 
   // get ready for a new round.
   new_value.clear();
@@ -937,7 +937,7 @@ void Paxos::commit_finish()
       extend_lease();
     }
 
-    assert(g_conf->paxos_kill_at != 10);
+    assert(g_conf()->paxos_kill_at != 10);
 
     finish_round();
   }
@@ -970,11 +970,11 @@ void Paxos::extend_lease()
   //assert(is_active());
 
   lease_expire = ceph_clock_now();
-  lease_expire += g_conf->mon_lease;
+  lease_expire += g_conf()->mon_lease;
   acked_lease.clear();
   acked_lease.insert(mon->rank);
 
-  dout(7) << "extend_lease now+" << g_conf->mon_lease 
+  dout(7) << "extend_lease now+" << g_conf()->mon_lease
          << " (" << lease_expire << ")" << dendl;
 
   // bcast
@@ -994,7 +994,7 @@ void Paxos::extend_lease()
   //  if old timeout is still in place, leave it.
   if (!lease_ack_timeout_event) {
     lease_ack_timeout_event = mon->timer.add_event_after(
-      g_conf->mon_lease_ack_timeout_factor * g_conf->mon_lease,
+      g_conf()->mon_lease_ack_timeout_factor * g_conf()->mon_lease,
       new C_MonContext(mon, [this](int r) {
          if (r == -ECANCELED)
            return;
@@ -1004,8 +1004,8 @@ void Paxos::extend_lease()
 
   // set renew event
   utime_t at = lease_expire;
-  at -= g_conf->mon_lease;
-  at += g_conf->mon_lease_renew_interval_factor * g_conf->mon_lease;
+  at -= g_conf()->mon_lease;
+  at += g_conf()->mon_lease_renew_interval_factor * g_conf()->mon_lease;
   lease_renew_event = mon->timer.add_event_at(
     at, new C_MonContext(mon, [this](int r) {
        if (r == -ECANCELED)
@@ -1019,10 +1019,10 @@ void Paxos::warn_on_future_time(utime_t t, entity_name_t from)
   utime_t now = ceph_clock_now();
   if (t > now) {
     utime_t diff = t - now;
-    if (diff > g_conf->mon_clock_drift_allowed) {
+    if (diff > g_conf()->mon_clock_drift_allowed) {
       utime_t warn_diff = now - last_clock_drift_warn;
       if (warn_diff >
-         pow(g_conf->mon_clock_drift_warn_backoff, clock_drift_warned)) {
+         pow(g_conf()->mon_clock_drift_warn_backoff, clock_drift_warned)) {
        mon->clog->warn() << "message from " << from << " was stamped " << diff
                         << "s in the future, clocks not synchronized";
        last_clock_drift_warn = ceph_clock_now();
@@ -1195,7 +1195,7 @@ void Paxos::reset_lease_timeout()
   if (lease_timeout_event)
     mon->timer.cancel_event(lease_timeout_event);
   lease_timeout_event = mon->timer.add_event_after(
-    g_conf->mon_lease_ack_timeout_factor * g_conf->mon_lease,
+    g_conf()->mon_lease_ack_timeout_factor * g_conf()->mon_lease,
     new C_MonContext(mon, [this](int r) {
        if (r == -ECANCELED)
          return;
@@ -1225,8 +1225,8 @@ void Paxos::lease_renew_timeout()
 void Paxos::trim()
 {
   assert(should_trim());
-  version_t end = std::min(get_version() - g_conf->paxos_min,
-                     get_first_committed() + g_conf->paxos_trim_max);
+  version_t end = std::min(get_version() - g_conf()->paxos_min,
+                     get_first_committed() + g_conf()->paxos_trim_max);
 
   if (first_committed >= end)
     return;
@@ -1240,7 +1240,7 @@ void Paxos::trim()
     t->erase(get_name(), v);
   }
   t->put(get_name(), "first_committed", end);
-  if (g_conf->mon_compact_on_trim) {
+  if (g_conf()->mon_compact_on_trim) {
     dout(10) << " compacting trimmed range" << dendl;
     t->compact_range(get_name(), stringify(first_committed - 1), stringify(end));
   }
index f975461b1564f009718f9e56663cc2fa97e5b370..01533fe45993a63f1185bfcd63a0ddb8c66fd04e 100644 (file)
@@ -1194,7 +1194,7 @@ public:
    */
   bool should_trim() {
     int available_versions = get_version() - get_first_committed();
-    int maximum_versions = g_conf->paxos_min + g_conf->paxos_trim_min;
+    int maximum_versions = g_conf()->paxos_min + g_conf()->paxos_trim_min;
 
     if (trimming || (available_versions <= maximum_versions))
       return false;
index 0ebc51f81c7648ec9de66802cd479307bb2f4e8b..797d339acafa2ac86d7b2e070a0439ea35a01977 100644 (file)
@@ -172,10 +172,10 @@ bool PaxosService::should_propose(double& delay)
     delay = 0.0;
   } else {
     utime_t now = ceph_clock_now();
-    if ((now - paxos->last_commit_time) > g_conf->paxos_propose_interval)
-      delay = (double)g_conf->paxos_min_wait;
+    if ((now - paxos->last_commit_time) > g_conf()->paxos_propose_interval)
+      delay = (double)g_conf()->paxos_min_wait;
     else
-      delay = (double)(g_conf->paxos_propose_interval + paxos->last_commit_time
+      delay = (double)(g_conf()->paxos_propose_interval + paxos->last_commit_time
                       - now);
   }
   return true;
@@ -257,7 +257,7 @@ bool PaxosService::should_stash_full()
    */
   return (!latest_full ||
          (latest_full <= get_trim_to()) ||
-         (get_last_committed() - latest_full > (version_t)g_conf->paxos_stash_full_interval));
+         (get_last_committed() - latest_full > (version_t)g_conf()->paxos_stash_full_interval));
 }
 
 void PaxosService::restart()
@@ -377,20 +377,20 @@ void PaxosService::maybe_trim()
     return;
 
   version_t to_remove = trim_to - get_first_committed();
-  if (g_conf->paxos_service_trim_min > 0 &&
-      to_remove < (version_t)g_conf->paxos_service_trim_min) {
+  if (g_conf()->paxos_service_trim_min > 0 &&
+      to_remove < (version_t)g_conf()->paxos_service_trim_min) {
     dout(10) << __func__ << " trim_to " << trim_to << " would only trim " << to_remove
-            << " < paxos_service_trim_min " << g_conf->paxos_service_trim_min << dendl;
+            << " < paxos_service_trim_min " << g_conf()->paxos_service_trim_min << dendl;
     return;
   }
 
-  if (g_conf->paxos_service_trim_max > 0 &&
-      to_remove > (version_t)g_conf->paxos_service_trim_max) {
+  if (g_conf()->paxos_service_trim_max > 0 &&
+      to_remove > (version_t)g_conf()->paxos_service_trim_max) {
     dout(10) << __func__ << " trim_to " << trim_to << " would only trim " << to_remove
-            << " > paxos_service_trim_max, limiting to " << g_conf->paxos_service_trim_max
+            << " > paxos_service_trim_max, limiting to " << g_conf()->paxos_service_trim_max
             << dendl;
-    trim_to = get_first_committed() + g_conf->paxos_service_trim_max;
-    to_remove = g_conf->paxos_service_trim_max;
+    trim_to = get_first_committed() + g_conf()->paxos_service_trim_max;
+    to_remove = g_conf()->paxos_service_trim_max;
   }
 
   dout(10) << __func__ << " trimming to " << trim_to << ", " << to_remove << " states" << dendl;
@@ -421,7 +421,7 @@ void PaxosService::trim(MonitorDBStore::TransactionRef t,
       t->erase(get_service_name(), full_key);
     }
   }
-  if (g_conf->mon_compact_on_trim) {
+  if (g_conf()->mon_compact_on_trim) {
     dout(20) << " compacting prefix " << get_service_name() << dendl;
     t->compact_range(get_service_name(), stringify(from - 1), stringify(to));
     t->compact_range(get_service_name(),
index fddc2babc408d5b43fe0c07409fdbbb61a6ee2e2..eea7f3e371c9c2907116999b97f5cdf0d2916b83 100644 (file)
@@ -40,7 +40,7 @@ protected:
   epoch_t epoch;
 
   QuorumService(Monitor *m) :
-    tick_period(g_conf->mon_tick_interval),
+    tick_period(g_conf()->mon_tick_interval),
     mon(m),
     epoch(0)
   {
index 14c5827cea24e3f58987e270a4f094407456baed..495e6064fe0d69d405e6f39034f725179d657630 100644 (file)
@@ -16,7 +16,7 @@
 
 Messenger *Messenger::create_client_messenger(CephContext *cct, string lname)
 {
-  std::string public_msgr_type = cct->_conf->ms_public_type.empty() ? cct->_conf->get_val<std::string>("ms_type") : cct->_conf->ms_public_type;
+  std::string public_msgr_type = cct->_conf->ms_public_type.empty() ? cct->_conf.get_val<std::string>("ms_type") : cct->_conf->ms_public_type;
   auto nonce = ceph::util::generate_random_number<uint64_t>();
   return Messenger::create(cct, public_msgr_type, entity_name_t::CLIENT(),
                           std::move(lname), nonce, 0);
@@ -43,6 +43,22 @@ Messenger *Messenger::create(CephContext *cct, const string &type,
   return nullptr;
 }
 
+/**
+ * Get the default crc flags for this messenger.
+ * but not yet dispatched.
+ */
+static int get_default_crc_flags(const ConfigProxy&);
+
+Messenger::Messenger(CephContext *cct_, entity_name_t w)
+  : trace_endpoint("0.0.0.0", 0, "Messenger"),
+    my_name(w),
+    default_send_priority(CEPH_MSG_PRIO_DEFAULT),
+    started(false),
+    magic(0),
+    socket_priority(-1),
+    cct(cct_),
+    crcflags(get_default_crc_flags(cct->_conf)) {}
+
 void Messenger::set_endpoint_addr(const entity_addr_t& a,
                                   const entity_name_t &name)
 {
@@ -64,12 +80,15 @@ void Messenger::set_endpoint_addr(const entity_addr_t& a,
   trace_endpoint.set_port(a.get_port());
 }
 
-/*
+/**
+ * Get the default crc flags for this messenger.
+ * but not yet dispatched.
+ *
  * Pre-calculate desired software CRC settings.  CRC computation may
  * be disabled by default for some transports (e.g., those with strong
  * hardware checksum support).
  */
-int Messenger::get_default_crc_flags(md_config_t * conf)
+int get_default_crc_flags(const ConfigProxy& conf)
 {
   int r = 0;
   if (conf->ms_crc_data)
index b393fae3a1179817a37cb40ee35d70ed3328ea8a..df8fb50e5da3b5194ef6d469caf1d18e7e9e2990 100644 (file)
@@ -84,15 +84,7 @@ public:
    * Messenger users should construct full implementations directly,
    * or use the create() function.
    */
-  Messenger(CephContext *cct_, entity_name_t w)
-    : trace_endpoint("0.0.0.0", 0, "Messenger"),
-      my_name(w),
-      default_send_priority(CEPH_MSG_PRIO_DEFAULT),
-      started(false),
-      magic(0),
-      socket_priority(-1),
-      cct(cct_),
-      crcflags(get_default_crc_flags(cct->_conf)) {}
+  Messenger(CephContext *cct_, entity_name_t w);
   virtual ~Messenger() {}
 
   /**
@@ -220,11 +212,6 @@ public:
    * (0 if the queue is empty)
    */
   virtual double get_dispatch_queue_max_age(utime_t now) = 0;
-  /**
-   * Get the default crc flags for this messenger.
-   * but not yet dispatched.
-   */
-  static int get_default_crc_flags(md_config_t *);
 
   /**
    * @} // Accessors
index 571da8cf919c6bab452291a3b0150bbe597aef5f..5d13ffb868aa23d01ce1f8dbe811ef1a006c04fd 100644 (file)
@@ -79,7 +79,7 @@ class PolicySet {
   /// the default Policy we use for Pipes
   policy_t default_policy;
   /// map specifying different Policies for specific peer types
-  map<int, policy_t> policy_map; // entity_name_t::type -> Policy
+  std::map<int, policy_t> policy_map; // entity_name_t::type -> Policy
 
 public:
   const policy_t& get(peer_type_t peer_type) const {
index 5dd36eb8f34f4593bc64b812eed409a84ab08110..b021ff0004e16c23159ce1709f05f04c34fc37b7 100644 (file)
@@ -162,7 +162,7 @@ AsyncConnection::~AsyncConnection()
 void AsyncConnection::maybe_start_delay_thread()
 {
   if (!delay_state) {
-    async_msgr->cct->_conf->with_val<std::string>(
+    async_msgr->cct->_conf.with_val<std::string>(
       "ms_inject_delay_type",
       [this](const string& s) {
        if (s.find(ceph_entity_type_name(peer_type)) != string::npos) {
index 48922b9c48957038d01c4361244e0272f70eb80f..741e730ec206ade64f520bde14b27e667280e1b5 100644 (file)
@@ -63,7 +63,7 @@ int Processor::bind(const entity_addrvec_t &bind_addrs,
                    const set<int>& avoid_ports,
                    entity_addrvec_t* bound_addrs)
 {
-  const md_config_t *conf = msgr->cct->_conf;
+  const auto& conf = msgr->cct->_conf;
   // bind to socket(s)
   ldout(msgr->cct, 10) << __func__ << " " << bind_addrs << dendl;
 
index 5e25e8b3fa9c08f9938a673b1fddd1bce6eb1c7d..eadcffbb6cfa553b46b6ee51bac85835cfea2412 100644 (file)
@@ -78,7 +78,7 @@ int Accepter::create_selfpipe(int *pipe_rd, int *pipe_wr) {
 
 int Accepter::bind(const entity_addr_t &bind_addr, const set<int>& avoid_ports)
 {
-  const md_config_t *conf = msgr->cct->_conf;
+  const auto& conf = msgr->cct->_conf;
   // bind to a socket
   ldout(msgr->cct,10) <<  __func__ << dendl;
   
index b1c7d4b73549e7444ed2a6d1b73d2c7fd154c791..be128bdaadf66b0ba34b749b4b4a34cfe4fef10d 100644 (file)
@@ -207,7 +207,7 @@ void Pipe::start_reader()
 void Pipe::maybe_start_delay_thread()
 {
   if (!delay_thread) {
-    auto pos = msgr->cct->_conf->get_val<std::string>("ms_inject_delay_type").find(ceph_entity_type_name(connection_state->peer_type));
+    auto pos = msgr->cct->_conf.get_val<std::string>("ms_inject_delay_type").find(ceph_entity_type_name(connection_state->peer_type));
     if (pos != string::npos) {
       lsubdout(msgr->cct, ms, 1) << "setting up a delay queue on Pipe " << this << dendl;
       delay_thread = new DelayedDelivery(this);
@@ -1015,7 +1015,7 @@ int Pipe::connect()
   entity_addr_t peer_addr_for_me, socket_addr;
   AuthAuthorizer *authorizer = NULL;
   bufferlist addrbl, myaddrbl;
-  const md_config_t *conf = msgr->cct->_conf;
+  const auto& conf = msgr->cct->_conf;
 
   // close old socket.  this is safe because we stopped the reader thread above.
   if (sd >= 0)
@@ -1489,7 +1489,7 @@ void Pipe::discard_out_queue()
 
 void Pipe::fault(bool onread)
 {
-  const md_config_t *conf = msgr->cct->_conf;
+  const auto& conf = msgr->cct->_conf;
   assert(pipe_lock.is_locked());
   cond.Signal();
 
index e8544180c050c6f22600c075162cba8cfec5bb46..d993cd8df9cca94de1717da37614e5e272b93255 100644 (file)
@@ -1168,7 +1168,7 @@ int FuseStore::main()
     "-d", // debug
   };
   int c = 3;
-  auto fuse_debug = store->cct->_conf->get_val<bool>("fuse_debug");
+  auto fuse_debug = store->cct->_conf.get_val<bool>("fuse_debug");
   if (fuse_debug)
     ++c;
   return fuse_main(c, (char**)v, &fs_oper, (void*)this);
@@ -1186,7 +1186,7 @@ int FuseStore::start()
     "-d", // debug
   };
   int c = 3;
-  auto fuse_debug = store->cct->_conf->get_val<bool>("fuse_debug");
+  auto fuse_debug = store->cct->_conf.get_val<bool>("fuse_debug");
   if (fuse_debug)
     ++c;
   fuse_args a = FUSE_ARGS_INIT(c, (char**)v);
index 71c294a0b971961e87e489f15d541e47ceecebc1..5e147a8cc5c05ea943e61d13faa2a2326c31e101 100644 (file)
@@ -133,7 +133,7 @@ public:
       : file(f),
        pos(0),
        buffer_appender(buffer.get_page_aligned_appender(
-                         g_conf->bluefs_alloc_size / CEPH_PAGE_SIZE)) {
+                         g_conf()->bluefs_alloc_size / CEPH_PAGE_SIZE)) {
       ++file->num_writers;
       iocv.fill(nullptr);
       dirty_devs.fill(false);
index 462e038a979f2f2dbc5fbc1cc0c7539aa463fff5..45404abc2142f3e5de92041ac1a7263402aef437 100644 (file)
@@ -690,7 +690,7 @@ void BlueStore::GarbageCollector::process_protrusive_extents(
                << " expected_allocations=" << bi.expected_allocations
                << dendl;
       int64_t benefit = blob_expected_for_release - bi.expected_allocations;
-      if (benefit >= g_conf->bluestore_gc_enable_blob_threshold) {
+      if (benefit >= g_conf()->bluestore_gc_enable_blob_threshold) {
         if (bi.collect_candidate) {
           auto it = bi.first_lextent;
           bool bExit = false;
@@ -837,7 +837,7 @@ void BlueStore::LRUCache::_trim(uint64_t onode_max, uint64_t buffer_max)
   assert(p != onode_lru.begin());
   --p;
   int skipped = 0;
-  int max_skipped = g_conf->bluestore_cache_trim_max_skip_pinned;
+  int max_skipped = g_conf()->bluestore_cache_trim_max_skip_pinned;
   while (num > 0) {
     Onode *o = &*p;
     int refs = o->nref.load();
@@ -1134,7 +1134,7 @@ void BlueStore::TwoQCache::_trim(uint64_t onode_max, uint64_t buffer_max)
   assert(p != onode_lru.begin());
   --p;
   int skipped = 0;
-  int max_skipped = g_conf->bluestore_cache_trim_max_skip_pinned;
+  int max_skipped = g_conf()->bluestore_cache_trim_max_skip_pinned;
   while (num > 0) {
     Onode *o = &*p;
     dout(20) << __func__ << " considering " << o << dendl;
@@ -2098,7 +2098,7 @@ void BlueStore::ExtentMap::update(KeyValueDB::Transaction t,
          }
          // avoid resharding the trailing shard, even if it is small
          else if (n != shards.end() &&
-                  len < g_conf->bluestore_extent_map_shard_min_size) {
+                  len < g_conf()->bluestore_extent_map_shard_min_size) {
             assert(endoff != OBJECT_MAX_SIZE);
            if (p == shards.begin()) {
              // we are the first shard, combine with next shard
@@ -3750,7 +3750,7 @@ BlueStore::BlueStore(CephContext *cct, const string& path)
     mempool_thread(this)
 {
   _init_logger();
-  cct->_conf->add_observer(this);
+  cct->_conf.add_observer(this);
   set_cache_shards(1);
 }
 
@@ -3771,7 +3771,7 @@ BlueStore::BlueStore(CephContext *cct,
     mempool_thread(this)
 {
   _init_logger();
-  cct->_conf->add_observer(this);
+  cct->_conf.add_observer(this);
   set_cache_shards(1);
 }
 
@@ -3782,7 +3782,7 @@ BlueStore::~BlueStore()
   }
   finishers.clear();
 
-  cct->_conf->remove_observer(this);
+  cct->_conf.remove_observer(this);
   _shutdown_logger();
   assert(!mounted);
   assert(db == NULL);
@@ -3828,7 +3828,7 @@ const char **BlueStore::get_tracked_conf_keys() const
   return KEYS;
 }
 
-void BlueStore::handle_conf_change(const md_config_t *conf,
+void BlueStore::handle_conf_change(const md_config_t *mconf,
                                   const std::set<std::string> &changed)
 {
   if (changed.count("bluestore_csum_type")) {
@@ -3869,6 +3869,7 @@ void BlueStore::handle_conf_change(const md_config_t *conf,
       _set_throttle_params();
     }
   }
+  ConfigReader conf{mconf};
   if (changed.count("bluestore_throttle_bytes")) {
     throttle_bytes.reset_max(conf->bluestore_throttle_bytes);
     throttle_deferred_bytes.reset_max(
@@ -4003,11 +4004,11 @@ void BlueStore::_set_finisher_num()
 int BlueStore::_set_cache_sizes()
 {
   assert(bdev);
-  cache_autotune = cct->_conf->get_val<bool>("bluestore_cache_autotune");
+  cache_autotune = cct->_conf.get_val<bool>("bluestore_cache_autotune");
   cache_autotune_chunk_size = 
-      cct->_conf->get_val<uint64_t>("bluestore_cache_autotune_chunk_size");
+      cct->_conf.get_val<uint64_t>("bluestore_cache_autotune_chunk_size");
   cache_autotune_interval =
-      cct->_conf->get_val<double>("bluestore_cache_autotune_interval");
+      cct->_conf.get_val<double>("bluestore_cache_autotune_interval");
 
   if (cct->_conf->bluestore_cache_size) {
     cache_size = cct->_conf->bluestore_cache_size;
@@ -4268,7 +4269,7 @@ int BlueStore::_open_path()
 {
   // sanity check(s)
   auto osd_max_object_size =
-    cct->_conf->get_val<uint64_t>("osd_max_object_size");
+    cct->_conf.get_val<uint64_t>("osd_max_object_size");
   if (osd_max_object_size >= (uint64_t)OBJECT_MAX_SIZE) {
     derr << __func__ << " osd_max_object_size >= 0x" << std::hex << OBJECT_MAX_SIZE
       << "; BlueStore has hard limit of 0x" << OBJECT_MAX_SIZE << "." <<  std::dec << dendl;
@@ -4470,7 +4471,7 @@ int BlueStore::_open_bdev(bool create)
     dout(1) << __func__ << " main device size " << byte_u_t(dev_size)
             << " is too small, disable bluestore_bluefs_min for now"
             << dendl;
-    int r = cct->_conf->set_val("bluestore_bluefs_min", "0");
+    int r = cct->_conf.set_val("bluestore_bluefs_min", "0");
     assert(r == 0);
   }
   return 0;
@@ -5063,7 +5064,7 @@ int BlueStore::_open_db(bool create, bool to_repair_db)
     options = cct->_conf->bluestore_rocksdb_options;
 
     map<string,string> cf_map;
-    cct->_conf->with_val<string>("bluestore_rocksdb_cfs",
+    cct->_conf.with_val<string>("bluestore_rocksdb_cfs",
                                  get_str_map,
                                  &cf_map,
                                  " \t");
@@ -5077,7 +5078,7 @@ int BlueStore::_open_db(bool create, bool to_repair_db)
   if (to_repair_db)
     return 0;
   if (create) {
-    if (cct->_conf->get_val<bool>("bluestore_rocksdb_cf")) {
+    if (cct->_conf.get_val<bool>("bluestore_rocksdb_cf")) {
       r = db->create_and_open(err, cfs);
     } else {
       r = db->create_and_open(err);
@@ -5228,7 +5229,7 @@ int BlueStore::_balance_bluefs_freespace(PExtentVector *extents)
       gift = g;
     reclaim = 0;
   }
-  uint64_t min_free = cct->_conf->get_val<uint64_t>("bluestore_bluefs_min_free");
+  uint64_t min_free = cct->_conf.get_val<uint64_t>("bluestore_bluefs_min_free");
   if (bluefs_free < min_free &&
       min_free < free_cap) {
     uint64_t g = min_free - bluefs_free;
@@ -6042,7 +6043,7 @@ int BlueStore::_fsck(bool deep, bool repair)
     spg_t pgid;
     mempool::bluestore_fsck::list<string> expecting_shards;
     for (it->lower_bound(string()); it->valid(); it->next()) {
-      if (g_conf->bluestore_debug_fsck_abort) {
+      if (g_conf()->bluestore_debug_fsck_abort) {
        goto out_scan;
       }
       dout(30) << __func__ << " key "
@@ -8780,7 +8781,7 @@ void BlueStore::_txc_finish(TransContext *txc)
           notify = true;
        }
        if (txc->state == TransContext::STATE_DEFERRED_QUEUED &&
-           osr->q.size() > g_conf->bluestore_max_deferred_txc) {
+           osr->q.size() > g_conf()->bluestore_max_deferred_txc) {
          submit_deferred = true;
        }
         break;
@@ -9407,7 +9408,7 @@ void BlueStore::_deferred_submit_unlock(OpSequencer *osr)
        dout(20) << __func__ << " write 0x" << std::hex
                 << start << "~" << bl.length()
                 << " crc " << bl.crc32c(-1) << std::dec << dendl;
-       if (!g_conf->bluestore_debug_omit_block_device_write) {
+       if (!g_conf()->bluestore_debug_omit_block_device_write) {
          logger->inc(l_bluestore_deferred_write_ops);
          logger->inc(l_bluestore_deferred_write_bytes, bl.length());
          int r = bdev->aio_write(start, bl, &b->ioc, false);
@@ -10230,7 +10231,7 @@ void BlueStore::_do_write_small(
          _buffer_cache_write(txc, b, b_off, bl,
                              wctx->buffered ? 0 : Buffer::FLAG_NOCACHE);
 
-         if (!g_conf->bluestore_debug_omit_block_device_write) {
+         if (!g_conf()->bluestore_debug_omit_block_device_write) {
            if (b_len <= prefer_deferred_size) {
              dout(20) << __func__ << " deferring small 0x" << std::hex
                       << b_len << std::dec << " unused write via deferred" << dendl;
@@ -10766,7 +10767,7 @@ int BlueStore::_do_alloc_write(
                         wctx->buffered ? 0 : Buffer::FLAG_NOCACHE);
 
     // queue io
-    if (!g_conf->bluestore_debug_omit_block_device_write) {
+    if (!g_conf()->bluestore_debug_omit_block_device_write) {
       if (l->length() <= prefer_deferred_size.load()) {
        dout(20) << __func__ << " deferring small 0x" << std::hex
                 << l->length() << std::dec << " write via deferred" << dendl;
@@ -11120,7 +11121,7 @@ int BlueStore::_do_write(
     o->onode.size = end;
   }
 
-  if (benefit >= g_conf->bluestore_gc_enable_total_threshold) {
+  if (benefit >= g_conf()->bluestore_gc_enable_total_threshold) {
     if (!gc.get_extents_to_collect().empty()) {
       dout(20) << __func__ << " perform garbage collection, "
                << "expected benefit = " << benefit << " AUs" << dendl;
index 0fcfafd71aa4a81161f12ff7f09f667d4148e220..7587c868077de31b81ed733a3425327a0bef8ba9 100644 (file)
@@ -359,8 +359,8 @@ void SharedDriverQueueData::_aio_handle(Task *t, IOContext *ioc)
 
   int r = 0;
   uint64_t lba_off, lba_count;
-  uint32_t max_io_completion = (uint32_t)g_conf->get_val<uint64_t>("bluestore_spdk_max_io_completion");
-  uint64_t io_sleep_in_us = g_conf->get_val<uint64_t>("bluestore_spdk_io_sleep");
+  uint32_t max_io_completion = (uint32_t)g_conf().get_val<uint64_t>("bluestore_spdk_max_io_completion");
+  uint64_t io_sleep_in_us = g_conf().get_val<uint64_t>("bluestore_spdk_io_sleep");
 
   ceph::coarse_real_clock::time_point cur, start
     = ceph::coarse_real_clock::now();
@@ -593,7 +593,7 @@ int NVMEManager::try_get(const string &sn_tag, SharedDriverData **driver)
     }
   }
 
-  auto coremask_arg = g_conf->get_val<std::string>("bluestore_spdk_coremask");
+  auto coremask_arg = g_conf().get_val<std::string>("bluestore_spdk_coremask");
   int m_core_arg = -1;
   try {
     auto core_value = stoull(coremask_arg, nullptr, 16);
@@ -611,7 +611,7 @@ int NVMEManager::try_get(const string &sn_tag, SharedDriverData **driver)
   }
   m_core_arg -= 1;
 
-  uint32_t mem_size_arg = (uint32_t)g_conf->get_val<uint64_t>("bluestore_spdk_mem");
+  uint32_t mem_size_arg = (uint32_t)g_conf().get_val<uint64_t>("bluestore_spdk_mem");
 
 
   if (!init) {
index 72d54cbf750865d22cb0be7d9c7fc39ffc0b9340..6f5d4cc69c5326c0c245e85f5553c4893243cf81 100644 (file)
@@ -59,7 +59,7 @@ public:
   explicit FDCache(CephContext *cct) : cct(cct),
   registry_shards(std::max<int64_t>(cct->_conf->filestore_fd_cache_shards, 1)) {
     assert(cct);
-    cct->_conf->add_observer(this);
+    cct->_conf.add_observer(this);
     registry = new SharedLRU<ghobject_t, FD>[registry_shards];
     for (int i = 0; i < registry_shards; ++i) {
       registry[i].set_cct(cct);
@@ -68,7 +68,7 @@ public:
     }
   }
   ~FDCache() override {
-    cct->_conf->remove_observer(this);
+    cct->_conf.remove_observer(this);
     delete[] registry;
   }
   typedef std::shared_ptr<FD> FDRef;
@@ -97,8 +97,9 @@ public:
     };
     return KEYS;
   }
-  void handle_conf_change(const md_config_t *conf,
+  void handle_conf_change(const md_config_t *mconf,
                          const std::set<std::string> &changed) override {
+    ConfigReader conf{mconf};
     if (changed.count("filestore_fd_cache_size")) {
       for (int i = 0; i < registry_shards; ++i)
         registry[i].set_size(
index 2f505c43f8c33b51f3f3e73c14b40b6d472a1cde..2ee22f8b39475411241bee364d84b5267cb35171 100644 (file)
@@ -443,12 +443,12 @@ private:
       }
 #endif
 
-      cct->_conf->add_observer(this);
+      cct->_conf.add_observer(this);
   }
   ~FileJournal() override {
     assert(fd == -1);
     delete[] zero_buf;
-    cct->_conf->remove_observer(this);
+    cct->_conf.remove_observer(this);
   }
 
   int check() override;
index cd234e1482f1943486692d1b6130efd948d1251c..4e4e7feb76c7cea40aa9818cefac65c39ba64888 100644 (file)
@@ -638,7 +638,7 @@ FileStore::FileStore(CephContext* cct, const std::string &base,
   logger = plb.create_perf_counters();
 
   cct->get_perfcounters_collection()->add(logger);
-  cct->_conf->add_observer(this);
+  cct->_conf.add_observer(this);
 
   superblock.compat_features = get_fs_initial_compat_set();
 }
@@ -653,7 +653,7 @@ FileStore::~FileStore()
     delete *it;
     *it = nullptr;
   }
-  cct->_conf->remove_observer(this);
+  cct->_conf.remove_observer(this);
   cct->get_perfcounters_collection()->remove(logger);
 
   if (journal)
@@ -2158,7 +2158,7 @@ void FileStore::_do_op(OpSequencer *osr, ThreadPool::TPHandle &handle)
     int orig = cct->_conf->filestore_inject_stall;
     dout(5) << __FUNC__ << ": filestore_inject_stall " << orig << ", sleeping" << dendl;
     sleep(orig);
-    cct->_conf->set_val("filestore_inject_stall", "0");
+    cct->_conf.set_val("filestore_inject_stall", "0");
     dout(5) << __FUNC__ << ": done stalling" << dendl;
   }
 
@@ -5643,7 +5643,7 @@ int FileStore::_omap_setkeys(const coll_t& cid, const ghobject_t &hoid,
     }
   }
 skip:
-  if (g_conf->subsys.should_gather<ceph_subsys_filestore, 20>()) {
+  if (g_conf()->subsys.should_gather<ceph_subsys_filestore, 20>()) {
     for (auto& p : aset) {
       dout(20) << __FUNC__ << ":  set " << p.first << dendl;
     }
@@ -5882,7 +5882,7 @@ const char** FileStore::get_tracked_conf_keys() const
   return KEYS;
 }
 
-void FileStore::handle_conf_change(const md_config_t *conf,
+void FileStore::handle_conf_change(const md_config_t *mconf,
                          const std::set <std::string> &changed)
 {
   if (changed.count("filestore_max_inline_xattr_size") ||
@@ -5915,6 +5915,7 @@ void FileStore::handle_conf_change(const md_config_t *conf,
     set_throttle_params();
   }
 
+  ConfigReader conf{mconf};
   if (changed.count("filestore_min_sync_interval") ||
       changed.count("filestore_max_sync_interval") ||
       changed.count("filestore_kill_at") ||
index daf7959b187646350535cd6341a55518f1a5b244..b9ac4f2392f3ae9bc5dbb6b58b240f446786ae2a 100644 (file)
@@ -33,14 +33,14 @@ WBThrottle::WBThrottle(CephContext *cct) :
   for (unsigned i = l_wbthrottle_first + 1; i != l_wbthrottle_last; ++i)
     logger->set(i, 0);
 
-  cct->_conf->add_observer(this);
+  cct->_conf.add_observer(this);
 }
 
 WBThrottle::~WBThrottle() {
   assert(cct);
   cct->get_perfcounters_collection()->remove(logger);
   delete logger;
-  cct->_conf->remove_observer(this);
+  cct->_conf.remove_observer(this);
 }
 
 void WBThrottle::start()
index 1bf6464f5f9bc064b3648efe3a61f9b561d71c38..65c984449391bb86df85a8681bc140137ef5d0f4 100644 (file)
@@ -2415,7 +2415,7 @@ int ECBackend::be_deep_scrub(
   dout(10) << __func__ << " " << poid << " pos " << pos << dendl;
   int r;
   bool skip_data_digest = store->has_builtin_csum() &&
-    g_conf->osd_skip_data_digest;
+    g_conf()->osd_skip_data_digest;
 
   uint32_t fadvise_flags = CEPH_OSD_OP_FLAG_FADVISE_SEQUENTIAL |
                            CEPH_OSD_OP_FLAG_FADVISE_DONTNEED;
index bd9bcee633fa4879f56ca6613516597b55cf4f52..88ccebfaf3b5c0f8a59c375279c2bb1ecc5cc411 100644 (file)
@@ -220,8 +220,8 @@ OSDService::OSDService(OSD *osd) :
   recoverystate_perf(osd->recoverystate_perf),
   monc(osd->monc),
   class_handler(osd->class_handler),
-  osd_max_object_size(*cct->_conf, "osd_max_object_size"),
-  osd_skip_data_digest(*cct->_conf, "osd_skip_data_digest"),
+  osd_max_object_size(cct->_conf, "osd_max_object_size"),
+  osd_skip_data_digest(cct->_conf, "osd_skip_data_digest"),
   publish_lock("OSDService::publish_lock"),
   pre_publish_lock("OSDService::pre_publish_lock"),
   max_oldest_map(0),
@@ -1786,13 +1786,13 @@ int OSD::write_meta(CephContext *cct, ObjectStore *store, uuid_d& cluster_fsid,
   if (r < 0)
     return r;
 
-  string key = cct->_conf->get_val<string>("key");
+  string key = cct->_conf.get_val<string>("key");
   if (key.size()) {
     r = store->write_meta("osd_key", key);
     if (r < 0)
       return r;
   } else {
-    string keyfile = cct->_conf->get_val<string>("keyfile");
+    string keyfile = cct->_conf.get_val<string>("keyfile");
     if (!keyfile.empty()) {
       bufferlist keybl;
       string err;
@@ -1894,7 +1894,7 @@ OSD::OSD(CephContext *cct_, ObjectStore *store_,
   store_is_rotational(store->is_rotational()),
   trace_endpoint("0.0.0.0", 0, "osd"),
   asok_hook(NULL),
-  m_osd_pg_epoch_max_lag_factor(cct->_conf->get_val<double>(
+  m_osd_pg_epoch_max_lag_factor(cct->_conf.get_val<double>(
                                  "osd_pg_epoch_max_lag_factor")),
   osd_compat(get_osd_compat_set()),
   osd_op_tp(cct, "OSD::osd_op_tp", "tp_osd_tp",
@@ -1999,7 +1999,7 @@ int OSD::pre_init()
     return -EBUSY;
   }
 
-  cct->_conf->add_observer(this);
+  cct->_conf.add_observer(this);
   return 0;
 }
 
@@ -2369,7 +2369,7 @@ float OSD::get_osd_recovery_sleep()
   if (!store_is_rotational && !journal_is_rotational)
     return cct->_conf->osd_recovery_sleep_ssd;
   else if (store_is_rotational && !journal_is_rotational)
-    return cct->_conf->get_val<double>("osd_recovery_sleep_hybrid");
+    return cct->_conf.get_val<double>("osd_recovery_sleep_hybrid");
   else
     return cct->_conf->osd_recovery_sleep_hdd;
 }
@@ -2624,7 +2624,7 @@ int OSD::init()
   while (monc->wait_auth_rotating(30.0) < 0) {
     derr << "unable to obtain rotating service keys; retrying" << dendl;
     ++rotating_auth_attempts;
-    if (rotating_auth_attempts > g_conf->max_rotating_auth_attempts) {
+    if (rotating_auth_attempts > g_conf()->max_rotating_auth_attempts) {
         derr << __func__ << " wait_auth_rotating timed out" << dendl;
        exit(1);
     }
@@ -3253,13 +3253,13 @@ int OSD::shutdown()
   set_state(STATE_STOPPING);
 
   // Debugging
-  if (cct->_conf->get_val<bool>("osd_debug_shutdown")) {
-    cct->_conf->set_val("debug_osd", "100");
-    cct->_conf->set_val("debug_journal", "100");
-    cct->_conf->set_val("debug_filestore", "100");
-    cct->_conf->set_val("debug_bluestore", "100");
-    cct->_conf->set_val("debug_ms", "100");
-    cct->_conf->apply_changes(NULL);
+  if (cct->_conf.get_val<bool>("osd_debug_shutdown")) {
+    cct->_conf.set_val("debug_osd", "100");
+    cct->_conf.set_val("debug_journal", "100");
+    cct->_conf.set_val("debug_filestore", "100");
+    cct->_conf.set_val("debug_bluestore", "100");
+    cct->_conf.set_val("debug_ms", "100");
+    cct->_conf.apply_changes(NULL);
   }
 
   // stop MgrClient earlier as it's more like an internal consumer of OSD
@@ -3373,7 +3373,7 @@ int OSD::shutdown()
 #ifdef PG_DEBUG_REFS
   service.dump_live_pgids();
 #endif
-  cct->_conf->remove_observer(this);
+  cct->_conf.remove_observer(this);
 
   service.meta_ch.reset();
 
@@ -3962,8 +3962,8 @@ bool OSD::maybe_wait_for_max_pg(const OSDMapRef& osdmap,
                                bool is_mon_create)
 {
   const auto max_pgs_per_osd =
-    (cct->_conf->get_val<uint64_t>("mon_max_pg_per_osd") *
-     cct->_conf->get_val<double>("osd_max_pg_per_osd_hard_ratio"));
+    (cct->_conf.get_val<uint64_t>("mon_max_pg_per_osd") *
+     cct->_conf.get_val<double>("osd_max_pg_per_osd_hard_ratio"));
 
   if (num_pgs < max_pgs_per_osd) {
     return false;
@@ -4000,8 +4000,8 @@ void OSD::resume_creating_pg()
   bool have_pending_creates = false;
   {
     const auto max_pgs_per_osd =
-      (cct->_conf->get_val<uint64_t>("mon_max_pg_per_osd") *
-       cct->_conf->get_val<double>("osd_max_pg_per_osd_hard_ratio"));
+      (cct->_conf.get_val<uint64_t>("mon_max_pg_per_osd") *
+       cct->_conf.get_val<double>("osd_max_pg_per_osd_hard_ratio"));
     if (max_pgs_per_osd <= num_pgs) {
       // this could happen if admin decreases this setting before a PG is removed
       return;
@@ -4994,7 +4994,7 @@ void TestOpsSocketHook::test_ops(OSDService *service, ObjectStore *store,
     cmd_getval(service->cct, cmdmap, "utime", delay, (int64_t)0);
     ostringstream oss;
     oss << delay;
-    int r = service->cct->_conf->set_val("osd_recovery_delay_start",
+    int r = service->cct->_conf.set_val("osd_recovery_delay_start",
                                         oss.str().c_str());
     if (r != 0) {
       ss << "set_recovery_delay: error setting "
@@ -5002,7 +5002,7 @@ void TestOpsSocketHook::test_ops(OSDService *service, ObjectStore *store,
         << r;
       return;
     }
-    service->cct->_conf->apply_changes(NULL);
+    service->cct->_conf.apply_changes(NULL);
     ss << "set_recovery_delay: set osd_recovery_delay_start "
        << "to " << service->cct->_conf->osd_recovery_delay_start;
     return;
@@ -5031,7 +5031,7 @@ void TestOpsSocketHook::test_ops(OSDService *service, ObjectStore *store,
       double pool_scrub_max_interval = 0;
       p->opts.get(pool_opts_t::SCRUB_MAX_INTERVAL, &pool_scrub_max_interval);
       double scrub_max_interval = pool_scrub_max_interval > 0 ?
-        pool_scrub_max_interval : g_conf->osd_scrub_max_interval;
+        pool_scrub_max_interval : g_conf()->osd_scrub_max_interval;
       // Instead of marking must_scrub force a schedule scrub
       utime_t stamp = ceph_clock_now();
       stamp -= scrub_max_interval;
@@ -5816,7 +5816,7 @@ void OSD::do_command(Connection *con, ceph_tid_t tid, vector<string>& cmd, buffe
     for (vector<string>::iterator a = ++argsvec.begin(); a != argsvec.end(); ++a)
       args += " " + *a;
     osd_lock.Unlock();
-    r = cct->_conf->injectargs(args, &ss);
+    r = cct->_conf.injectargs(args, &ss);
     osd_lock.Lock();
   }
   else if (prefix == "config set") {
@@ -5825,9 +5825,9 @@ void OSD::do_command(Connection *con, ceph_tid_t tid, vector<string>& cmd, buffe
     cmd_getval(cct, cmdmap, "key", key);
     cmd_getval(cct, cmdmap, "value", val);
     osd_lock.Unlock();
-    r = cct->_conf->set_val(key, val, &ss);
+    r = cct->_conf.set_val(key, val, &ss);
     if (r == 0) {
-      cct->_conf->apply_changes(nullptr);
+      cct->_conf.apply_changes(nullptr);
     }
     osd_lock.Lock();
   }
@@ -5836,7 +5836,7 @@ void OSD::do_command(Connection *con, ceph_tid_t tid, vector<string>& cmd, buffe
     cmd_getval(cct, cmdmap, "key", key);
     osd_lock.Unlock();
     std::string val;
-    r = cct->_conf->get_val(key, &val);
+    r = cct->_conf.get_val(key, &val);
     if (r == 0) {
       ds << val;
     }
@@ -5846,9 +5846,9 @@ void OSD::do_command(Connection *con, ceph_tid_t tid, vector<string>& cmd, buffe
     std::string key;
     cmd_getval(cct, cmdmap, "key", key);
     osd_lock.Unlock();
-    r = cct->_conf->rm_val(key);
+    r = cct->_conf.rm_val(key);
     if (r == 0) {
-      cct->_conf->apply_changes(nullptr);
+      cct->_conf.apply_changes(nullptr);
     }
     if (r == -ENOENT) {
       r = 0;  // make command idempotent
@@ -6119,14 +6119,14 @@ void OSD::do_command(Connection *con, ceph_tid_t tid, vector<string>& cmd, buffe
     cmd_getval(cct, cmdmap, "delay", delay);
     ostringstream oss;
     oss << delay;
-    r = cct->_conf->set_val("osd_recovery_delay_start", oss.str().c_str());
+    r = cct->_conf.set_val("osd_recovery_delay_start", oss.str().c_str());
     if (r != 0) {
       ss << "kick_recovery_wq: error setting "
         << "osd_recovery_delay_start to '" << delay << "': error "
         << r;
       goto out;
     }
-    cct->_conf->apply_changes(NULL);
+    cct->_conf.apply_changes(NULL);
     ss << "kicking recovery queue. set osd_recovery_delay_start "
        << "to " << cct->_conf->osd_recovery_delay_start;
   }
@@ -6207,7 +6207,7 @@ void OSD::probe_smart(const string& only_devid, ostream& ss)
 {
   set<string> devnames;
   store->get_devices(&devnames);
-  uint64_t smart_timeout = cct->_conf->get_val<uint64_t>(
+  uint64_t smart_timeout = cct->_conf.get_val<uint64_t>(
     "osd_smart_report_timeout");
 
   // == typedef std::map<std::string, mValue> mObject;
@@ -6975,7 +6975,7 @@ vector<DaemonHealthMetric> OSD::get_health_metrics()
     utime_t oldest_secs;
     const utime_t now = ceph_clock_now();
     auto too_old = now;
-    too_old -= cct->_conf->get_val<double>("osd_op_complaint_time");
+    too_old -= cct->_conf.get_val<double>("osd_op_complaint_time");
     int slow = 0;
     TrackedOpRef oldest_op;
     auto count_slow_ops = [&](TrackedOp& op) {
index 24ba6cb83b8084f4a20646b8a0ab881ec83dcd93..0eb44d504fe2ed78d30caa7cc38dd4254a51c58a 100644 (file)
@@ -282,11 +282,11 @@ public:
   void enqueue_front(OpQueueItem&& qi);
 
   void maybe_inject_dispatch_delay() {
-    if (g_conf->osd_debug_inject_dispatch_delay_probability > 0) {
+    if (g_conf()->osd_debug_inject_dispatch_delay_probability > 0) {
       if (rand() % 10000 <
-         g_conf->osd_debug_inject_dispatch_delay_probability * 10000) {
+         g_conf()->osd_debug_inject_dispatch_delay_probability * 10000) {
        utime_t t;
-       t.set_from_double(g_conf->osd_debug_inject_dispatch_delay_duration);
+       t.set_from_double(g_conf()->osd_debug_inject_dispatch_delay_duration);
        t.sleep();
       }
     }
index d3557a8671b2576b760e0f3eb151678c304e087b..107e390710a49992d86932814e70bc7828604c3d 100644 (file)
@@ -3741,9 +3741,9 @@ int OSDMap::build_simple_optioned(CephContext *cct, epoch_t e, uuid_d &fsid,
   } else {
     // count osds
     int maxosd = 0;
-    const md_config_t *conf = cct->_conf;
+    const auto& conf = cct->_conf;
     vector<string> sections;
-    conf->get_all_sections(sections);
+    conf.get_all_sections(sections);
 
     for (auto &section : sections) {
       if (section.find("osd.") != 0)
@@ -3800,8 +3800,8 @@ int OSDMap::build_simple_optioned(CephContext *cct, epoch_t e, uuid_d &fsid,
        pools[pool].set_flag(pg_pool_t::FLAG_NOPGCHANGE);
       if (cct->_conf->osd_pool_default_flag_nosizechange)
        pools[pool].set_flag(pg_pool_t::FLAG_NOSIZECHANGE);
-      pools[pool].size = cct->_conf->get_val<uint64_t>("osd_pool_default_size");
-      pools[pool].min_size = cct->_conf->get_osd_pool_default_min_size();
+      pools[pool].size = cct->_conf.get_val<uint64_t>("osd_pool_default_size");
+      pools[pool].min_size = cct->_conf.get_osd_pool_default_min_size();
       pools[pool].crush_rule = default_replicated_rule;
       pools[pool].object_hash = CEPH_STR_HASH_RJENKINS;
       pools[pool].set_pg_num(poolbase << pg_bits);
@@ -3833,7 +3833,7 @@ int OSDMap::get_erasure_code_profile_default(CephContext *cct,
                                             map<string,string> &profile_map,
                                             ostream *ss)
 {
-  int r = get_json_str_map(cct->_conf->get_val<string>("osd_pool_default_erasure_code_profile"),
+  int r = get_json_str_map(cct->_conf.get_val<string>("osd_pool_default_erasure_code_profile"),
                      *ss,
                      &profile_map);
   return r;
@@ -3890,7 +3890,7 @@ int OSDMap::build_simple_crush_map_from_conf(CephContext *cct,
                                             CrushWrapper& crush,
                                             ostream *ss)
 {
-  const md_config_t *conf = cct->_conf;
+  const auto& conf = cct->_conf;
 
   crush.create();
 
@@ -3905,7 +3905,7 @@ int OSDMap::build_simple_crush_map_from_conf(CephContext *cct,
 
   // add osds
   vector<string> sections;
-  conf->get_all_sections(sections);
+  conf.get_all_sections(sections);
 
   for (auto &section : sections) {
     if (section.find("osd.") != 0)
@@ -3921,12 +3921,12 @@ int OSDMap::build_simple_crush_map_from_conf(CephContext *cct,
     vector<string> sectiontmp;
     sectiontmp.push_back("osd");
     sectiontmp.push_back(section);
-    conf->get_val_from_conf_file(sectiontmp, "host", host, false);
-    conf->get_val_from_conf_file(sectiontmp, "rack", rack, false);
-    conf->get_val_from_conf_file(sectiontmp, "row", row, false);
-    conf->get_val_from_conf_file(sectiontmp, "room", room, false);
-    conf->get_val_from_conf_file(sectiontmp, "datacenter", dc, false);
-    conf->get_val_from_conf_file(sectiontmp, "root", pool, false);
+    conf.get_val_from_conf_file(sectiontmp, "host", host, false);
+    conf.get_val_from_conf_file(sectiontmp, "rack", rack, false);
+    conf.get_val_from_conf_file(sectiontmp, "row", row, false);
+    conf.get_val_from_conf_file(sectiontmp, "room", room, false);
+    conf.get_val_from_conf_file(sectiontmp, "datacenter", dc, false);
+    conf.get_val_from_conf_file(sectiontmp, "root", pool, false);
 
     if (host.length() == 0)
       host = "unknownhost";
@@ -4934,7 +4934,7 @@ void OSDMap::check_health(health_check_map_t *checks) const
   {
     // An osd could configure failsafe ratio, to something different
     // but for now assume it is the same here.
-    float fsr = g_conf->osd_failsafe_full_ratio;
+    float fsr = g_conf()->osd_failsafe_full_ratio;
     if (fsr > 1.0) fsr /= 100;
     float fr = get_full_ratio();
     float br = get_backfillfull_ratio();
@@ -5063,19 +5063,19 @@ void OSDMap::check_health(health_check_map_t *checks) const
   }
 
   // OLD_CRUSH_TUNABLES
-  if (g_conf->mon_warn_on_legacy_crush_tunables) {
+  if (g_conf()->mon_warn_on_legacy_crush_tunables) {
     string min = crush->get_min_required_version();
-    if (min < g_conf->mon_crush_min_required_version) {
+    if (min < g_conf()->mon_crush_min_required_version) {
       ostringstream ss;
       ss << "crush map has legacy tunables (require " << min
-        << ", min is " << g_conf->mon_crush_min_required_version << ")";
+        << ", min is " << g_conf()->mon_crush_min_required_version << ")";
       auto& d = checks->add("OLD_CRUSH_TUNABLES", HEALTH_WARN, ss.str());
       d.detail.push_back("see http://docs.ceph.com/docs/master/rados/operations/crush-map/#tunables");
     }
   }
 
   // OLD_CRUSH_STRAW_CALC_VERSION
-  if (g_conf->mon_warn_on_crush_straw_calc_version_zero) {
+  if (g_conf()->mon_warn_on_crush_straw_calc_version_zero) {
     if (crush->get_straw_calc_version() == 0) {
       ostringstream ss;
       ss << "crush map has straw_calc_version=0";
@@ -5086,7 +5086,7 @@ void OSDMap::check_health(health_check_map_t *checks) const
   }
 
   // CACHE_POOL_NO_HIT_SET
-  if (g_conf->mon_warn_on_cache_pools_without_hit_sets) {
+  if (g_conf()->mon_warn_on_cache_pools_without_hit_sets) {
     list<string> detail;
     for (map<int64_t, pg_pool_t>::const_iterator p = pools.begin();
         p != pools.end();
index 9938fa3010ba5a23c64b8890ae0d5082e30145cc..10e3581aa56f7f231d54bef973b4c339fea21718 100644 (file)
@@ -1532,7 +1532,7 @@ void PG::choose_async_recovery_ec(const map<pg_shard_t, pg_info_t> &all_info,
     version_t auth_version = auth_info.last_update.version;
     version_t candidate_version = shard_info.last_update.version;
     if (auth_version > candidate_version &&
-        (auth_version - candidate_version) > cct->_conf->get_val<uint64_t>("osd_async_recovery_min_pg_log_entries")) {
+        (auth_version - candidate_version) > cct->_conf.get_val<uint64_t>("osd_async_recovery_min_pg_log_entries")) {
       candidates_by_cost.insert(make_pair(auth_version - candidate_version, shard_i));
     }
   }
@@ -1583,7 +1583,7 @@ void PG::choose_async_recovery_replicated(const map<pg_shard_t, pg_info_t> &all_
     } else {
       approx_entries = candidate_version - auth_version;
     }
-    if (approx_entries > cct->_conf->get_val<uint64_t>("osd_async_recovery_min_pg_log_entries")) {
+    if (approx_entries > cct->_conf.get_val<uint64_t>("osd_async_recovery_min_pg_log_entries")) {
       candidates_by_cost.insert(make_pair(approx_entries, shard_i));
     }
   }
@@ -4929,7 +4929,7 @@ void PG::chunky_scrub(ThreadPool::TPHandle &handle)
          osd->clog->debug(oss);
        }
 
-       scrubber.preempt_left = cct->_conf->get_val<uint64_t>(
+       scrubber.preempt_left = cct->_conf.get_val<uint64_t>(
          "osd_scrub_max_preemptions");
        scrubber.preempt_divisor = 1;
         break;
@@ -5158,7 +5158,7 @@ void PG::chunky_scrub(ThreadPool::TPHandle &handle)
          break;
        }
 
-       scrubber.preempt_left = cct->_conf->get_val<uint64_t>(
+       scrubber.preempt_left = cct->_conf.get_val<uint64_t>(
          "osd_scrub_max_preemptions");
        scrubber.preempt_divisor = 1;
 
index 5c72ea79ce3e3b3c311793ce7dc4273d1f068d9d..13459844779e3f7413e01070b62b057df770a006 100644 (file)
@@ -548,7 +548,7 @@ PGBackend *PGBackend::build_pg_backend(
     stringstream ss;
     ceph::ErasureCodePluginRegistry::instance().factory(
       profile.find("plugin")->second,
-      cct->_conf->get_val<std::string>("erasure_code_dir"),
+      cct->_conf.get_val<std::string>("erasure_code_dir"),
       ec_profile,
       &ec_impl,
       &ss);
index 775ed0c589b3b29282d969bc349ade924661e709..cf672837d3108bb5db5f2797cf874e96200fe3c6 100644 (file)
@@ -1750,7 +1750,7 @@ void PrimaryLogPG::do_request(
        is_down() ||
        is_incomplete() ||
        (!is_active() && is_peered());
-      if (g_conf->osd_backoff_on_peering && !backoff) {
+      if (g_conf()->osd_backoff_on_peering && !backoff) {
        if (is_peering()) {
          backoff = true;
        }
@@ -2085,8 +2085,8 @@ void PrimaryLogPG::do_op(OpRequestRef& op)
       return;
     }
     if (can_backoff &&
-       (g_conf->osd_backoff_on_degraded ||
-        (g_conf->osd_backoff_on_unfound && missing_loc.is_unfound(head)))) {
+       (g_conf()->osd_backoff_on_degraded ||
+        (g_conf()->osd_backoff_on_unfound && missing_loc.is_unfound(head)))) {
       add_backoff(session, head, head);
       maybe_kick_recovery(head);
     } else {
@@ -2097,7 +2097,7 @@ void PrimaryLogPG::do_op(OpRequestRef& op)
 
   // degraded object?
   if (write_ordered && is_degraded_or_backfilling_object(head)) {
-    if (can_backoff && g_conf->osd_backoff_on_degraded) {
+    if (can_backoff && g_conf()->osd_backoff_on_degraded) {
       add_backoff(session, head, head);
       maybe_kick_recovery(head);
     } else {
index de4cb89093c5687c8c653be03a63cbfb523f3d02..abeca78d45d80bb04696686d409167e5a38a016b 100644 (file)
@@ -601,7 +601,7 @@ int ReplicatedBackend::be_deep_scrub(
                            CEPH_OSD_OP_FLAG_FADVISE_DONTNEED;
 
   bool skip_data_digest = store->has_builtin_csum() &&
-    g_conf->osd_skip_data_digest;
+    g_conf()->osd_skip_data_digest;
 
   utime_t sleeptime;
   sleeptime.set_from_double(cct->_conf->osd_debug_deep_scrub_sleep);
@@ -683,7 +683,7 @@ int ReplicatedBackend::be_deep_scrub(
   } else {
     iter->seek_to_first();
   }
-  int max = g_conf->osd_deep_scrub_keys;
+  int max = g_conf()->osd_deep_scrub_keys;
   while (iter->status() == 0 && iter->valid()) {
     pos.omap_bytes += iter->value().length();
     ++pos.omap_keys;
index d43505d37a7d35dde6df2614e9bf580dbf0bab40..f24a7d072fc3df12b446922d18774e32597d869c 100644 (file)
@@ -89,7 +89,7 @@ bool Session::check_backoff(
   if (b) {
     dout(10) << __func__ << " session " << this << " has backoff " << *b
             << " for " << *m << dendl;
-    assert(!b->is_acked() || !g_conf->osd_debug_crash_on_ignored_backoff);
+    assert(!b->is_acked() || !g_conf()->osd_debug_crash_on_ignored_backoff);
     return true;
   }
   // we may race with ms_handle_reset.  it clears session->con before removing
index ee8615baee3259ff488c342e88c714ffd8ffaef2..125dd66336b8d65a39c2a0c83d82224ca39bbfa9 100644 (file)
@@ -184,7 +184,7 @@ void SnapMapper::clear_snaps(
   assert(check(oid));
   set<string> to_remove;
   to_remove.insert(to_object_key(oid));
-  if (g_conf->subsys.should_gather<ceph_subsys_osd, 20>()) {
+  if (g_conf()->subsys.should_gather<ceph_subsys_osd, 20>()) {
     for (auto& i : to_remove) {
       dout(20) << __func__ << " rm " << i << dendl;
     }
@@ -203,7 +203,7 @@ void SnapMapper::set_snaps(
   encode(in, bl);
   to_set[to_object_key(oid)] = bl;
   dout(20) << __func__ << " " << oid << " " << in.snaps << dendl;
-  if (g_conf->subsys.should_gather<ceph_subsys_osd, 20>()) {
+  if (g_conf()->subsys.should_gather<ceph_subsys_osd, 20>()) {
     for (auto& i : to_set) {
       dout(20) << __func__ << " set " << i.first << dendl;
     }
@@ -242,7 +242,7 @@ int SnapMapper::update_snaps(
       to_remove.insert(to_raw_key(make_pair(*i, oid)));
     }
   }
-  if (g_conf->subsys.should_gather<ceph_subsys_osd, 20>()) {
+  if (g_conf()->subsys.should_gather<ceph_subsys_osd, 20>()) {
     for (auto& i : to_remove) {
       dout(20) << __func__ << " rm " << i << dendl;
     }
@@ -279,7 +279,7 @@ void SnapMapper::add_oid(
        ++i) {
     to_add.insert(to_raw(make_pair(*i, oid)));
   }
-  if (g_conf->subsys.should_gather<ceph_subsys_osd, 20>()) {
+  if (g_conf()->subsys.should_gather<ceph_subsys_osd, 20>()) {
     for (auto& i : to_add) {
       dout(20) << __func__ << " set " << i.first << dendl;
     }
@@ -360,7 +360,7 @@ int SnapMapper::_remove_oid(
        ++i) {
     to_remove.insert(to_raw_key(make_pair(*i, oid)));
   }
-  if (g_conf->subsys.should_gather<ceph_subsys_osd, 20>()) {
+  if (g_conf()->subsys.should_gather<ceph_subsys_osd, 20>()) {
     for (auto& i : to_remove) {
       dout(20) << __func__ << " rm " << i << dendl;
     }
index 692448f23a2b3b006029baa7c9d313835922ab41..8713384499d41ee6264042a2f69849b792235f47 100644 (file)
@@ -94,7 +94,7 @@ void Journaler::_set_layout(file_layout_t const *l)
 
   // prefetch intelligently.
   // (watch out, this is big if you use big objects or weird striping)
-  uint64_t periods = cct->_conf->get_val<uint64_t>("journaler_prefetch_periods");
+  uint64_t periods = cct->_conf.get_val<uint64_t>("journaler_prefetch_periods");
   fetch_len = layout.get_period() * periods;
 }
 
@@ -761,7 +761,7 @@ void Journaler::_flush(C_OnFinisher *onsafe)
 
 bool Journaler::_write_head_needed()
 {
-  return last_wrote_head + seconds(cct->_conf->get_val<int64_t>("journaler_write_head_interval"))
+  return last_wrote_head + seconds(cct->_conf.get_val<int64_t>("journaler_write_head_interval"))
       < ceph::real_clock::now();
 }
 
@@ -782,7 +782,7 @@ void Journaler::_issue_prezero()
 {
   assert(prezeroing_pos >= flush_pos);
 
-  uint64_t num_periods = cct->_conf->get_val<uint64_t>("journaler_prezero_periods");
+  uint64_t num_periods = cct->_conf.get_val<uint64_t>("journaler_prezero_periods");
   /*
    * issue zero requests based on write_pos, even though the invariant
    * is that we zero ahead of flush_pos.
index b0fd2ac0bb3fb80caf6015b07608042db4713780..32041e09e32fd27fe3dcdefaf2c400ac5274a8a3 100644 (file)
@@ -385,7 +385,7 @@ void Objecter::init()
 
   update_crush_location();
 
-  cct->_conf->add_observer(this);
+  cct->_conf.add_observer(this);
 
   initialized = true;
 }
@@ -413,7 +413,7 @@ void Objecter::shutdown()
 
   initialized = false;
 
-  cct->_conf->remove_observer(this);
+  cct->_conf.remove_observer(this);
 
   map<int,OSDSession*>::iterator p;
   while (!osd_sessions.empty()) {
index dc1954012cfcc187a63b91adfcb7ae4e420f7273..aceee55909f5c1ca5a14c011b34b3487ae9de475 100644 (file)
@@ -86,17 +86,17 @@ static void get_profile_name(char *profile_name, int profile_name_len)
 #endif
 
   char path[PATH_MAX];
-  snprintf(path, sizeof(path), "%s", g_conf->log_file.c_str());
+  snprintf(path, sizeof(path), "%s", g_conf()->log_file.c_str());
   char *last_slash = rindex(path, '/');
 
   if (last_slash == NULL) {
     snprintf(profile_name, profile_name_len, "./%s.profile",
-            g_conf->name.to_cstr());
+            g_conf()->name.to_cstr());
   }
   else {
     last_slash[1] = '\0';
     snprintf(profile_name, profile_name_len, "%s/%s.profile",
-            path, g_conf->name.to_cstr());
+            path, g_conf()->name.to_cstr());
   }
 #if __GNUC__ && __GNUC__ >= 8
 #pragma GCC diagnostic pop
@@ -141,24 +141,24 @@ void ceph_heap_profiler_handle_command(const std::vector<std::string>& cmd,
     }
     char heap_stats[HEAP_PROFILER_STATS_SIZE];
     ceph_heap_profiler_stats(heap_stats, sizeof(heap_stats));
-    out << g_conf->name << " dumping heap profile now.\n"
+    out << g_conf()->name << " dumping heap profile now.\n"
        << heap_stats;
     ceph_heap_profiler_dump("admin request");
   } else if (cmd.size() == 1 && cmd[0] == "start_profiler") {
     ceph_heap_profiler_start();
-    out << g_conf->name << " started profiler";
+    out << g_conf()->name << " started profiler";
   } else if (cmd.size() == 1 && cmd[0] == "stop_profiler") {
     ceph_heap_profiler_stop();
-    out << g_conf->name << " stopped profiler";
+    out << g_conf()->name << " stopped profiler";
   } else if (cmd.size() == 1 && cmd[0] == "release") {
     ceph_heap_release_free_memory();
-    out << g_conf->name << " releasing free RAM back to system.";
+    out << g_conf()->name << " releasing free RAM back to system.";
   } else
 #endif
   if (cmd.size() == 1 && cmd[0] == "stats") {
     char heap_stats[HEAP_PROFILER_STATS_SIZE];
     ceph_heap_profiler_stats(heap_stats, sizeof(heap_stats));
-    out << g_conf->name << " tcmalloc heap stats:"
+    out << g_conf()->name << " tcmalloc heap stats:"
        << heap_stats;
   } else {
     out << "unknown command " << cmd;
index 6dfc0318d501b674cd42757a8e2e7760bdb98dc7..88c6c7f1ed49216b7e020eecad5cc9a5ba1035d8 100644 (file)
@@ -183,7 +183,7 @@ public:
   void set_ctx(CephContext *_cct) {
     cct = _cct;
     lru_window = cct->_conf->rgw_cache_lru_size / 2;
-    expiry = std::chrono::seconds(cct->_conf->get_val<uint64_t>(
+    expiry = std::chrono::seconds(cct->_conf.get_val<uint64_t>(
                                                "rgw_cache_expiry_interval"));
   }
   bool chain_cache_entry(std::initializer_list<rgw_cache_entry_info*> cache_info_entries,
index 0ae02e26a458a534efd19c7151f25082ada938bc..82163cf8d746f63284189b12087cbe0a568aca41 100644 (file)
@@ -339,7 +339,7 @@ public:
   size_t send_status(const int status,
                      const char* const status_name) override {
     if ((204 == status || 304 == status) &&
-        ! g_conf->rgw_print_prohibited_content_length) {
+        ! g_conf()->rgw_print_prohibited_content_length) {
       action = ContentLengthAction::INHIBIT;
     } else {
       action = ContentLengthAction::FORWARD;
index 283af95c3a65a1711919233f40959e0e8b9faf36..b1bf4fa66d915c9efcfac02a53ca7f7f2c66e934 100644 (file)
@@ -41,7 +41,7 @@ void RGWAsyncRadosProcessor::RGWWQ::_process(RGWAsyncRadosRequest *req, ThreadPo
 }
 
 void RGWAsyncRadosProcessor::RGWWQ::_dump_queue() {
-  if (!g_conf->subsys.should_gather<ceph_subsys_rgw, 20>()) {
+  if (!g_conf()->subsys.should_gather<ceph_subsys_rgw, 20>()) {
     return;
   }
   deque<RGWAsyncRadosRequest *>::iterator iter;
@@ -58,8 +58,8 @@ void RGWAsyncRadosProcessor::RGWWQ::_dump_queue() {
 RGWAsyncRadosProcessor::RGWAsyncRadosProcessor(RGWRados *_store, int num_threads)
   : store(_store), m_tp(store->ctx(), "RGWAsyncRadosProcessor::m_tp", "rados_async", num_threads),
     req_throttle(store->ctx(), "rgw_async_rados_ops", num_threads * 2),
-    req_wq(this, g_conf->rgw_op_thread_timeout,
-    g_conf->rgw_op_thread_suicide_timeout, &m_tp) {
+    req_wq(this, g_conf()->rgw_op_thread_timeout,
+    g_conf()->rgw_op_thread_suicide_timeout, &m_tp) {
 }
 
 void RGWAsyncRadosProcessor::start() {
index 051866a3f07190bd67123b71b9bf687bd1ffbf1b..e44cc76de3346f26d2ef70cce92915078c347a5d 100644 (file)
@@ -304,7 +304,7 @@ int RGWLC::handle_multipart_expiration(RGWRados::Bucket *target, const map<strin
   int ret;
   RGWBucketInfo& bucket_info = target->get_bucket_info();
   RGWRados::Bucket::List list_op(target);
-  auto delay_ms = cct->_conf->get_val<int64_t>("rgw_lc_thread_delay");
+  auto delay_ms = cct->_conf.get_val<int64_t>("rgw_lc_thread_delay");
   list_op.params.list_versions = false;
   /* lifecycle processing does not depend on total order, so can
    * take advantage of unorderd listing optimizations--such as
@@ -370,7 +370,7 @@ int RGWLC::bucket_lc_process(string& shard_id)
   vector<rgw_bucket_dir_entry> objs;
   RGWObjectCtx obj_ctx(store);
   vector<std::string> result;
-  auto delay_ms = cct->_conf->get_val<int64_t>("rgw_lc_thread_delay");
+  auto delay_ms = cct->_conf.get_val<int64_t>("rgw_lc_thread_delay");
   boost::split(result, shard_id, boost::is_any_of(":"));
   string bucket_tenant = result[0];
   string bucket_name = result[1];
index a39642fa39d98b45518efee28a2b418fdffd1eeb..a20146222a068a0b10d3e467fd396001ffb67fa4 100644 (file)
@@ -5584,7 +5584,7 @@ void RGWCompleteMultipart::execute()
   rgw_pool meta_pool;
   rgw_raw_obj raw_obj;
   int max_lock_secs_mp =
-    s->cct->_conf->get_val<int64_t>("rgw_mp_lock_max_time");
+    s->cct->_conf.get_val<int64_t>("rgw_mp_lock_max_time");
   utime_t dur(max_lock_secs_mp, 0);
 
   store->obj_to_raw((s->bucket_info).placement_rule, meta_obj, &raw_obj);
@@ -5936,8 +5936,8 @@ void RGWListBucketMultiparts::execute()
 
 void RGWGetHealthCheck::execute()
 {
-  if (!g_conf->rgw_healthcheck_disabling_path.empty() &&
-      (::access(g_conf->rgw_healthcheck_disabling_path.c_str(), F_OK) == 0)) {
+  if (!g_conf()->rgw_healthcheck_disabling_path.empty() &&
+      (::access(g_conf()->rgw_healthcheck_disabling_path.c_str(), F_OK) == 0)) {
     /* Disabling path specified & existent in the filesystem. */
     op_ret = -ERR_SERVICE_UNAVAILABLE; /* 503 */
   } else {
index c6997d27816ede51d178821eb9c4076cd15f5ea9..a1ffa92d609a0f4f8138a0de7a7802a41321146e 100644 (file)
@@ -1975,7 +1975,7 @@ static inline int rgw_get_request_metadata(CephContext* const cct,
        * as ObjectStore::get_max_attr_name_length() can set the limit even
        * lower than the "osd_max_attr_name_len" configurable.  */
       const size_t max_attr_name_len = \
-        cct->_conf->get_val<size_t>("rgw_max_attr_name_len");
+        cct->_conf.get_val<size_t>("rgw_max_attr_name_len");
       if (max_attr_name_len && attr_name.length() > max_attr_name_len) {
         return -ENAMETOOLONG;
       }
@@ -1983,7 +1983,7 @@ static inline int rgw_get_request_metadata(CephContext* const cct,
       /* Similar remarks apply to the check for value size. We're veryfing
        * it early at the RGW's side as it's being claimed in /info. */
       const size_t max_attr_size = \
-        cct->_conf->get_val<Option::size_t>("rgw_max_attr_size");
+        cct->_conf.get_val<Option::size_t>("rgw_max_attr_size");
       if (max_attr_size && xattr.length() > max_attr_size) {
         return -EFBIG;
       }
@@ -1991,7 +1991,7 @@ static inline int rgw_get_request_metadata(CephContext* const cct,
       /* Swift allows administrators to limit the number of metadats items
        * send _in a single request_. */
       const auto rgw_max_attrs_num_in_req = \
-        cct->_conf->get_val<size_t>("rgw_max_attrs_num_in_req");
+        cct->_conf.get_val<size_t>("rgw_max_attrs_num_in_req");
       if (rgw_max_attrs_num_in_req &&
           ++valid_meta_count > rgw_max_attrs_num_in_req) {
         return -E2BIG;
index 032abe3ebd4b6e1685e4b5f49b43a1cb04999679..717fbfe4c301eb4e3f37288cf0474ed2923c04a1 100644 (file)
@@ -3175,7 +3175,7 @@ class RGWDataNotifier : public RGWRadosThread {
   RGWDataNotifierManager notify_mgr;
 
   uint64_t interval_msec() override {
-    return cct->_conf->get_val<int64_t>("rgw_data_notify_interval_msec");
+    return cct->_conf.get_val<int64_t>("rgw_data_notify_interval_msec");
   }
   void stop_process() override {
     notify_mgr.stop();
index c8ede5803e44f6473a8a5628f1020a5ae8718a35..4fc4504dd6010a0804306276514d5c49d82f49ec 100644 (file)
@@ -3893,7 +3893,7 @@ public:
 
   void init(RGWRados *store) {
     store->register_chained_cache(this);
-    expiry = std::chrono::seconds(store->ctx()->_conf->get_val<uint64_t>(
+    expiry = std::chrono::seconds(store->ctx()->_conf.get_val<uint64_t>(
                                    "rgw_cache_expiry_interval"));
   }
 
index 302c834565c8bd23ef4024b9e7bb335fe8bad9ad..43b0b4564509b93db7890605b84971f54ddb42e7 100644 (file)
@@ -422,7 +422,7 @@ void dump_etag(struct req_state* const s,
 
 void dump_bucket_from_state(struct req_state *s)
 {
-  if (g_conf->rgw_expose_bucket && ! s->bucket_name.empty()) {
+  if (g_conf()->rgw_expose_bucket && ! s->bucket_name.empty()) {
     if (! s->bucket_tenant.empty()) {
       dump_header(s, "Bucket",
                   url_encode(s->bucket_tenant + "/" + s->bucket_name));
@@ -1987,7 +1987,7 @@ int RGWREST::preprocess(struct req_state *s, rgw::io::BasicClient* cio)
   // Map the listing of rgw_enable_apis in REVERSE order, so that items near
   // the front of the list have a higher number assigned (and -1 for items not in the list).
   list<string> apis;
-  get_str_list(g_conf->rgw_enable_apis, apis);
+  get_str_list(g_conf()->rgw_enable_apis, apis);
   int api_priority_s3 = -1;
   int api_priority_s3website = -1;
   auto api_s3website_priority_rawpos = std::find(apis.begin(), apis.end(), "s3website");
@@ -2031,7 +2031,7 @@ int RGWREST::preprocess(struct req_state *s, rgw::io::BasicClient* cio)
       << " in_hosted_domain_s3website=" << in_hosted_domain_s3website 
       << dendl;
 
-    if (g_conf->rgw_resolve_cname
+    if (g_conf()->rgw_resolve_cname
        && !in_hosted_domain
        && !in_hosted_domain_s3website) {
       string cname;
@@ -2212,7 +2212,7 @@ int RGWREST::preprocess(struct req_state *s, rgw::io::BasicClient* cio)
     }
   }
 
-  if (g_conf->rgw_print_continue) {
+  if (g_conf()->rgw_print_continue) {
     const char *expect = info.env->get("HTTP_EXPECT");
     s->expect_cont = (expect && !strcasecmp(expect, "100-continue"));
   }
index b7ed39f315e1317c336c306c1317e2bd0359860f..e6e3010a2d5a474a461c270a5c19f7201a35a79b 100644 (file)
@@ -2008,7 +2008,7 @@ done:
     for (auto &it : crypt_http_responses)
       dump_header(s, it.first, it.second);
     s->formatter->open_object_section("PostResponse");
-    if (g_conf->rgw_dns_name.length())
+    if (g_conf()->rgw_dns_name.length())
       s->formatter->dump_format("Location", "%s/%s",
                                s->info.script_uri.c_str(),
                                s->object.name.c_str());
index 87a64e9ef726434405c98bdf1d90434e26d278d4..f190a432c1ce77fb6033e0d844e8608f89fbf767 100644 (file)
@@ -976,17 +976,17 @@ namespace rgw {
 // read bucket trim configuration from ceph context
 void configure_bucket_trim(CephContext *cct, BucketTrimConfig& config)
 {
-  auto conf = cct->_conf;
+  const auto& conf = cct->_conf;
 
   config.trim_interval_sec =
-      conf->get_val<int64_t>("rgw_sync_log_trim_interval");
+      conf.get_val<int64_t>("rgw_sync_log_trim_interval");
   config.counter_size = 512;
   config.buckets_per_interval =
-      conf->get_val<int64_t>("rgw_sync_log_trim_max_buckets");
+      conf.get_val<int64_t>("rgw_sync_log_trim_max_buckets");
   config.min_cold_buckets_per_interval =
-      conf->get_val<int64_t>("rgw_sync_log_trim_min_cold_buckets");
+      conf.get_val<int64_t>("rgw_sync_log_trim_min_cold_buckets");
   config.concurrent_buckets =
-      conf->get_val<int64_t>("rgw_sync_log_trim_concurrent_buckets");
+      conf.get_val<int64_t>("rgw_sync_log_trim_concurrent_buckets");
   config.notify_timeout_ms = 10000;
   config.recent_size = 128;
   config.recent_duration = std::chrono::hours(2);
index 42ae400f5a953347b48a07ca8a3a1dff039254f6..2754dda02bad42343bce75d3fdc6da80941da5f0 100644 (file)
@@ -169,12 +169,12 @@ void seed::sha1(SHA1 *h, bufferlist &bl, off_t bl_len)
 int seed::get_params()
 {
   is_torrent = true;
-  info.piece_length = g_conf->rgw_torrent_sha_unit;
-  create_by = g_conf->rgw_torrent_createby;
-  encoding = g_conf->rgw_torrent_encoding;
-  origin = g_conf->rgw_torrent_origin;
-  comment = g_conf->rgw_torrent_comment;
-  announce = g_conf->rgw_torrent_tracker;
+  info.piece_length = g_conf()->rgw_torrent_sha_unit;
+  create_by = g_conf()->rgw_torrent_createby;
+  encoding = g_conf()->rgw_torrent_encoding;
+  origin = g_conf()->rgw_torrent_origin;
+  comment = g_conf()->rgw_torrent_comment;
+  announce = g_conf()->rgw_torrent_tracker;
 
   /* tracker and tracker list is empty, set announce to origin */
   if (announce.empty() && !origin.empty())
index f78a2824a25d956c5b1997222995522eabd91b08..49aadaa36cb5ec909bfe63996d5228b6c54fd1d2 100644 (file)
@@ -12,7 +12,7 @@
  *
  */
 #include "common/ConfUtils.h"
-#include "common/config.h"
+#include "common/config_proxy.h"
 #include "common/errno.h"
 #include "gtest/gtest.h"
 #include "include/buffer.h"
@@ -469,32 +469,32 @@ TEST(ConfUtils, EscapingFiles) {
 }
 
 TEST(ConfUtils, Overrides) {
-  md_config_t conf;
+  ConfigProxy conf{false};
   std::ostringstream warn;
   std::string override_conf_1_f(next_tempfile(override_config_1));
 
-  conf.name.set(CEPH_ENTITY_TYPE_MON, "0");
+  conf->name.set(CEPH_ENTITY_TYPE_MON, "0");
   conf.parse_config_files(override_conf_1_f.c_str(), &warn, 0);
   ASSERT_EQ(conf.parse_errors.size(), 0U);
   ASSERT_EQ(conf.log_file, "global_log");
 
-  conf.name.set(CEPH_ENTITY_TYPE_MDS, "a");
+  conf->name.set(CEPH_ENTITY_TYPE_MDS, "a");
   conf.parse_config_files(override_conf_1_f.c_str(), &warn, 0);
   ASSERT_EQ(conf.parse_errors.size(), 0U);
   ASSERT_EQ(conf.log_file, "mds_log");
 
-  conf.name.set(CEPH_ENTITY_TYPE_OSD, "0");
+  conf->name.set(CEPH_ENTITY_TYPE_OSD, "0");
   conf.parse_config_files(override_conf_1_f.c_str(), &warn, 0);
   ASSERT_EQ(conf.parse_errors.size(), 0U);
   ASSERT_EQ(conf.log_file, "osd0_log");
 }
 
 TEST(ConfUtils, DupKey) {
-  md_config_t conf;
+  ConfigProxy conf{false};
   std::ostringstream warn;
   std::string dup_key_config_f(next_tempfile(dup_key_config_1));
 
-  conf.name.set(CEPH_ENTITY_TYPE_MDS, "a");
+  conf->name.set(CEPH_ENTITY_TYPE_MDS, "a");
   conf.parse_config_files(dup_key_config_f.c_str(), &warn, 0);
   ASSERT_EQ(conf.parse_errors.size(), 0U);
   ASSERT_EQ(conf.log_file, string("3"));
index bb02ef0e768dae86c5f776fef92cfecbdebab596..c9248c788dfffbd2e6c0db4d5aa940ac6a4781b4 100644 (file)
@@ -32,77 +32,77 @@ using std::string;
 
 TEST(DaemonConfig, SimpleSet) {
   int ret;
-  ret = g_ceph_context->_conf->set_val("log_graylog_port", "21");
+  ret = g_ceph_context->_conf.set_val("log_graylog_port", "21");
   ASSERT_EQ(0, ret);
-  g_ceph_context->_conf->apply_changes(NULL);
+  g_ceph_context->_conf.apply_changes(nullptr);
   char buf[128];
   memset(buf, 0, sizeof(buf));
   char *tmp = buf;
-  ret = g_ceph_context->_conf->get_val("log_graylog_port", &tmp, sizeof(buf));
+  ret = g_ceph_context->_conf.get_val("log_graylog_port", &tmp, sizeof(buf));
   ASSERT_EQ(0, ret);
   ASSERT_EQ(string("21"), string(buf));
-  g_ceph_context->_conf->rm_val("log_graylog_port");
+  g_ceph_context->_conf.rm_val("log_graylog_port");
 }
 
 TEST(DaemonConfig, Substitution) {
   int ret;
-  g_conf->_clear_safe_to_start_threads();
-  ret = g_ceph_context->_conf->set_val("host", "foo");
+  g_conf()._clear_safe_to_start_threads();
+  ret = g_ceph_context->_conf.set_val("host", "foo");
   ASSERT_EQ(0, ret);
-  ret = g_ceph_context->_conf->set_val("public_network", "bar$host.baz");
+  ret = g_ceph_context->_conf.set_val("public_network", "bar$host.baz");
   ASSERT_EQ(0, ret);
-  g_ceph_context->_conf->apply_changes(NULL);
+  g_ceph_context->_conf.apply_changes(nullptr);
   char buf[128];
   memset(buf, 0, sizeof(buf));
   char *tmp = buf;
-  ret = g_ceph_context->_conf->get_val("public_network", &tmp, sizeof(buf));
+  ret = g_ceph_context->_conf.get_val("public_network", &tmp, sizeof(buf));
   ASSERT_EQ(0, ret);
   ASSERT_EQ(string("barfoo.baz"), string(buf));
 }
 
 TEST(DaemonConfig, SubstitutionTrailing) {
   int ret;
-  g_conf->_clear_safe_to_start_threads();
-  ret = g_ceph_context->_conf->set_val("host", "foo");
+  g_conf()._clear_safe_to_start_threads();
+  ret = g_ceph_context->_conf.set_val("host", "foo");
   ASSERT_EQ(0, ret);
-  ret = g_ceph_context->_conf->set_val("public_network", "bar$host");
+  ret = g_ceph_context->_conf.set_val("public_network", "bar$host");
   ASSERT_EQ(0, ret);
-  g_ceph_context->_conf->apply_changes(NULL);
+  g_ceph_context->_conf.apply_changes(nullptr);
   char buf[128];
   memset(buf, 0, sizeof(buf));
   char *tmp = buf;
-  ret = g_ceph_context->_conf->get_val("public_network", &tmp, sizeof(buf));
+  ret = g_ceph_context->_conf.get_val("public_network", &tmp, sizeof(buf));
   ASSERT_EQ(0, ret);
   ASSERT_EQ(string("barfoo"), string(buf));
 }
 
 TEST(DaemonConfig, SubstitutionBraces) {
   int ret;
-  g_conf->_clear_safe_to_start_threads();
-  ret = g_ceph_context->_conf->set_val("host", "foo");
+  g_conf()._clear_safe_to_start_threads();
+  ret = g_ceph_context->_conf.set_val("host", "foo");
   ASSERT_EQ(0, ret);
-  ret = g_ceph_context->_conf->set_val("public_network", "bar${host}baz");
+  ret = g_ceph_context->_conf.set_val("public_network", "bar${host}baz");
   ASSERT_EQ(0, ret);
-  g_ceph_context->_conf->apply_changes(NULL);
+  g_ceph_context->_conf.apply_changes(nullptr);
   char buf[128];
   memset(buf, 0, sizeof(buf));
   char *tmp = buf;
-  ret = g_ceph_context->_conf->get_val("public_network", &tmp, sizeof(buf));
+  ret = g_ceph_context->_conf.get_val("public_network", &tmp, sizeof(buf));
   ASSERT_EQ(0, ret);
   ASSERT_EQ(string("barfoobaz"), string(buf));
 }
 TEST(DaemonConfig, SubstitutionBracesTrailing) {
   int ret;
-  g_conf->_clear_safe_to_start_threads();
-  ret = g_ceph_context->_conf->set_val("host", "foo");
+  g_conf()._clear_safe_to_start_threads();
+  ret = g_ceph_context->_conf.set_val("host", "foo");
   ASSERT_EQ(0, ret);
-  ret = g_ceph_context->_conf->set_val("public_network", "bar${host}");
+  ret = g_ceph_context->_conf.set_val("public_network", "bar${host}");
   ASSERT_EQ(0, ret);
-  g_ceph_context->_conf->apply_changes(NULL);
+  g_ceph_context->_conf.apply_changes(NULL);
   char buf[128];
   memset(buf, 0, sizeof(buf));
   char *tmp = buf;
-  ret = g_ceph_context->_conf->get_val("public_network", &tmp, sizeof(buf));
+  ret = g_ceph_context->_conf.get_val("public_network", &tmp, sizeof(buf));
   ASSERT_EQ(0, ret);
   ASSERT_EQ(string("barfoo"), string(buf));
 }
@@ -110,22 +110,22 @@ TEST(DaemonConfig, SubstitutionBracesTrailing) {
 // config: variable substitution happen only once http://tracker.ceph.com/issues/7103
 TEST(DaemonConfig, SubstitutionMultiple) {
   int ret;
-  ret = g_ceph_context->_conf->set_val("mon_host", "localhost");
+  ret = g_ceph_context->_conf.set_val("mon_host", "localhost");
   ASSERT_EQ(0, ret);
-  ret = g_ceph_context->_conf->set_val("keyring", "$mon_host/$cluster.keyring,$mon_host/$cluster.mon.keyring");
+  ret = g_ceph_context->_conf.set_val("keyring", "$mon_host/$cluster.keyring,$mon_host/$cluster.mon.keyring");
   ASSERT_EQ(0, ret);
-  g_ceph_context->_conf->apply_changes(NULL);
+  g_ceph_context->_conf.apply_changes(NULL);
   char buf[512];
   memset(buf, 0, sizeof(buf));
   char *tmp = buf;
-  ret = g_ceph_context->_conf->get_val("keyring", &tmp, sizeof(buf));
+  ret = g_ceph_context->_conf.get_val("keyring", &tmp, sizeof(buf));
   ASSERT_EQ(0, ret);
   ASSERT_EQ(string("localhost/ceph.keyring,localhost/ceph.mon.keyring"), tmp);
   ASSERT_TRUE(strchr(buf, '$') == NULL);
 }
 
 TEST(DaemonConfig, ArgV) {
-  g_conf->_clear_safe_to_start_threads();
+  g_conf()._clear_safe_to_start_threads();
 
   int ret;
   const char *argv[] = { "foo", "--log-graylog-port", "22",
@@ -133,46 +133,46 @@ TEST(DaemonConfig, ArgV) {
   size_t argc = (sizeof(argv) / sizeof(argv[0])) - 1;
   vector<const char*> args;
   argv_to_vec(argc, argv, args);
-  g_ceph_context->_conf->parse_argv(args);
-  g_ceph_context->_conf->apply_changes(NULL);
+  g_ceph_context->_conf.parse_argv(args);
+  g_ceph_context->_conf.apply_changes(nullptr);
 
   char buf[128];
   char *tmp = buf;
   memset(buf, 0, sizeof(buf));
-  ret = g_ceph_context->_conf->get_val("key", &tmp, sizeof(buf));
+  ret = g_ceph_context->_conf.get_val("key", &tmp, sizeof(buf));
   ASSERT_EQ(0, ret);
   ASSERT_EQ(string("my-key"), string(buf));
 
   memset(buf, 0, sizeof(buf));
-  ret = g_ceph_context->_conf->get_val("log_graylog_port", &tmp, sizeof(buf));
+  ret = g_ceph_context->_conf.get_val("log_graylog_port", &tmp, sizeof(buf));
   ASSERT_EQ(0, ret);
   ASSERT_EQ(string("22"), string(buf));
 
-  g_conf->set_safe_to_start_threads();
+  g_conf().set_safe_to_start_threads();
 }
 
 TEST(DaemonConfig, InjectArgs) {
   int ret;
   std::string injection("--log-graylog-port 56 --leveldb-max-open-files 42");
-  ret = g_ceph_context->_conf->injectargs(injection, &cout);
+  ret = g_ceph_context->_conf.injectargs(injection, &cout);
   ASSERT_EQ(0, ret);
 
   char buf[128];
   char *tmp = buf;
   memset(buf, 0, sizeof(buf));
-  ret = g_ceph_context->_conf->get_val("leveldb_max_open_files", &tmp, sizeof(buf));
+  ret = g_ceph_context->_conf.get_val("leveldb_max_open_files", &tmp, sizeof(buf));
   ASSERT_EQ(0, ret);
   ASSERT_EQ(string("42"), string(buf));
 
   memset(buf, 0, sizeof(buf));
-  ret = g_ceph_context->_conf->get_val("log_graylog_port", &tmp, sizeof(buf));
+  ret = g_ceph_context->_conf.get_val("log_graylog_port", &tmp, sizeof(buf));
   ASSERT_EQ(0, ret);
   ASSERT_EQ(string("56"), string(buf));
 
   injection = "--log-graylog-port 57";
-  ret = g_ceph_context->_conf->injectargs(injection, &cout);
+  ret = g_ceph_context->_conf.injectargs(injection, &cout);
   ASSERT_EQ(0, ret);
-  ret = g_ceph_context->_conf->get_val("log_graylog_port", &tmp, sizeof(buf));
+  ret = g_ceph_context->_conf.get_val("log_graylog_port", &tmp, sizeof(buf));
   ASSERT_EQ(0, ret);
   ASSERT_EQ(string("57"), string(buf));
 }
@@ -186,35 +186,35 @@ TEST(DaemonConfig, InjectArgsReject) {
 
   // We should complain about the garbage in the input
   std::string injection("--random-garbage-in-injectargs 26 --log-graylog-port 28");
-  ret = g_ceph_context->_conf->injectargs(injection, &cout);
+  ret = g_ceph_context->_conf.injectargs(injection, &cout);
   ASSERT_EQ(-EINVAL, ret);
 
   // But, debug should still be set...
   memset(buf, 0, sizeof(buf));
-  ret = g_ceph_context->_conf->get_val("log_graylog_port", &tmp, sizeof(buf));
+  ret = g_ceph_context->_conf.get_val("log_graylog_port", &tmp, sizeof(buf));
   ASSERT_EQ(0, ret);
   ASSERT_EQ(string("28"), string(buf));
 
   // What's the current value of osd_data?
   memset(buf, 0, sizeof(buf));
-  ret = g_ceph_context->_conf->get_val("osd_data", &tmp, sizeof(buf));
+  ret = g_ceph_context->_conf.get_val("osd_data", &tmp, sizeof(buf));
   ASSERT_EQ(0, ret);
 
   // Injectargs shouldn't let us change this, since it is a string-valued
   // variable and there isn't an observer for it.
   std::string injection2("--osd_data /tmp/some-other-directory --log-graylog-port 4");
-  ret = g_ceph_context->_conf->injectargs(injection2, &cout);
+  ret = g_ceph_context->_conf.injectargs(injection2, &cout);
   ASSERT_EQ(-ENOSYS, ret);
 
   // It should be unchanged.
   memset(buf2, 0, sizeof(buf2));
-  ret = g_ceph_context->_conf->get_val("osd_data", &tmp2, sizeof(buf2));
+  ret = g_ceph_context->_conf.get_val("osd_data", &tmp2, sizeof(buf2));
   ASSERT_EQ(0, ret);
   ASSERT_EQ(string(buf), string(buf2));
 
   // We should complain about the missing arguments.
   std::string injection3("--log-graylog-port 28 --debug_ms");
-  ret = g_ceph_context->_conf->injectargs(injection3, &cout);
+  ret = g_ceph_context->_conf.injectargs(injection3, &cout);
   ASSERT_EQ(-EINVAL, ret);
 }
 
@@ -225,51 +225,51 @@ TEST(DaemonConfig, InjectArgsBooleans) {
 
   // Change log_to_syslog
   std::string injection("--log_to_syslog --log-graylog-port 28");
-  ret = g_ceph_context->_conf->injectargs(injection, &cout);
+  ret = g_ceph_context->_conf.injectargs(injection, &cout);
   ASSERT_EQ(0, ret);
 
   // log_to_syslog should be set...
   memset(buf, 0, sizeof(buf));
-  ret = g_ceph_context->_conf->get_val("log_to_syslog", &tmp, sizeof(buf));
+  ret = g_ceph_context->_conf.get_val("log_to_syslog", &tmp, sizeof(buf));
   ASSERT_EQ(0, ret);
   ASSERT_EQ(string("true"), string(buf));
 
   // Turn off log_to_syslog
   injection = "--log_to_syslog=false --log-graylog-port 28";
-  ret = g_ceph_context->_conf->injectargs(injection, &cout);
+  ret = g_ceph_context->_conf.injectargs(injection, &cout);
   ASSERT_EQ(0, ret);
 
   // log_to_syslog should be cleared...
   memset(buf, 0, sizeof(buf));
-  ret = g_ceph_context->_conf->get_val("log_to_syslog", &tmp, sizeof(buf));
+  ret = g_ceph_context->_conf.get_val("log_to_syslog", &tmp, sizeof(buf));
   ASSERT_EQ(0, ret);
   ASSERT_EQ(string("false"), string(buf));
 
   // Turn on log_to_syslog
   injection = "--log-graylog-port=1 --log_to_syslog=true --leveldb-max-open-files 40";
-  ret = g_ceph_context->_conf->injectargs(injection, &cout);
+  ret = g_ceph_context->_conf.injectargs(injection, &cout);
   ASSERT_EQ(0, ret);
 
   // log_to_syslog should be set...
   memset(buf, 0, sizeof(buf));
-  ret = g_ceph_context->_conf->get_val("log_to_syslog", &tmp, sizeof(buf));
+  ret = g_ceph_context->_conf.get_val("log_to_syslog", &tmp, sizeof(buf));
   ASSERT_EQ(0, ret);
   ASSERT_EQ(string("true"), string(buf));
 
   // parse error
   injection = "--log-graylog-port 1 --log_to_syslog=falsey --leveldb-max-open-files 42";
-  ret = g_ceph_context->_conf->injectargs(injection, &cout);
+  ret = g_ceph_context->_conf.injectargs(injection, &cout);
   ASSERT_EQ(-EINVAL, ret);
 
   // log_to_syslog should still be set...
   memset(buf, 0, sizeof(buf));
-  ret = g_ceph_context->_conf->get_val("log_to_syslog", &tmp, sizeof(buf));
+  ret = g_ceph_context->_conf.get_val("log_to_syslog", &tmp, sizeof(buf));
   ASSERT_EQ(0, ret);
   ASSERT_EQ(string("true"), string(buf));
 
   // debug-ms should still become 42...
   memset(buf, 0, sizeof(buf));
-  ret = g_ceph_context->_conf->get_val("leveldb_max_open_files", &tmp, sizeof(buf));
+  ret = g_ceph_context->_conf.get_val("leveldb_max_open_files", &tmp, sizeof(buf));
   ASSERT_EQ(0, ret);
   ASSERT_EQ(string("42"), string(buf));
 }
@@ -285,14 +285,14 @@ TEST(DaemonConfig, InjectArgsLogfile) {
   std::string injection("--log_file ");
   injection += tmpfile;
   // We're allowed to change log_file because there is an observer.
-  ret = g_ceph_context->_conf->injectargs(injection, &cout);
+  ret = g_ceph_context->_conf.injectargs(injection, &cout);
   ASSERT_EQ(0, ret);
 
   // It should have taken effect.
   char buf[128];
   char *tmp = buf;
   memset(buf, 0, sizeof(buf));
-  ret = g_ceph_context->_conf->get_val("log_file", &tmp, sizeof(buf));
+  ret = g_ceph_context->_conf.get_val("log_file", &tmp, sizeof(buf));
   ASSERT_EQ(0, ret);
   ASSERT_EQ(string(buf), string(tmpfile));
 
@@ -300,10 +300,10 @@ TEST(DaemonConfig, InjectArgsLogfile) {
   ASSERT_EQ(0, access(tmpfile, R_OK));
 
   // Let's turn off the logfile.
-  ret = g_ceph_context->_conf->set_val("log_file", "");
+  ret = g_ceph_context->_conf.set_val("log_file", "");
   ASSERT_EQ(0, ret);
-  g_ceph_context->_conf->apply_changes(NULL);
-  ret = g_ceph_context->_conf->get_val("log_file", &tmp, sizeof(buf));
+  g_ceph_context->_conf.apply_changes(NULL);
+  ret = g_ceph_context->_conf.get_val("log_file", &tmp, sizeof(buf));
   ASSERT_EQ(0, ret);
   ASSERT_EQ(string(""), string(buf));
 
@@ -315,31 +315,31 @@ TEST(DaemonConfig, ThreadSafety1) {
   int ret;
   // Verify that we can't change this, since safe_to_start_threads has
   // been set.
-  ret = g_ceph_context->_conf->set_val("osd_data", "");
+  ret = g_ceph_context->_conf.set_val("osd_data", "");
   ASSERT_EQ(-ENOSYS, ret);
 
-  g_conf->_clear_safe_to_start_threads();
+  g_conf()._clear_safe_to_start_threads();
 
   // Ok, now we can change this. Since this is just a test, and there are no
   // OSD threads running, we know changing osd_data won't actually blow up the
   // world.
-  ret = g_ceph_context->_conf->set_val("osd_data", "/tmp/crazydata");
+  ret = g_ceph_context->_conf.set_val("osd_data", "/tmp/crazydata");
   ASSERT_EQ(0, ret);
 
   char buf[128];
   char *tmp = buf;
   memset(buf, 0, sizeof(buf));
-  ret = g_ceph_context->_conf->get_val("osd_data", &tmp, sizeof(buf));
+  ret = g_ceph_context->_conf.get_val("osd_data", &tmp, sizeof(buf));
   ASSERT_EQ(0, ret);
   ASSERT_EQ(string("/tmp/crazydata"), string(buf));
 
-  g_conf->_clear_safe_to_start_threads();
+  g_conf()._clear_safe_to_start_threads();
   ASSERT_EQ(0, ret);
 }
 
 TEST(DaemonConfig, InvalidIntegers) {
   {
-    int ret = g_ceph_context->_conf->set_val("log_graylog_port", "rhubarb");
+    int ret = g_ceph_context->_conf.set_val("log_graylog_port", "rhubarb");
     ASSERT_EQ(-EINVAL, ret);
   }
 
@@ -347,34 +347,35 @@ TEST(DaemonConfig, InvalidIntegers) {
     int64_t max = std::numeric_limits<int64_t>::max();
     string str = boost::lexical_cast<string>(max);
     str = str + "999"; // some extra digits to take us out of bounds
-    int ret = g_ceph_context->_conf->set_val("log_graylog_port", str);
+    int ret = g_ceph_context->_conf.set_val("log_graylog_port", str);
     ASSERT_EQ(-EINVAL, ret);
   }
 
-  g_ceph_context->_conf->rm_val("log_graylog_port");
+  g_ceph_context->_conf.rm_val("log_graylog_port");
 }
 
 TEST(DaemonConfig, InvalidFloats) {
   {
     double bad_value = 2 * (double)std::numeric_limits<float>::max();
     string str = boost::lexical_cast<string>(-bad_value);
-    int ret = g_ceph_context->_conf->set_val("log_stop_at_utilization", str);
+    int ret = g_ceph_context->_conf.set_val("log_stop_at_utilization", str);
     ASSERT_EQ(-EINVAL, ret);
   }
   {
     double bad_value = 2 * (double)std::numeric_limits<float>::max();
     string str = boost::lexical_cast<string>(bad_value);
-    int ret = g_ceph_context->_conf->set_val("log_stop_at_utilization", str);
+    int ret = g_ceph_context->_conf.set_val("log_stop_at_utilization", str);
     ASSERT_EQ(-EINVAL, ret);
   }
   {
-    int ret = g_ceph_context->_conf->set_val("log_stop_at_utilization", "not a float");
+    int ret = g_ceph_context->_conf.set_val("log_stop_at_utilization", "not a float");
     ASSERT_EQ(-EINVAL, ret);
   }
 }
 
 /*
  * Local Variables:
- * compile-command: "cd .. ; make unittest_daemon_config && ./unittest_daemon_config"
+ * compile-command: "cd ../../build ; \
+ * make unittest_daemon_config && ./bin/unittest_daemon_config"
  * End:
  */
index 19bbbdc7884c5d640dbeb49aa45bd74fe2c75e69..49bc1be67958aaef46831d74b6594ee9b3173633 100644 (file)
@@ -102,8 +102,8 @@ void do_out_buffer(string& outbl, char **outbuf, size_t *outbuflen) {
 librados::TestRadosClient *create_rados_client() {
   CephInitParameters iparams(CEPH_ENTITY_TYPE_CLIENT);
   CephContext *cct = common_preinit(iparams, CODE_ENVIRONMENT_LIBRARY, 0);
-  cct->_conf->parse_env();
-  cct->_conf->apply_changes(nullptr);
+  cct->_conf.parse_env();
+  cct->_conf.apply_changes(nullptr);
 
   auto rados_client =
     librados_test_stub::get_cluster()->create_rados_client(cct);
@@ -145,27 +145,27 @@ extern "C" int rados_conf_set(rados_t cluster, const char *option,
   librados::TestRadosClient *impl =
     reinterpret_cast<librados::TestRadosClient*>(cluster);
   CephContext *cct = impl->cct();
-  return cct->_conf->set_val(option, value);
+  return cct->_conf.set_val(option, value);
 }
 
 extern "C" int rados_conf_parse_env(rados_t cluster, const char *var) {
   librados::TestRadosClient *client =
     reinterpret_cast<librados::TestRadosClient*>(cluster);
-  md_config_t *conf = client->cct()->_conf;
-  conf->parse_env(var);
-  conf->apply_changes(NULL);
+  auto& conf = client->cct()->_conf;
+  conf.parse_env(var);
+  conf.apply_changes(NULL);
   return 0;
 }
 
 extern "C" int rados_conf_read_file(rados_t cluster, const char *path) {
   librados::TestRadosClient *client =
     reinterpret_cast<librados::TestRadosClient*>(cluster);
-  md_config_t *conf = client->cct()->_conf;
-  int ret = conf->parse_config_files(path, NULL, 0);
+  auto& conf = client->cct()->_conf;
+  int ret = conf.parse_config_files(path, NULL, 0);
   if (ret == 0) {
-    conf->parse_env();
-    conf->apply_changes(NULL);
-    conf->complain_about_parse_errors(client->cct());
+    conf.parse_env();
+    conf.apply_changes(NULL);
+    conf.complain_about_parse_errors(client->cct());
   } else if (ret == -ENOENT) {
     // ignore missing client config
     return 0;
@@ -992,7 +992,7 @@ int Rados::conf_get(const char *option, std::string &val) {
   CephContext *cct = impl->cct();
 
   char *str = NULL;
-  int ret = cct->_conf->get_val(option, &str, -1);
+  int ret = cct->_conf.get_val(option, &str, -1);
   if (ret != 0) {
     free(str);
     return ret;
index 575ddd587c3abd4f79868c3ac5cc2b386f5f6f4e..242a352f874a53decaff1d1af4a937c46a936f91 100644 (file)
@@ -164,7 +164,7 @@ TEST_F(TestJournalEntries, AioDiscard) {
   REQUIRE_FEATURE(RBD_FEATURE_JOURNALING);
 
   CephContext* cct = reinterpret_cast<CephContext*>(_rados.cct());
-  REQUIRE(!cct->_conf->get_val<bool>("rbd_skip_partial_discard"));
+  REQUIRE(!cct->_conf.get_val<bool>("rbd_skip_partial_discard"));
 
   librbd::ImageCtx *ictx;
   ASSERT_EQ(0, open_image(m_image_name, &ictx));
index a3f2630c9b1f0027b745327ebdb2ca6bd556be8d..7cda68e9c8f70fa199853a9567c9ff45d4bccc60 100644 (file)
@@ -747,7 +747,7 @@ TEST_F(TestInternal, DiscardCopyup)
   REQUIRE_FEATURE(RBD_FEATURE_LAYERING);
 
   CephContext* cct = reinterpret_cast<CephContext*>(_rados.cct());
-  REQUIRE(!cct->_conf->get_val<bool>("rbd_skip_partial_discard"));
+  REQUIRE(!cct->_conf.get_val<bool>("rbd_skip_partial_discard"));
 
   m_image_name = get_temp_image_name();
   m_image_size = 1 << 14;
index a837637ef2b3456850e9b0589af60626244ae2bf..11a3760c2424c3d71b0241bdb1ded2efe6310caf 100644 (file)
@@ -61,14 +61,14 @@ void StoreTestFixture::SetUp()
   // we keep this stuff 'unsafe' out of test case scope to be able to update ANY
   // config settings. Hence setting it to 'safe' here to proceed with the test
   // case
-  g_conf->set_safe_to_start_threads();
+  g_conf().set_safe_to_start_threads();
 }
 
 void StoreTestFixture::TearDown()
 {
   // we keep this stuff 'unsafe' out of test case scope to be able to update ANY
   // config settings. Hence setting it to 'unsafe' here as test case is closing.
-  g_conf->_clear_safe_to_start_threads();
+  g_conf()._clear_safe_to_start_threads();
   PopSettings(0);
   if (store) {
     int r = store->umount();
index f2907ecf363ca1ab9f5abe62a83cf37448503767..f2df9291ff161d91bedd4f1093c77bf377d1456e 100644 (file)
@@ -24,7 +24,7 @@ public:
                                   "0"));
 
     CephContext *cct = reinterpret_cast<CephContext *>(m_local_io_ctx.cct());
-    std::string policy_type = cct->_conf->get_val<string>("rbd_mirror_image_policy_type");
+    std::string policy_type = cct->_conf.get_val<string>("rbd_mirror_image_policy_type");
 
     if (policy_type == "none" || policy_type == "simple") {
       m_policy = image_map::SimplePolicy::create(m_local_io_ctx);
index c3ea3246b2f1be45e09cab39bc1af4c745778543..8a95a65d2370ef73f0b43691ee6184e6aa9a5799 100644 (file)
@@ -82,9 +82,9 @@ public:
   TestImageReplayer()
     : m_local_cluster(new librados::Rados()), m_watch_handle(0)
   {
-    EXPECT_EQ(0, g_ceph_context->_conf->get_val("rbd_mirror_journal_commit_age",
+    EXPECT_EQ(0, g_ceph_context->_conf.get_val("rbd_mirror_journal_commit_age",
                                                 &m_journal_commit_age));
-    EXPECT_EQ(0, g_ceph_context->_conf->set_val("rbd_mirror_journal_commit_age",
+    EXPECT_EQ(0, g_ceph_context->_conf.set_val("rbd_mirror_journal_commit_age",
                                                 "0.1"));
 
     EXPECT_EQ("", connect_cluster_pp(*m_local_cluster.get()));
@@ -144,7 +144,7 @@ public:
 
     EXPECT_EQ(0, m_remote_cluster.pool_delete(m_remote_pool_name.c_str()));
     EXPECT_EQ(0, m_local_cluster->pool_delete(m_local_pool_name.c_str()));
-    EXPECT_EQ(0, g_ceph_context->_conf->set_val("rbd_mirror_journal_commit_age",
+    EXPECT_EQ(0, g_ceph_context->_conf.set_val("rbd_mirror_journal_commit_age",
                                                 m_journal_commit_age));
   }
 
index e147e2b8ff1fcc55a27e0105ce49afedbe51162c..54b46ffabdff76afebfb478f705aefd6ddc655e4 100644 (file)
@@ -14,7 +14,7 @@
 
 #include "common/ConfUtils.h"
 #include "common/ceph_argparse.h"
-#include "common/config.h"
+#include "common/config_proxy.h"
 #include "global/global_context.h"
 #include "global/global_init.h"
 
@@ -168,7 +168,7 @@ int main(int argc, const char **argv)
   }
 
   common_init_finish(g_ceph_context);
-  EntityName ename(g_conf->name);
+  EntityName ename(g_conf()->name);
 
   // Enforce the use of gen-key or add-key when creating to avoid ending up
   // with an "empty" key (key = AAAAAAAAAAAAAAAA)
index 9f806b55517bf24d3bf8b92b01deef7310cc7353..d7d341481ce3af860033b4dffc73394ea9386379 100644 (file)
@@ -72,7 +72,7 @@ static int list_sections(const std::string &prefix,
                         const std::map<string,string>& filter_key_value)
 {
   std::vector <std::string> sections;
-  int ret = g_conf->get_all_sections(sections);
+  int ret = g_conf().get_all_sections(sections);
   if (ret)
     return 2;
   for (std::vector<std::string>::const_iterator p = sections.begin();
@@ -86,7 +86,7 @@ static int list_sections(const std::string &prefix,
     int r = 0;
     for (std::list<string>::const_iterator q = filter_key.begin(); q != filter_key.end(); ++q) {
       string v;
-      r = g_conf->get_val_from_conf_file(sec, q->c_str(), v, false);
+      r = g_conf().get_val_from_conf_file(sec, q->c_str(), v, false);
       if (r < 0)
        break;
     }
@@ -97,7 +97,7 @@ static int list_sections(const std::string &prefix,
         q != filter_key_value.end();
         ++q) {
       string v;
-      r = g_conf->get_val_from_conf_file(sec, q->first.c_str(), v, false);
+      r = g_conf().get_val_from_conf_file(sec, q->first.c_str(), v, false);
       if (r < 0 || v != q->second) {
        r = -1;
        break;
@@ -118,9 +118,9 @@ static int lookup(const std::deque<std::string> &sections,
   for (deque<string>::const_iterator s = sections.begin(); s != sections.end(); ++s) {
     my_sections.push_back(*s);
   }
-  g_conf->get_my_sections(my_sections);
+  g_conf().get_my_sections(my_sections);
   std::string val;
-  int ret = g_conf->get_val_from_conf_file(my_sections, key.c_str(), val, true);
+  int ret = g_conf().get_val_from_conf_file(my_sections, key.c_str(), val, true);
   if (ret == -ENOENT)
     return 1;
   else if (ret == 0) {
@@ -144,13 +144,13 @@ static int lookup(const std::deque<std::string> &sections,
 static int dump_all(const string& format)
 {
   if (format == "" || format == "plain") {
-    g_conf->show_config(std::cout);
+    g_conf().show_config(std::cout);
     return 0;
   } else {
     unique_ptr<Formatter> f(Formatter::create(format));
     if (f) {
       f->open_object_section("ceph-conf");
-      g_conf->show_config(f.get());
+      g_conf().show_config(f.get());
       f->close_section();
       f->flush(std::cout);
       return 0;
@@ -185,8 +185,8 @@ int main(int argc, const char **argv)
       [](CephContext *p) {p->put();}
   };
 
-  g_conf->apply_changes(NULL);
-  g_conf->complain_about_parse_errors(g_ceph_context);
+  g_conf().apply_changes(nullptr);
+  g_conf().complain_about_parse_errors(g_ceph_context);
 
   // do not common_init_finish(); do not start threads; do not do any of thing
   // wonky things the daemon whose conf we are examining would do (like initialize
index 2a2163bc390394c73f17eb05ad6fbc393e7a6e0e..3cc7906463b9c90e072e3958360448395cb2808a 100644 (file)
@@ -315,7 +315,7 @@ int main(int argc, const char **argv)
     monmap.created = ceph_clock_now();
     monmap.last_changed = monmap.created;
     srand(getpid() + time(0));
-    if (g_conf->get_val<uuid_d>("fsid").is_zero()) {
+    if (g_conf().get_val<uuid_d>("fsid").is_zero()) {
       monmap.generate_fsid();
       cout << me << ": generated fsid " << monmap.fsid << std::endl;
     }
@@ -331,7 +331,7 @@ int main(int argc, const char **argv)
   if (filter) {
     // apply initial members
     list<string> initial_members;
-    get_str_list(g_conf->mon_initial_members, initial_members);
+    get_str_list(g_conf()->mon_initial_members, initial_members);
     if (!initial_members.empty()) {
       cout << "initial_members " << initial_members << ", filtering seed monmap" << std::endl;
       set<entity_addr_t> removed;
@@ -343,8 +343,8 @@ int main(int argc, const char **argv)
     modified = true;
   }
 
-  if (!g_conf->get_val<uuid_d>("fsid").is_zero()) {
-    monmap.fsid = g_conf->get_val<uuid_d>("fsid");
+  if (!g_conf().get_val<uuid_d>("fsid").is_zero()) {
+    monmap.fsid = g_conf().get_val<uuid_d>("fsid");
     cout << me << ": set fsid to " << monmap.fsid << std::endl;
     modified = true;
   }
index 3515e28255205fbc4b0b2f039785668a2b551a41..6aedfb3467022ceb9a558f63a620c7aad9b7e713 100644 (file)
@@ -494,7 +494,7 @@ int get_image_options(const boost::program_options::variables_map &vm,
     }
 
     if (format_specified) {
-      int r = g_conf->set_val("rbd_default_format", stringify(format));
+      int r = g_conf().set_val("rbd_default_format", stringify(format));
       assert(r == 0);
       opts->set(RBD_IMAGE_OPTION_FORMAT, format);
     }
index c14965abe40fa5a1a771c788028a7b128dfe8a68..b95c544f1cfae7543f5733a9915bb6afa60c2601 100644 (file)
@@ -356,7 +356,7 @@ template <typename I>
 void ImageDeleter<I>::remove_images() {
   dout(10) << dendl;
 
-  uint64_t max_concurrent_deletions = g_ceph_context->_conf->get_val<uint64_t>(
+  uint64_t max_concurrent_deletions = g_ceph_context->_conf.get_val<uint64_t>(
     "rbd_mirror_concurrent_image_deletions");
 
   Mutex::Locker locker(m_lock);
@@ -414,7 +414,7 @@ void ImageDeleter<I>::handle_remove_image(DeleteInfoRef delete_info,
                  image_deleter::ERROR_RESULT_RETRY_IMMEDIATELY) {
       enqueue_failed_delete(&delete_info, r, m_busy_interval);
     } else {
-      double failed_interval = g_ceph_context->_conf->get_val<double>(
+      double failed_interval = g_ceph_context->_conf.get_val<double>(
         "rbd_mirror_delete_retry_interval");
       enqueue_failed_delete(&delete_info, r, failed_interval);
     }
index 3bd9fed469c9fd3a14d53c1a32154a8e03e92a96..5797fee7add1dd4347d07f505e3f2eef7a83e2d7 100644 (file)
@@ -228,7 +228,7 @@ void ImageMap<I>::schedule_update_task(const Mutex &timer_lock) {
     });
 
   CephContext *cct = reinterpret_cast<CephContext *>(m_ioctx.cct());
-  double after = cct->_conf->get_val<double>("rbd_mirror_image_policy_update_throttle_interval");
+  double after = cct->_conf.get_val<double>("rbd_mirror_image_policy_update_throttle_interval");
 
   dout(20) << "scheduling image check update (" << m_timer_task << ")"
            << " after " << after << " second(s)" << dendl;
@@ -263,7 +263,7 @@ void ImageMap<I>::schedule_rebalance_task() {
   CephContext *cct = reinterpret_cast<CephContext *>(m_ioctx.cct());
 
   // fetch the updated value of idle timeout for (re)scheduling
-  double resched_after = cct->_conf->get_val<double>(
+  double resched_after = cct->_conf.get_val<double>(
     "rbd_mirror_image_policy_rebalance_timeout");
   if (!resched_after) {
     return;
@@ -524,7 +524,7 @@ void ImageMap<I>::init(Context *on_finish) {
   dout(20) << dendl;
 
   CephContext *cct = reinterpret_cast<CephContext *>(m_ioctx.cct());
-  std::string policy_type = cct->_conf->get_val<string>("rbd_mirror_image_policy_type");
+  std::string policy_type = cct->_conf.get_val<string>("rbd_mirror_image_policy_type");
 
   if (policy_type == "none" || policy_type == "simple") {
     m_policy.reset(image_map::SimplePolicy::create(m_ioctx));
@@ -574,7 +574,7 @@ void ImageMap<I>::filter_instance_ids(
     const std::vector<std::string> &instance_ids,
     std::vector<std::string> *filtered_instance_ids, bool removal) const {
   CephContext *cct = reinterpret_cast<CephContext *>(m_ioctx.cct());
-  std::string policy_type = cct->_conf->get_val<string>("rbd_mirror_image_policy_type");
+  std::string policy_type = cct->_conf.get_val<string>("rbd_mirror_image_policy_type");
 
   if (policy_type != "none") {
     *filtered_instance_ids = instance_ids;
index 30463be88320524d6a1a7cfa838365e91257ba8a..6377540ccd9026ff2908fe5184f10be3f1c6e148 100644 (file)
@@ -654,7 +654,7 @@ void ImageReplayer<I>::handle_start_replay(int r) {
 
   {
     CephContext *cct = static_cast<CephContext *>(m_local->cct());
-    double poll_seconds = cct->_conf->get_val<double>(
+    double poll_seconds = cct->_conf.get_val<double>(
       "rbd_mirror_journal_poll_age");
 
     Mutex::Locker locker(m_lock);
index 68588c2ac8f52eacd67f1745a3394c0abf8d269c..5e6a802eb54870d37f94aa61d00bdf70ea4c7808 100644 (file)
@@ -60,7 +60,7 @@ ImageSync<I>::ImageSync(I *local_image_ctx, I *remote_image_ctx,
     m_work_queue(work_queue), m_instance_watcher(instance_watcher),
     m_progress_ctx(progress_ctx),
     m_lock(unique_lock_name("ImageSync::m_lock", this)),
-    m_update_sync_point_interval(m_local_image_ctx->cct->_conf->template get_val<double>(
+    m_update_sync_point_interval(m_local_image_ctx->cct->_conf.template get_val<double>(
         "rbd_mirror_sync_point_update_age")), m_client_meta_copy(*client_meta) {
 }
 
index 29a002cfcf7c12f412395ddac22484db91639759..cb9474394d92f0e795ee48e6c880b0ccea35bb8a 100644 (file)
@@ -31,15 +31,15 @@ template <typename I>
 ImageSyncThrottler<I>::ImageSyncThrottler()
   : m_lock(librbd::util::unique_lock_name("rbd::mirror::ImageSyncThrottler",
                                           this)),
-    m_max_concurrent_syncs(g_ceph_context->_conf->get_val<uint64_t>(
+    m_max_concurrent_syncs(g_ceph_context->_conf.get_val<uint64_t>(
       "rbd_mirror_concurrent_image_syncs")) {
   dout(20) << "max_concurrent_syncs=" << m_max_concurrent_syncs << dendl;
-  g_ceph_context->_conf->add_observer(this);
+  g_ceph_context->_conf.add_observer(this);
 }
 
 template <typename I>
 ImageSyncThrottler<I>::~ImageSyncThrottler() {
-  g_ceph_context->_conf->remove_observer(this);
+  g_ceph_context->_conf.remove_observer(this);
 
   Mutex::Locker locker(m_lock);
   assert(m_inflight_ops.empty());
index 0e21bf5f97a356d11c290abde7ec0b665cd978e7..57f70b1c59a067d778c6e0590fbf7dbe3a0ee2a7 100644 (file)
@@ -488,7 +488,7 @@ void InstanceReplayer<I>::schedule_image_state_check_task() {
       queue_start_image_replayers();
     });
 
-  int after = g_ceph_context->_conf->get_val<int64_t>(
+  int after = g_ceph_context->_conf.get_val<int64_t>(
     "rbd_mirror_image_state_check_interval");
 
   dout(10) << "scheduling image state check after " << after << " sec (task "
index cd317d73afe2f1be63d8af328603430d8791baba..2d58d6bc70073b8df6072961c4ec9a40b758a39e 100644 (file)
@@ -326,7 +326,7 @@ InstanceWatcher<I>::InstanceWatcher(librados::IoCtx &io_ctx,
     m_lock(unique_lock_name("rbd::mirror::InstanceWatcher::m_lock", this)),
     m_instance_lock(librbd::ManagedLock<I>::create(
       m_ioctx, m_work_queue, m_oid, this, librbd::managed_lock::EXCLUSIVE, true,
-      m_cct->_conf->get_val<int64_t>("rbd_blacklist_expire_seconds"))) {
+      m_cct->_conf.get_val<int64_t>("rbd_blacklist_expire_seconds"))) {
 }
 
 template <typename I>
index 17d81bfdf6ef5366db3ae6536dc3261ce360aa56..c1646f42ea0659e356519c23739f606573a16131 100644 (file)
@@ -314,9 +314,9 @@ void Instances<I>::schedule_remove_task(const utime_t& time) {
     return;
   }
 
-  int after = m_cct->_conf->get_val<int64_t>("rbd_mirror_leader_heartbeat_interval") *
-    (1 + m_cct->_conf->get_val<int64_t>("rbd_mirror_leader_max_missed_heartbeats") +
-     m_cct->_conf->get_val<int64_t>("rbd_mirror_leader_max_acquire_attempts_before_break"));
+  int after = m_cct->_conf.get_val<int64_t>("rbd_mirror_leader_heartbeat_interval") *
+    (1 + m_cct->_conf.get_val<int64_t>("rbd_mirror_leader_max_missed_heartbeats") +
+     m_cct->_conf.get_val<int64_t>("rbd_mirror_leader_max_acquire_attempts_before_break"));
 
   bool schedule = false;
   utime_t oldest_time = time;
index 20cb6a1602727ab72f6d04c814eaec0b5f55ca30..5c4287add83fdfc50f29f222ce782e6dba0c4058 100644 (file)
@@ -34,7 +34,7 @@ LeaderWatcher<I>::LeaderWatcher(Threads<I> *threads, librados::IoCtx &io_ctx,
     m_notifier_id(librados::Rados(io_ctx).get_instance_id()),
     m_instance_id(stringify(m_notifier_id)),
     m_leader_lock(new LeaderLock(m_ioctx, m_work_queue, m_oid, this, true,
-                                 m_cct->_conf->get_val<int64_t>(
+                                 m_cct->_conf.get_val<int64_t>(
                                    "rbd_blacklist_expire_seconds"))) {
 }
 
@@ -371,7 +371,7 @@ void LeaderWatcher<I>::schedule_timer_task(const std::string &name,
       m_timer_gate->timer_callback = timer_callback;
     });
 
-  int after = delay_factor * m_cct->_conf->get_val<int64_t>(
+  int after = delay_factor * m_cct->_conf.get_val<int64_t>(
     "rbd_mirror_leader_heartbeat_interval");
 
   dout(10) << "scheduling " << name << " after " << after << " sec (task "
@@ -569,7 +569,7 @@ void LeaderWatcher<I>::handle_get_locker(int r,
     }
   }
 
-  if (m_acquire_attempts >= m_cct->_conf->get_val<int64_t>(
+  if (m_acquire_attempts >= m_cct->_conf.get_val<int64_t>(
         "rbd_mirror_leader_max_acquire_attempts_before_break")) {
     dout(0) << "breaking leader lock after " << m_acquire_attempts << " "
             << "failed attempts to acquire" << dendl;
@@ -606,7 +606,7 @@ void LeaderWatcher<I>::schedule_acquire_leader_lock(uint32_t delay_factor) {
 
   schedule_timer_task("acquire leader lock",
                       delay_factor *
-                        m_cct->_conf->get_val<int64_t>("rbd_mirror_leader_max_missed_heartbeats"),
+                        m_cct->_conf.get_val<int64_t>("rbd_mirror_leader_max_missed_heartbeats"),
                       false, &LeaderWatcher<I>::acquire_leader_lock, false);
 }
 
index bc8de0103e84970cd00e0305b97348a5c07b0eec..404f99bf1bc40e733d08589590baa33a089b1b2b 100644 (file)
@@ -260,7 +260,7 @@ void Mirror::run()
     }
     m_cond.WaitInterval(
       m_lock,
-      utime_t(m_cct->_conf->get_val<int64_t>("rbd_mirror_pool_replayers_refresh_interval"), 0));
+      utime_t(m_cct->_conf.get_val<int64_t>("rbd_mirror_pool_replayers_refresh_interval"), 0));
   }
 
   // stop all pool replayers in parallel
index b5ba388230afe70c96b6cee4a84c68b31a9dbf6c..3f25b5f659c7fe7ef25b9c71e9b02a93de13e751 100644 (file)
@@ -420,7 +420,7 @@ int PoolReplayer<I>::init_rados(const std::string &cluster_name,
   cct->_conf->cluster = cluster_name;
 
   // librados::Rados::conf_read_file
-  int r = cct->_conf->parse_config_files(nullptr, nullptr, 0);
+  int r = cct->_conf.parse_config_files(nullptr, nullptr, 0);
   if (r < 0) {
     derr << "could not read ceph conf for " << description << ": "
         << cpp_strerror(r) << dendl;
@@ -435,27 +435,27 @@ int PoolReplayer<I>::init_rados(const std::string &cluster_name,
     // remote peer connections shouldn't apply cluster-specific
     // configuration settings
     for (auto& key : UNIQUE_PEER_CONFIG_KEYS) {
-      config_values[key] = cct->_conf->get_val<std::string>(key);
+      config_values[key] = cct->_conf.get_val<std::string>(key);
     }
   }
 
-  cct->_conf->parse_env();
+  cct->_conf.parse_env();
 
   // librados::Rados::conf_parse_env
   std::vector<const char*> args;
-  r = cct->_conf->parse_argv(args);
+  r = cct->_conf.parse_argv(args);
   if (r < 0) {
     derr << "could not parse environment for " << description << ":"
          << cpp_strerror(r) << dendl;
     cct->put();
     return r;
   }
-  cct->_conf->parse_env();
+  cct->_conf.parse_env();
 
   if (!m_args.empty()) {
     // librados::Rados::conf_parse_argv
     args = m_args;
-    r = cct->_conf->parse_argv(args);
+    r = cct->_conf.parse_argv(args);
     if (r < 0) {
       derr << "could not parse command line args for " << description << ": "
           << cpp_strerror(r) << dendl;
@@ -468,25 +468,25 @@ int PoolReplayer<I>::init_rados(const std::string &cluster_name,
     // remote peer connections shouldn't apply cluster-specific
     // configuration settings
     for (auto& pair : config_values) {
-      auto value = cct->_conf->get_val<std::string>(pair.first);
+      auto value = cct->_conf.get_val<std::string>(pair.first);
       if (pair.second != value) {
         dout(0) << "reverting global config option override: "
                 << pair.first << ": " << value << " -> " << pair.second
                 << dendl;
-        cct->_conf->set_val_or_die(pair.first, pair.second);
+        cct->_conf.set_val_or_die(pair.first, pair.second);
       }
     }
   }
 
   if (!g_ceph_context->_conf->admin_socket.empty()) {
-    cct->_conf->set_val_or_die("admin_socket",
+    cct->_conf.set_val_or_die("admin_socket",
                                "$run_dir/$name.$pid.$cluster.$cctid.asok");
   }
 
   // disable unnecessary librbd cache
-  cct->_conf->set_val_or_die("rbd_cache", "false");
-  cct->_conf->apply_changes(nullptr);
-  cct->_conf->complain_about_parse_errors(cct);
+  cct->_conf.set_val_or_die("rbd_cache", "false");
+  cct->_conf.apply_changes(nullptr);
+  cct->_conf.complain_about_parse_errors(cct);
 
   r = (*rados_ref)->init_with_context(cct);
   assert(r == 0);
@@ -575,10 +575,10 @@ void PoolReplayer<I>::print_status(Formatter *f, stringstream *ss)
   }
 
   f->dump_string("local_cluster_admin_socket",
-                 reinterpret_cast<CephContext *>(m_local_io_ctx.cct())->_conf->
+                 reinterpret_cast<CephContext *>(m_local_io_ctx.cct())->_conf.
                      get_val<std::string>("admin_socket"));
   f->dump_string("remote_cluster_admin_socket",
-                 reinterpret_cast<CephContext *>(m_remote_io_ctx.cct())->_conf->
+                 reinterpret_cast<CephContext *>(m_remote_io_ctx.cct())->_conf.
                      get_val<std::string>("admin_socket"));
 
   f->open_object_section("sync_throttler");
index 45a6fddd6fdd568140910fbfd01ba45f9d19a7d0..ffd402684f7dfc9b4749519b4357bc3b98578f57 100644 (file)
@@ -12,12 +12,12 @@ namespace mirror {
 template <typename I>
 Threads<I>::Threads(CephContext *cct) : timer_lock("Threads::timer_lock") {
   thread_pool = new ThreadPool(cct, "Journaler::thread_pool", "tp_journal",
-                               cct->_conf->get_val<int64_t>("rbd_op_threads"),
+                               cct->_conf.get_val<int64_t>("rbd_op_threads"),
                                "rbd_op_threads");
   thread_pool->start();
 
   work_queue = new ContextWQ("Journaler::work_queue",
-                             cct->_conf->get_val<int64_t>("rbd_op_thread_timeout"),
+                             cct->_conf.get_val<int64_t>("rbd_op_thread_timeout"),
                              thread_pool);
 
   timer = new SafeTimer(cct, timer_lock, true);
index 30899c5beaa52499b7a28474d44de2c450bd2055..0fefa6e3fa619b0fa92126deb1fe3099677fa987 100644 (file)
@@ -356,7 +356,7 @@ bool Policy::can_shuffle_image(const std::string &global_image_id) {
   assert(m_map_lock.is_locked());
 
   CephContext *cct = reinterpret_cast<CephContext *>(m_ioctx.cct());
-  int migration_throttle = cct->_conf->get_val<int64_t>(
+  int migration_throttle = cct->_conf.get_val<int64_t>(
     "rbd_mirror_image_policy_migration_throttle");
 
   auto it = m_image_states.find(global_image_id);
index adc3ff4335606701c123bb2626ffd94ae1fc1bb8..11831c193368c441b2c3afb4c869cd2c3285c994 100644 (file)
@@ -451,7 +451,7 @@ void CreateImageRequest<I>::populate_image_options(
   // 3. Don't set the data pool explicitly.
   std::string data_pool;
   librados::Rados local_rados(m_local_io_ctx);
-  auto default_data_pool = g_ceph_context->_conf->get_val<std::string>("rbd_default_data_pool");
+  auto default_data_pool = g_ceph_context->_conf.get_val<std::string>("rbd_default_data_pool");
   auto remote_md_pool = m_remote_image_ctx->md_ctx.get_pool_name();
   auto remote_data_pool = m_remote_image_ctx->data_ctx.get_pool_name();
 
index ceb2c8e34a7ad855d7f1f9d9557e0927f82b193a..b47b13f1bbca503fa5eeddf8fe7e9f0a79c5e2b9 100644 (file)
@@ -106,9 +106,9 @@ void PrepareRemoteImageRequest<I>::get_client() {
   dout(20) << dendl;
 
   journal::Settings settings;
-  settings.commit_interval = g_ceph_context->_conf->get_val<double>(
+  settings.commit_interval = g_ceph_context->_conf.get_val<double>(
     "rbd_mirror_journal_commit_age");
-  settings.max_fetch_bytes = g_ceph_context->_conf->get_val<Option::size_t>(
+  settings.max_fetch_bytes = g_ceph_context->_conf.get_val<Option::size_t>(
     "rbd_mirror_journal_max_fetch_bytes");
 
   assert(*m_remote_journaler == nullptr);
index d5458404ed412ead4a0eb47cbd640f60be847555..97a46f3caf7a0e507d88544e8bc3aaba820b2e2a 100644 (file)
@@ -1026,9 +1026,9 @@ static int parse_args(vector<const char*>& args, std::ostream *err_msg,
   CephInitParameters iparams = ceph_argparse_early_args(
           args, CEPH_ENTITY_TYPE_CLIENT, &cluster, &conf_file_list);
 
-  md_config_t config;
-  config.name = iparams.name;
-  config.cluster = cluster;
+  ConfigProxy config{false};
+  config->name = iparams.name;
+  config->cluster = cluster;
 
   if (!conf_file_list.empty()) {
     config.parse_config_files(conf_file_list.c_str(), nullptr, 0);