From 5c4ba9f3a05d925d13dc5ff2be7f8f0f61308cd6 Mon Sep 17 00:00:00 2001 From: Leonid Chernin Date: Tue, 24 Jun 2025 16:00:49 +0300 Subject: [PATCH] nvmeofgw: fixing GW delete issues 1.fixing the issue when gw is deleted based on invalid subsystem info 2. in function track_deleting_gws: break from loop only if delete was really done 3. fix published rebalance index - publish ana-group instead of index 4. do not dump gw-id string after gw was removed Fixes: https://tracker.ceph.com/issues/71896 Signed-off-by: Leonid Chernin (cherry picked from commit 77a11a7206748fa4be383da9f00a5df50e437e4a) --- src/mon/NVMeofGwMap.cc | 12 ++++++++---- src/mon/NVMeofGwMon.cc | 6 ++++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/mon/NVMeofGwMap.cc b/src/mon/NVMeofGwMap.cc index 71d3449aaebcf..4b3fb2c676bb8 100755 --- a/src/mon/NVMeofGwMap.cc +++ b/src/mon/NVMeofGwMap.cc @@ -321,15 +321,19 @@ void NVMeofGwMap::track_deleting_gws(const NvmeGroupKey& group_key, propose_pending = false; for (auto& itr: created_gws[group_key]) { auto &gw_id = itr.first; - if (itr.second.availability == gw_availability_t::GW_DELETING) { + if (subs.size() && + itr.second.availability == gw_availability_t::GW_DELETING) { int num_ns = 0; + dout(4) << " to delete ? " << gw_id + << " subsystems size "<< subs.size() << dendl; if ( (num_ns = get_num_namespaces(gw_id, group_key, subs)) == 0) { do_delete_gw(gw_id, group_key); propose_pending = true; } - dout(4) << " to delete ? " << gw_id << " num_ns " << num_ns - << " subsystems size "<< subs.size() << dendl; - break; // handle just one GW in "Deleting" state in time. + dout(4) << " num_ns " << num_ns << dendl; + if (propose_pending) { + break; // handle just one GW in "Deleting" state in time. + } } } } diff --git a/src/mon/NVMeofGwMon.cc b/src/mon/NVMeofGwMon.cc index dcf154674f99d..3a18c4195c0b8 100644 --- a/src/mon/NVMeofGwMon.cc +++ b/src/mon/NVMeofGwMon.cc @@ -426,8 +426,10 @@ bool NVMeofGwMon::preprocess_command(MonOpRequestRef op) if (map.created_gws[group_key].size()) { time_t seconds_since_1970 = time(NULL); uint32_t index = ((seconds_since_1970/60) % - map.created_gws[group_key].size()) + 1; - f->dump_unsigned("rebalance_ana_group", index); + map.created_gws[group_key].size()); + auto it = map.created_gws[group_key].begin(); + std::advance(it, index); + f->dump_unsigned("rebalance_ana_group", it->second.ana_grp_id + 1); } } f->dump_unsigned("num gws", map.created_gws[group_key].size()); -- 2.39.5