diff --git a/osd.cpp b/osd.cpp index 876b470d..15c7e46c 100644 --- a/osd.cpp +++ b/osd.cpp @@ -365,8 +365,12 @@ void osd_t::stop_client(int peer_fd) osd_client_t cl = it->second; if (cl.osd_num) { - // FIXME: Reload configuration from Consul when the connection is dropped printf("[%lu] Stopping client %d (OSD peer %lu)\n", osd_num, peer_fd, cl.osd_num); + if (cl.peer_state == PEER_CONNECTED) + { + // Reload configuration from Consul when the connection is dropped + peer_states.erase(cl.osd_num); + } } else { diff --git a/osd_cluster.cpp b/osd_cluster.cpp index 04da9686..c7e2c6d0 100644 --- a/osd_cluster.cpp +++ b/osd_cluster.cpp @@ -214,7 +214,6 @@ void osd_t::load_pgs() } } parse_pgs(pg_config, pg_history); - peering_state = OSD_CONNECTING_PEERS; }); } @@ -288,6 +287,10 @@ void osd_t::parse_pgs(const json11::Json & pg_config, const std::mappg_count = pg_count; + if (wanted_peers.size() > 0) + { + peering_state |= OSD_CONNECTING_PEERS; + } } void osd_t::load_and_connect_peers() diff --git a/osd_peering.cpp b/osd_peering.cpp index 7cecce7e..3afcb8ee 100644 --- a/osd_peering.cpp +++ b/osd_peering.cpp @@ -327,6 +327,11 @@ void osd_t::start_pg_peering(pg_num_t pg_num) { cur_peers.insert(peer_osd); } + else if (wanted_peers.find(peer_osd) == wanted_peers.end()) + { + wanted_peers[peer_osd] = { 0 }; + peering_state |= OSD_CONNECTING_PEERS; + } } if (pg.peering_state) {