From: Xuehan Xu Date: Wed, 3 Jul 2024 14:00:39 +0000 (+0800) Subject: crimson/osd/osd: mark down connections of the new down osds X-Git-Tag: v20.0.0~1214^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=71d38e415e88b1e5cfc5328524f17a4cee4872e7;p=ceph.git crimson/osd/osd: mark down connections of the new down osds Signed-off-by: Xuehan Xu --- diff --git a/src/crimson/osd/osd.cc b/src/crimson/osd/osd.cc index 591c1aca0e4..18a3afd676f 100644 --- a/src/crimson/osd/osd.cc +++ b/src/crimson/osd/osd.cc @@ -1118,14 +1118,33 @@ seastar::future<> OSD::committed_osd_maps( ceph_assert(seastar::this_shard_id() == PRIMARY_CORE); INFO("osd.{} ({}, {})", whoami, first, last); // advance through the new maps + auto old_map = osdmap; return seastar::do_for_each(boost::make_counting_iterator(first), boost::make_counting_iterator(last + 1), - [this](epoch_t cur) { + [this, old_map, FNAME](epoch_t cur) { return pg_shard_manager.get_local_map( cur - ).then([this](OSDMapService::local_cached_map_t&& o) { + ).then([this, old_map, FNAME](OSDMapService::local_cached_map_t&& o) { osdmap = make_local_shared_foreign(OSDMapService::local_cached_map_t(o)); - return pg_shard_manager.update_map(std::move(o)); + std::set old_osds; + old_map->get_all_osds(old_osds); + return seastar::parallel_for_each( + old_osds, + [this, FNAME, old_map](auto &osd_id) { + DEBUG("osd.{}: whoami ? {}, old up ? {} , now down ? {}", + osd_id, osd_id != whoami, + old_map->is_up(osd_id), osdmap->is_down(osd_id)); + if (osd_id != whoami && + old_map->is_up(osd_id) && + osdmap->is_down(osd_id)) { + DEBUG("osd.{}: mark osd.{} down", whoami, osd_id); + return cluster_msgr->mark_down( + osdmap->get_cluster_addrs(osd_id).front()); + } + return seastar::now(); + }).then([this, o=std::move(o)]() mutable { + return pg_shard_manager.update_map(std::move(o)); + }); }).then([this] { if (get_shard_services().get_up_epoch() == 0 && osdmap->is_up(whoami) &&