From 66ca80e7d7db9c47fcfe2f56bb86c008aad2dc9a Mon Sep 17 00:00:00 2001 From: Leonid Chernin Date: Tue, 29 Oct 2024 11:30:15 +0000 Subject: [PATCH] mon/nvmeofgw*: fix no-listeners FSM, fix detection of no-listeners condition Signed-off-by: Leonid Chernin --- src/mon/NVMeofGwMap.cc | 22 ++++++++++++++++++---- src/mon/NVMeofGwMon.cc | 8 +++++--- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/mon/NVMeofGwMap.cc b/src/mon/NVMeofGwMap.cc index c01ea9e710321..9fda03b49054e 100755 --- a/src/mon/NVMeofGwMap.cc +++ b/src/mon/NVMeofGwMap.cc @@ -665,6 +665,8 @@ void NVMeofGwMap::fsm_handle_gw_no_subsystems( break; case gw_states_per_group_t::GW_WAIT_FAILBACK_PREPARED: + { + auto& gw_id_st = created_gws[group_key][gw_id]; cancel_timer(gw_id, group_key, grpid); map_modified = true; for (auto& gw_st: created_gws[group_key]) { @@ -673,13 +675,18 @@ void NVMeofGwMap::fsm_handle_gw_no_subsystems( if (st.sm_state[grpid] == gw_states_per_group_t::GW_OWNER_WAIT_FAILBACK_PREPARED) { dout(4) << "Warning: Outgoing Failback when GW is without subsystems" - << " - to rollback it" <<" GW " << gw_id << "for ANA Group " + <<" Owner GW set to standby state " << gw_st.first << "for ANA Group " << grpid << dendl; st.standby_state(grpid); break; } } - break; + dout(4) << "Warning: Outgoing Failback when GW is without subsystems" + <<" Failback GW set to standby state " << gw_id << "for ANA Group " + << grpid << dendl; + gw_id_st.standby_state(grpid); + } + break; case gw_states_per_group_t::GW_OWNER_WAIT_FAILBACK_PREPARED: case gw_states_per_group_t::GW_ACTIVE_STATE: @@ -716,6 +723,8 @@ void NVMeofGwMap::fsm_handle_gw_down( break; case gw_states_per_group_t::GW_WAIT_FAILBACK_PREPARED: + { + auto& gw_id_st = created_gws[group_key][gw_id]; cancel_timer(gw_id, group_key, grpid); map_modified = true; for (auto& gw_st: created_gws[group_key]) { @@ -724,13 +733,18 @@ void NVMeofGwMap::fsm_handle_gw_down( if (st.sm_state[grpid] == gw_states_per_group_t::GW_OWNER_WAIT_FAILBACK_PREPARED) { dout(4) << "Warning: Outgoing Failback when GW is down back" - << " - to rollback it" <<" GW " << gw_id << "for ANA Group " + <<"Owner GW set to standby state " << gw_id << "for ANA Group " << grpid << dendl; st.standby_state(grpid); break; } } - break; + dout(4) << "Warning: Outgoing Failback when GW is down back" + <<" Failback GW set to standby state " << gw_id << "for ANA Group " + << grpid << dendl; + gw_id_st.standby_state(grpid); + } + break; case gw_states_per_group_t::GW_OWNER_WAIT_FAILBACK_PREPARED: // nothing to do - let failback timer expire diff --git a/src/mon/NVMeofGwMon.cc b/src/mon/NVMeofGwMon.cc index d9e936e27df34..4d2b5074b4d50 100644 --- a/src/mon/NVMeofGwMon.cc +++ b/src/mon/NVMeofGwMon.cc @@ -607,11 +607,13 @@ bool NVMeofGwMon::prepare_beacon(MonOpRequestRef op) if (sub.size() == 0) { avail = gw_availability_t::GW_CREATED; + dout(20) << "No-subsystems condition detected for GW " << gw_id <