From eb1c04ee6236254191aab8878c8c63fa5ffbd4d8 Mon Sep 17 00:00:00 2001 From: Milind Changire Date: Thu, 13 Oct 2022 14:33:26 +0530 Subject: [PATCH] mds: move uninline failures to DamageTable Signed-off-by: Milind Changire --- src/mds/ScrubStack.cc | 31 +++++++++++++++++++++++++++++++ src/mds/ScrubStack.h | 2 ++ 2 files changed, 33 insertions(+) diff --git a/src/mds/ScrubStack.cc b/src/mds/ScrubStack.cc index 45188402a68..5a3994dc688 100644 --- a/src/mds/ScrubStack.cc +++ b/src/mds/ScrubStack.cc @@ -1064,6 +1064,9 @@ void ScrubStack::handle_scrub_stats(const cref_t &m) any_finished = true; if (header->get_repaired()) any_repaired = true; + auto& ufi = header->get_uninline_failed_info(); + uninline_failed_meta_info[it->first] = ufi; + ufi.clear(); scrubbing_map.erase(it++); } else { ++it; @@ -1087,7 +1090,32 @@ void ScrubStack::handle_scrub_stats(const cref_t &m) stat.epoch_acked = m->get_epoch(); stat.scrubbing_tags = m->get_scrubbing_tags(); stat.aborting = m->is_aborting(); + for (auto& [scrub_tag, errno_map] : m->get_uninline_failed_meta_info()) { + stat.uninline_failed_meta_info[scrub_tag] = errno_map; + } + } + } +} + +void ScrubStack::move_uninline_failures_to_damage_table() +{ + auto mds = mdcache->mds; + + for (mds_rank_t rank = 0; rank < (mds_rank_t)mds_scrub_stats.size(); rank++) { + auto& ufmi = mds_scrub_stats[rank].uninline_failed_meta_info; + + for (const auto& [scrub_tag, errno_ino_vec_map] : ufmi) { + for (const auto& [errno_, ino_vec] : errno_ino_vec_map) { + for (auto ino : ino_vec) { + std::string path; + auto in = mdcache->get_inode(ino); + ceph_assert(in); + in->make_path_string(path); + mds->damage_table.notify_uninline_failed(ino, rank, errno_, scrub_tag, path); + } + } } + ufmi.clear(); } } @@ -1154,6 +1182,9 @@ void ScrubStack::advance_scrub_status() any_finished = true; if (header->get_repaired()) any_repaired = true; + auto& ufmi = mds_scrub_stats[0].uninline_failed_meta_info; + ufmi[it->first] = header->get_uninline_failed_info(); + move_uninline_failures_to_damage_table(); scrubbing_map.erase(it++); } else { ++it; diff --git a/src/mds/ScrubStack.h b/src/mds/ScrubStack.h index 5e3c810ceca..13df9d4a331 100644 --- a/src/mds/ScrubStack.h +++ b/src/mds/ScrubStack.h @@ -104,6 +104,8 @@ public: bool remove_inode_if_stacked(CInode *in); + void move_uninline_failures_to_damage_table(); + MDCache *mdcache; protected: -- 2.39.5