From 16b4a8929411914972a32ab2586bcbcb0327ec45 Mon Sep 17 00:00:00 2001 From: zhangjianwei2 Date: Fri, 19 Jul 2024 09:00:01 +0800 Subject: [PATCH] osd/scheduler: fix unittest_mclock_scheduler failed when unittest_mclock_scheduler, dead loop in PerfCountersCollectionImpl::add() Fixes: https://tracker.ceph.com/issues/66758 Signed-off-by: zhangjianwei2 --- src/osd/scheduler/mClockScheduler.cc | 3 +++ src/osd/scheduler/mClockScheduler.h | 2 +- src/test/osd/TestMClockScheduler.cc | 9 +-------- 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/osd/scheduler/mClockScheduler.cc b/src/osd/scheduler/mClockScheduler.cc index 7efa46dacf226..a79c8e10758d5 100644 --- a/src/osd/scheduler/mClockScheduler.cc +++ b/src/osd/scheduler/mClockScheduler.cc @@ -129,6 +129,7 @@ mClockScheduler::mClockScheduler(CephContext *cct, is_rotational(is_rotational), cutoff_priority(cutoff_priority), monc(monc), + logger(nullptr), scheduler( std::bind(&mClockScheduler::ClientRegistry::get_info, &client_registry, @@ -142,6 +143,7 @@ mClockScheduler::mClockScheduler(CephContext *cct, set_config_defaults_from_profile(); client_registry.update_from_config( cct->_conf, osd_bandwidth_capacity_per_shard); + if (init_perfcounter) { _init_logger(); } @@ -697,6 +699,7 @@ mClockScheduler::~mClockScheduler() { cct->_conf.remove_observer(this); if (logger) { + cct->get_perfcounters_collection()->remove(logger); delete logger; logger = nullptr; } diff --git a/src/osd/scheduler/mClockScheduler.h b/src/osd/scheduler/mClockScheduler.h index 839ae35bdfb88..bae80202f8a91 100644 --- a/src/osd/scheduler/mClockScheduler.h +++ b/src/osd/scheduler/mClockScheduler.h @@ -108,7 +108,7 @@ class mClockScheduler : public OpScheduler, md_config_obs_t { const bool is_rotational; const unsigned cutoff_priority; MonClient *monc; - PerfCounters *logger = nullptr; + PerfCounters *logger; /** * osd_bandwidth_cost_per_io diff --git a/src/test/osd/TestMClockScheduler.cc b/src/test/osd/TestMClockScheduler.cc index 1499493159bb1..898817bb4c26e 100644 --- a/src/test/osd/TestMClockScheduler.cc +++ b/src/test/osd/TestMClockScheduler.cc @@ -33,13 +33,6 @@ public: bool is_rotational; unsigned cutoff_priority; MonClient *monc; - /* - * FIXME: - * init_perfcounter = false - * src/common: dead loop in PerfCountersCollectionImpl::add() - * when adding the same logger_ptr to logger_collection. - * see https://tracker.ceph.com/issues/66758. - */ bool init_perfcounter; mClockScheduler q; @@ -54,7 +47,7 @@ public: is_rotational(false), cutoff_priority(12), monc(nullptr), - init_perfcounter(false), + init_perfcounter(true), q(g_ceph_context, whoami, num_shards, shard_id, is_rotational, cutoff_priority, monc, init_perfcounter), client1(1001), -- 2.39.5