From 8e32fff1734c9594c95474359c765baa6a7b3631 Mon Sep 17 00:00:00 2001 From: Leonid Chernin Date: Fri, 10 Apr 2026 11:15:20 +0300 Subject: [PATCH] nvmeofgw:fix forcing unavailable gw exit by sending empty map to it Signed-off-by: Leonid Chernin --- src/mon/NVMeofGwMap.cc | 9 +++++---- src/mon/NVMeofGwMon.cc | 11 +++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/mon/NVMeofGwMap.cc b/src/mon/NVMeofGwMap.cc index 6cf45bcd7bf..e7eb42c91b4 100644 --- a/src/mon/NVMeofGwMap.cc +++ b/src/mon/NVMeofGwMap.cc @@ -43,10 +43,11 @@ void NVMeofGwMap::to_gmap( const auto& gw_id = gw_created_pair.first; const auto& gw_created = gw_created_pair.second; gw_availability_t availability = gw_created.availability; - if (gw_created.availability == gw_availability_t::GW_DELETING) { - dout (4) << gw_id << "Send empty unicast map in Deleting state" - << dendl; - continue; + if (gw_created.availability == gw_availability_t::GW_DELETING || + gw_created.availability == gw_availability_t::GW_UNAVAILABLE) { + dout (4) << "GW " << gw_id << " Send empty unicast map in state " + << gw_created.availability << dendl; + continue; } auto gw_state = NvmeGwClientState( diff --git a/src/mon/NVMeofGwMon.cc b/src/mon/NVMeofGwMon.cc index fe8bf32318b..8635da1c5e7 100644 --- a/src/mon/NVMeofGwMon.cc +++ b/src/mon/NVMeofGwMon.cc @@ -1116,6 +1116,11 @@ bool NVMeofGwMon::prepare_beacon(MonOpRequestRef op) << " GW state in monitor data-base : " << pending_map.created_gws[group_key][gw_id].availability << dendl; + if (pending_map.created_gws[group_key][gw_id].availability == + gw_availability_t::GW_UNAVAILABLE) { + pending_map.created_gws[group_key][gw_id].availability = + gw_availability_t::GW_CREATED; // prevent sending empty map to this GW after restart + } if (pending_map.created_gws[group_key][gw_id].availability == gw_availability_t::GW_AVAILABLE) { dout(1) << " Warning :GW marked as Available in the NVmeofGwMon " @@ -1150,11 +1155,9 @@ bool NVMeofGwMon::prepare_beacon(MonOpRequestRef op) false) && (avail == gw_availability_t::GW_AVAILABLE || avail == gw_availability_t::GW_UNAVAILABLE )) { - ack_map.created_gws[group_key][gw_id] = - pending_map.created_gws[group_key][gw_id]; ack_map.epoch = get_ack_map_epoch(true, group_key); - dout(1) << " Force gw to exit: first beacon in state " << avail - << " GW " << gw_id << dendl; + dout(1) << "Send empty map. Force gw to exit: first beacon in state " + << avail << " GW " << gw_id << dendl; auto msg = make_message(ack_map); mon.send_reply(op, msg.detach()); goto false_return; -- 2.47.3