]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
conf: reopen proflogger on conf change
authorColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Wed, 20 Apr 2011 00:51:33 +0000 (17:51 -0700)
committerColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Wed, 20 Apr 2011 00:59:31 +0000 (17:59 -0700)
Signed-off-by: Colin McCabe <colin.mccabe@dreamhost.com>
src/common/ProfLogger.cc
src/common/ProfLogger.h
src/common/config.cc
src/common/config.h

index fe4f8148225bfc6f335e9e63f960e5ded5ba9059..5cd134085064f43b8ea850998c05fb599a4383b4 100644 (file)
@@ -60,6 +60,27 @@ public:
   }
 };
 
+ProfLoggerConfObs::~ProfLoggerConfObs()
+{
+}
+
+const char **ProfLoggerConfObs::get_tracked_conf_keys() const
+{
+  static const char *KEYS[] = {
+    "profiling_logger", "profiling_logger_interval", "profiling_logger_calc_variance",
+    "profiling_logger_subdir", "profiling_logger_dir"
+  };
+  return KEYS;
+}
+
+void ProfLoggerConfObs::handle_conf_change(const md_config_t *conf,
+                         const std::set <std::string> &changed)
+{
+  // This could be done a *lot* smarter, if anyone cares to spend time
+  // fixing this up.
+  // We could probably just take the mutex and call _open_log from here.
+  logger_reopen_all();
+}
 
 void logger_reopen_all()
 {
index 21f27a1b10dbbf5a148210988c2d726a46c7db39..bcbbc5986ff923e95497ea0779b22ece4763442c 100644 (file)
@@ -16,6 +16,7 @@
 #ifndef CEPH_LOGGER_H
 #define CEPH_LOGGER_H
 
+#include "common/config.h"
 #include "common/Clock.h"
 #include "common/ProfLogType.h"
 #include "include/types.h"
@@ -31,6 +32,14 @@ extern void logger_remove(class ProfLogger *l);
 extern void logger_tare(utime_t when);
 extern void logger_start();
 
+class ProfLoggerConfObs : public md_config_obs_t {
+public:
+  ~ProfLoggerConfObs();
+  virtual const char** get_tracked_conf_keys() const;
+  virtual void handle_conf_change(const md_config_t *conf,
+                         const std::set <std::string> &changed);
+};
+
 class ProfLogger {
  protected:
   // my type
index f86288cf6fa2fd1349b38a54c6a1aec74484639e..b56c6bb8ea78845867472c9cc97ebb7af2111b6f 100644 (file)
@@ -441,7 +441,8 @@ bool ceph_resolve_file_search(const std::string& filename_list,
 md_config_t::
 md_config_t()
   : _doss(new DoutStreambuf <char, std::basic_string<char>::traits_type>()),
-    _dout(_doss)
+    _dout(_doss),
+    _prof_logger_conf_obs(new ProfLoggerConfObs())
 {
   //
   // Note: because our md_config_t structure is a global, the memory used to
@@ -457,11 +458,16 @@ md_config_t()
   }
 
   add_observer(_doss);
+  add_observer(_prof_logger_conf_obs);
 }
 
 md_config_t::
 ~md_config_t()
 {
+  free(_doss);
+  _doss = NULL;
+  free(_prof_logger_conf_obs);
+  _prof_logger_conf_obs = NULL;
 }
 
 void md_config_t::
index 9ed8e3835da7f032c902b88aa61a76fc58259ba4..1db92279322c5fd18f5c807ed42c5011b3b6939d 100644 (file)
@@ -496,6 +496,7 @@ public:
 
   DoutStreambuf <char, std::basic_string<char>::traits_type> *_doss;
   std::ostream _dout;
+  md_config_obs_t *_prof_logger_conf_obs;
 };
 
 extern md_config_t g_conf;