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(
// 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;
}
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 << " "