]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/crimson/common/config_proxy.h
import 15.2.0 Octopus source
[ceph.git] / ceph / src / crimson / common / config_proxy.h
index 46690009cb64f25f040bfaac2f54b91826713594..d6132455eced5d3f04545cebf8ea5115e5f647ef 100644 (file)
@@ -1,4 +1,5 @@
 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
 
 #pragma once
 
@@ -9,7 +10,11 @@
 #include "common/config_obs_mgr.h"
 #include "common/errno.h"
 
-namespace ceph::common {
+namespace ceph {
+class Formatter;
+}
+
+namespace crimson::common {
 
 // a facade for managing config. each shard has its own copy of ConfigProxy.
 //
@@ -67,10 +72,9 @@ class ConfigProxy : public seastar::peering_sharded_service<ConfigProxy>
 
             ObserverMgr<ConfigObserver>::rev_obs_map rev_obs;
             proxy.obs_mgr.for_each_change(proxy.values->changed, proxy,
-                                          [&rev_obs](md_config_obs_t *obs,
-                                                     const std::string &key) {
-                                            rev_obs[obs].insert(key);
-                                          }, nullptr);
+              [&rev_obs](ConfigObserver *obs, const std::string& key) {
+                rev_obs[obs].insert(key);
+              }, nullptr);
             for (auto& obs_keys : rev_obs) {
               obs_keys.first->handle_conf_change(proxy, obs_keys.second);
             }
@@ -85,6 +89,9 @@ public:
   const ConfigValues* operator->() const noexcept {
     return values.get();
   }
+  const ConfigValues get_config_values() {
+     return *values.get();
+  }
   ConfigValues* operator->() noexcept {
     return values.get();
   }
@@ -141,12 +148,29 @@ public:
     return get_config().get_osd_pool_default_min_size(*values, size);
   }
 
-  seastar::future<> set_mon_vals(const std::map<std::string,std::string>& kv) {
+  seastar::future<>
+  set_mon_vals(const std::map<std::string,std::string,std::less<>>& kv) {
     return do_change([kv, this](ConfigValues& values) {
       get_config().set_mon_vals(nullptr, values, obs_mgr, kv, nullptr);
     });
   }
 
+  void show_config(ceph::Formatter* f) const;
+
+  seastar::future<> parse_argv(std::vector<const char*>& argv) {
+    // we could pass whatever is unparsed to seastar, but seastar::app_template
+    // is used for driving the seastar application, and
+    // crimson::common::ConfigProxy is not available until seastar engine is up
+    // and running, so we have to feed the command line args to app_template
+    // first, then pass them to ConfigProxy.
+    return do_change([&argv, this](ConfigValues& values) {
+      get_config().parse_argv(values,
+                             obs_mgr,
+                             argv,
+                             CONF_CMDLINE);
+    });
+  }
+
   seastar::future<> parse_config_files(const std::string& conf_files) {
     return do_change([this, conf_files](ConfigValues& values) {
       const char* conf_file_paths =