From: Leonid Chernin Date: Sun, 10 Aug 2025 15:53:32 +0000 (+0300) Subject: blocklist issue fix X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=82a898c88f5a37453c9434c56a0af78a0298a703;p=ceph-ci.git blocklist issue fix --- diff --git a/src/mon/NVMeofGwMap.cc b/src/mon/NVMeofGwMap.cc index 15f1fa284f5..84e00d5840f 100755 --- a/src/mon/NVMeofGwMap.cc +++ b/src/mon/NVMeofGwMap.cc @@ -390,7 +390,7 @@ int NVMeofGwMap::process_gw_map_gw_down( auto& st = gw_state->second; st.set_unavailable_state(); st.set_last_gw_down_ts(); - st.subsystems.clear(); + //st.subsystems.clear();// we need them for recreate nonce vector for blocklist st.reset_beacon_sequence(); for (auto& state_itr: created_gws[group_key][gw_id].sm_state) { fsm_handle_gw_down( @@ -1047,14 +1047,23 @@ int NVMeofGwMap::blocklist_gw( // find_already_created_gw(gw_id, group_key); NvmeGwMonState& gw_map = created_gws[group_key][gw_id]; NvmeNonceVector nonces; + + NvmeAnaNonceMap nonce_map; + for (const auto& sub: gw_map.subsystems) { // recreate nonce map from subsystems + for (const auto& ns: sub.namespaces) { + auto& nonce_vec = nonce_map[ns.anagrpid-1];//Converting ana groups to offsets + if (std::find(nonce_vec.begin(), nonce_vec.end(), ns.nonce) == nonce_vec.end()) + nonce_vec.push_back(ns.nonce); + } + } for (auto& state_itr: gw_map.sm_state) { // to make blocklist on all clusters of the failing GW - nonces.insert(nonces.end(), gw_map.nonce_map[state_itr.first].begin(), - gw_map.nonce_map[state_itr.first].end()); + nonces.insert(nonces.end(), nonce_map[state_itr.first].begin(), + nonce_map[state_itr.first].end()); } - + gw_map.subsystems.clear(); if (nonces.size() > 0) { - NvmeNonceVector &nonce_vector = gw_map.nonce_map[grpid];; + NvmeNonceVector &nonce_vector = nonces;//nonce_map[grpid];; std::string str = "["; entity_addrvec_t addr_vect; diff --git a/src/mon/NVMeofGwMon.cc b/src/mon/NVMeofGwMon.cc index be5191825cc..c4751445160 100644 --- a/src/mon/NVMeofGwMon.cc +++ b/src/mon/NVMeofGwMon.cc @@ -876,9 +876,6 @@ bool NVMeofGwMon::prepare_beacon(MonOpRequestRef op) } if (apply_beacon(gw_id, group_key, sub, avail, propose) !=0) { // Changed subsystems nonce_propose = true; - if (m->get_nonce_map().size()) { - pending_map.created_gws[group_key][gw_id].nonce_map = m->get_nonce_map(); - } dout(10) << "subsystem(subs/listener/nonce/NM) of GW changed, propose pending " << gw_id << " available " << avail << dendl; dout(20) << "subsystems of GW " << gw_id << " "