From 0536aef761fefda9a86d5bc72a12ca8cab931ccb Mon Sep 17 00:00:00 2001 From: Neha Ojha Date: Fri, 14 Dec 2018 15:59:24 -0800 Subject: [PATCH] osd: bring back old calc_trim_to and rename new method Signed-off-by: Neha Ojha --- src/osd/PG.h | 2 ++ src/osd/PrimaryLogPG.cc | 42 +++++++++++++++++++++++++++++++++++++++++ src/osd/PrimaryLogPG.h | 1 + 3 files changed, 45 insertions(+) diff --git a/src/osd/PG.h b/src/osd/PG.h index 2c2340c88bd..50fef7a6e98 100644 --- a/src/osd/PG.h +++ b/src/osd/PG.h @@ -1388,6 +1388,8 @@ protected: virtual void calc_trim_to() = 0; + virtual void calc_trim_to_aggressive() = 0; + void proc_replica_log(pg_info_t &oinfo, const pg_log_t &olog, pg_missing_t& omissing, pg_shard_t from); void proc_master_log(ObjectStore::Transaction& t, pg_info_t &oinfo, pg_log_t &olog, diff --git a/src/osd/PrimaryLogPG.cc b/src/osd/PrimaryLogPG.cc index 4cc4e85cbd8..6633e3dbc11 100644 --- a/src/osd/PrimaryLogPG.cc +++ b/src/osd/PrimaryLogPG.cc @@ -1610,6 +1610,48 @@ int PrimaryLogPG::do_scrub_ls(MOSDOp *m, OSDOp *osd_op) } void PrimaryLogPG::calc_trim_to() +{ + size_t target = cct->_conf->osd_min_pg_log_entries; + if (is_degraded() || + state_test(PG_STATE_RECOVERING | + PG_STATE_RECOVERY_WAIT | + PG_STATE_BACKFILLING | + PG_STATE_BACKFILL_WAIT | + PG_STATE_BACKFILL_TOOFULL)) { + target = cct->_conf->osd_max_pg_log_entries; + } + + eversion_t limit = std::min( + min_last_complete_ondisk, + pg_log.get_can_rollback_to()); + if (limit != eversion_t() && + limit != pg_trim_to && + pg_log.get_log().approx_size() > target) { + size_t num_to_trim = std::min(pg_log.get_log().approx_size() - target, + cct->_conf->osd_pg_log_trim_max); + if (num_to_trim < cct->_conf->osd_pg_log_trim_min && + cct->_conf->osd_pg_log_trim_max >= cct->_conf->osd_pg_log_trim_min) { + return; + } + list::const_iterator it = pg_log.get_log().log.begin(); + eversion_t new_trim_to; + for (size_t i = 0; i < num_to_trim; ++i) { + new_trim_to = it->version; + ++it; + if (new_trim_to > limit) { + new_trim_to = limit; + dout(10) << "calc_trim_to trimming to min_last_complete_ondisk" << dendl; + break; + } + } + dout(10) << "calc_trim_to " << pg_trim_to << " -> " << new_trim_to << dendl; + pg_trim_to = new_trim_to; + assert(pg_trim_to <= pg_log.get_head()); + assert(pg_trim_to <= min_last_complete_ondisk); + } +} + +void PrimaryLogPG::calc_trim_to_aggressive() { size_t target = cct->_conf->osd_min_pg_log_entries; if (is_degraded() || diff --git a/src/osd/PrimaryLogPG.h b/src/osd/PrimaryLogPG.h index 81574aad341..f8c45b9f571 100644 --- a/src/osd/PrimaryLogPG.h +++ b/src/osd/PrimaryLogPG.h @@ -1350,6 +1350,7 @@ protected: void apply_and_flush_repops(bool requeue); void calc_trim_to() override; + void calc_trim_to_aggressive() override; int do_xattr_cmp_u64(int op, __u64 v1, bufferlist& xattr); int do_xattr_cmp_str(int op, string& v1s, bufferlist& xattr); -- 2.39.5