From e9ecd1b38447f8bdf5e8cfa86e7fdf8b6a5de7ce Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Sun, 22 Apr 2012 14:23:52 -0700 Subject: [PATCH] perfcounters: tolerate multiple loggers with the same name Make them unique by appending -, so that the json we dump will remain valid. We may also want to allow people to share counters of the same type. Signed-off-by: Sage Weil --- src/common/perf_counters.cc | 13 +++++++++++-- src/common/perf_counters.h | 5 ++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/common/perf_counters.cc b/src/common/perf_counters.cc index 9936524a0c522..6e41d7238056c 100644 --- a/src/common/perf_counters.cc +++ b/src/common/perf_counters.cc @@ -40,8 +40,17 @@ PerfCountersCollection::~PerfCountersCollection() void PerfCountersCollection::add(class PerfCounters *l) { Mutex::Locker lck(m_lock); - perf_counters_set_t::iterator i = m_loggers.find(l); - assert(i == m_loggers.end()); + + // make sure the name is unique + perf_counters_set_t::iterator i; + i = m_loggers.find(l); + while (i != m_loggers.end()) { + ostringstream ss; + ss << l->get_name() << "-" << (void*)l; + l->set_name(ss.str()); + i = m_loggers.find(l); + } + m_loggers.insert(l); } diff --git a/src/common/perf_counters.h b/src/common/perf_counters.h index 43a74f7fe1de6..31bfce3456e34 100644 --- a/src/common/perf_counters.h +++ b/src/common/perf_counters.h @@ -76,6 +76,9 @@ public: void write_json_to_buf(std::vector &buffer, bool schema); const std::string& get_name() const; + void set_name(std::string s) { + m_name = s; + } private: PerfCounters(CephContext *cct, const std::string &name, @@ -102,7 +105,7 @@ private: CephContext *m_cct; int m_lower_bound; int m_upper_bound; - const std::string m_name; + std::string m_name; const std::string m_lock_name; /** Protects m_data */ -- 2.39.5