From: Matan Breizman Date: Wed, 7 Feb 2024 09:59:38 +0000 (+0000) Subject: mon/OSDMonitor: add comments X-Git-Tag: v17.2.8~227^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c577be156c5b0130ee7733cfe39bfb61f5c553b6;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 9cbe1055048..6577ae76593 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -2326,11 +2326,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 b00144de4b3..07a691311cc 100644 --- a/src/mon/OSDMonitor.h +++ b/src/mon/OSDMonitor.h @@ -113,6 +113,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; @@ -641,8 +647,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);