From: Neha Ojha Date: Fri, 14 Dec 2018 23:59:24 +0000 (-0800) Subject: osd: bring back old calc_trim_to and rename new method X-Git-Tag: v13.2.5~52^2~8 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=4f693641bc05fe047b3dbebcfaf628a700687019;p=ceph.git osd: bring back old calc_trim_to and rename new method Signed-off-by: Neha Ojha (cherry picked from commit 0536aef761fefda9a86d5bc72a12ca8cab931ccb) --- diff --git a/src/osd/PG.h b/src/osd/PG.h index ffb50360ee28..36a8e5a1825b 100644 --- a/src/osd/PG.h +++ b/src/osd/PG.h @@ -1372,6 +1372,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 5d0805cc05bc..55301dd5d8a8 100644 --- a/src/osd/PrimaryLogPG.cc +++ b/src/osd/PrimaryLogPG.cc @@ -1609,6 +1609,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 615b23d61291..87e4891ea805 100644 --- a/src/osd/PrimaryLogPG.h +++ b/src/osd/PrimaryLogPG.h @@ -1345,6 +1345,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);