]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
common: add missing locks in config_proxy methods
authorPatrick Donnelly <pdonnell@redhat.com>
Thu, 21 Sep 2023 02:00:03 +0000 (22:00 -0400)
committerPatrick Donnelly <pdonnell@redhat.com>
Mon, 6 Nov 2023 20:28:43 +0000 (15:28 -0500)
It's not generally safe to access the md_config_t without these locks. Some
methods are probably harmless (accessing read-only state) but best to be
consistent.

Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
(cherry picked from commit 7b5076bafeb8981cd809437ee04fc570857a05f4)

src/common/config_proxy.h

index 02c670f602775bac389e39a1d2125ebca47fbbcf..400aa4ed052d6046efb95c447d771fb93acd45fa 100644 (file)
@@ -150,12 +150,15 @@ public:
                                       std::forward<Args>(args)...);
   }
   void config_options(ceph::Formatter *f) const {
+    std::lock_guard l{lock};
     config.config_options(f);
   }
   const decltype(md_config_t::schema)& get_schema() const {
+    std::lock_guard l{lock};
     return config.schema;
   }
   const Option* get_schema(const std::string_view key) const {
+    std::lock_guard l{lock};
     auto found = config.schema.find(key);
     if (found == config.schema.end()) {
       return nullptr;
@@ -164,6 +167,7 @@ public:
     }
   }
   const Option *find_option(const std::string& name) const {
+    std::lock_guard l{lock};
     return config.find_option(name);
   }
   void diff(ceph::Formatter *f, const std::string& name = {}) const {
@@ -186,6 +190,7 @@ public:
                                         sections, key, out, emeta);
   }
   unsigned get_osd_pool_default_min_size(uint8_t size) const {
+    std::lock_guard l{lock};
     return config.get_osd_pool_default_min_size(values, size);
   }
   void early_expand_meta(std::string &val,
@@ -225,9 +230,11 @@ public:
     call_observers(locker, rev_obs);
   }
   void set_safe_to_start_threads() {
+    std::lock_guard l(lock);
     config.set_safe_to_start_threads();
   }
   void _clear_safe_to_start_threads() {
+    std::lock_guard l(lock);
     config._clear_safe_to_start_threads();
   }
   void show_config(std::ostream& out) {
@@ -319,12 +326,15 @@ public:
                                     conf_files, warnings, flags);
   }
   bool has_parse_error() const {
+    std::lock_guard l(lock);
     return !config.parse_error.empty();
   }
   std::string get_parse_error() {
+    std::lock_guard l(lock);
     return config.parse_error;
   }
   void complain_about_parse_error(CephContext *cct) {
+    std::lock_guard l(lock);
     return config.complain_about_parse_error(cct);
   }
   void do_argv_commands() const {
@@ -342,9 +352,11 @@ public:
     config.get_defaults_bl(values, bl);
   }
   const std::string& get_conf_path() const {
+    std::lock_guard l(lock);
     return config.get_conf_path();
   }
   std::optional<std::string> get_val_default(std::string_view key) {
+    std::lock_guard l(lock);
     return config.get_val_default(key);
   }
 };