From: Matan Breizman Date: Wed, 7 Feb 2024 09:59:38 +0000 (+0000) Subject: mon/OSDMonitor: add comments X-Git-Tag: v19.2.1~164^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=66a559c28c9b8cf66efc4f9e0607641821b89b02;p=ceph.git mon/OSDMonitor: add comments Co-authored-by: Samuel Just Signed-off-by: Matan Breizman (cherry picked from commit 685047b035368666c09d654f0e862b9d2f114701) --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 43ac6c23c50d..c3429b5fd2ed 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -2280,11 +2280,18 @@ version_t OSDMonitor::get_trim_to() const return 0; } +/* There are two constraints on trimming: + * 1. we must not trim past the last_epoch_clean for any pg + * 2. we must not trim past the last reported epoch for any up + * osds. + * + * LastEpochClean::get_lower_bound_by_pool gives a value <= constraint 1. + * For constraint 2, we take the min over osd_epochs, which is populated with + * MOSDBeacon::version, see OSDMonitor::prepare_beacon + */ epoch_t OSDMonitor::get_min_last_epoch_clean() const { auto floor = last_epoch_clean.get_lower_bound_by_pool(osdmap); - // also scan osd epochs - // don't trim past the oldest reported osd epoch for (auto [osd, epoch] : osd_epochs) { if (epoch < floor) { ceph_assert(osdmap.is_up(osd)); diff --git a/src/mon/OSDMonitor.h b/src/mon/OSDMonitor.h index e3b91417650f..15e41a9b1798 100644 --- a/src/mon/OSDMonitor.h +++ b/src/mon/OSDMonitor.h @@ -114,6 +114,12 @@ class LastEpochClean { public: void report(unsigned pg_num, const pg_t& pg, epoch_t last_epoch_clean); void remove_pool(uint64_t pool); + /** + * get_lower_bound_by_pool + * + * Returns epoch e such that e <= pg.last_epoch_clean for all pgs in cluster. + * May return 0 if any pool does not have comprehensive values for all pgs. + */ epoch_t get_lower_bound_by_pool(const OSDMap& latest) const; void dump(Formatter *f) const; @@ -639,8 +645,18 @@ protected: // when we last received PG stats from each osd and the osd's osd_beacon_report_interval std::map> last_osd_report; - // TODO: use last_osd_report to store the osd report epochs, once we don't - // need to upgrade from pre-luminous releases. + /** + * osd_epochs + * + * Records the MOSDBeacon::version (the osd epoch at which the OSD sent the + * beacon) of the most recent beacon recevied from each currently up OSD. + * Used in OSDMonitor::get_min_last_epoch_clean(). + * Down osds are trimmed upon commit of each map + * (OSDMonitor::update_from_paxos). + * + * TODO: use last_osd_report to store the osd report epochs, once we don't + * need to upgrade from pre-luminous releases. + */ std::map osd_epochs; LastEpochClean last_epoch_clean; bool preprocess_beacon(MonOpRequestRef op);