}
}
-int NVMeofGwMap::process_gw_map_gw_no_subsystems(
+int NVMeofGwMap::process_gw_map_gw_no_subsys_no_listeners(
const NvmeGwId &gw_id, const NvmeGroupKey& group_key, bool &propose_pending)
{
int rc = 0;
auto& gws_states = created_gws[group_key];
auto& gw_state = created_gws[group_key][gw_id];
bool do_failback = false;
-
dout(10) << "Find failback GW for GW " << gw_id << dendl;
for (auto& gw_state_it: gws_states) {
auto& st = gw_state_it.second;
int process_gw_map_gw_down(
const NvmeGwId &gw_id, const NvmeGroupKey& group_key,
bool &propose_pending);
- int process_gw_map_gw_no_subsystems(
+ int process_gw_map_gw_no_subsys_no_listeners(
const NvmeGwId &gw_id, const NvmeGroupKey& group_key,
bool &propose_pending);
void update_active_timers(bool &propose_pending);
std::stringstream sstrm1;
sstrm1 << state.availability;
f->dump_string("Availability", sstrm1.str());
+ uint32_t num_listeners = 0;
+ if (state.availability == gw_availability_t::GW_AVAILABLE) {
+ for (auto &subs: state.subsystems) {
+ num_listeners += subs.listeners.size();
+ }
+ f->dump_unsigned("num-listeners", num_listeners);
+ }
sstrm1.str("");
for (auto &state_itr: map.created_gws[group_key][gw_id].sm_state) {
sstrm1 << " " << state_itr.first + 1 << ": "
if (avail == gw_availability_t::GW_UNAVAILABLE) {
pending_map.process_gw_map_gw_down(gw_id, group_key, propose_pending);
} else {
- pending_map.process_gw_map_gw_no_subsystems(gw_id, group_key, propose_pending);
+ pending_map.process_gw_map_gw_no_subsys_no_listeners(gw_id, group_key, propose_pending);
}
}
if (sub.size() == 0) {
avail = gw_availability_t::GW_CREATED;
- }
+ } else {
+ bool listener_found = false;
+ for (auto &subs: sub) {
+ if (subs.listeners.size()) {
+ listener_found = true;
+ break;
+ }
+ }
+ if (!listener_found) {
+ avail = gw_availability_t::GW_CREATED;
+ }
+ }// for HA no-subsystems and no-listeners are same usecases
if (pending_map.created_gws[group_key][gw_id].subsystems != sub) {
dout(10) << "subsystems of GW changed, propose pending " << gw_id << dendl;
pending_map.created_gws[group_key][gw_id].subsystems = sub;