From e502a65da1779564059e74c09ab87aca1d901bd2 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 25 Feb 2013 15:33:35 -0800 Subject: [PATCH] osd: restructure calc_trim No functional change, except that we log more debug, yay! Signed-off-by: Sage Weil Reviewed-by: Samuel Just (cherry picked from commit 86df164d04f6e31a0f20bbb94dbce0599c0e8b3d) --- src/osd/ReplicatedPG.cc | 52 ++++++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 5dc0f1e398d7a..5681cd36ea4b3 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -563,30 +563,38 @@ void ReplicatedPG::do_pg_op(OpRequestRef op) void ReplicatedPG::calc_trim_to() { - if (!is_degraded() && is_clean() && !(is_scrubbing() && scrubber.classic)) { - if (min_last_complete_ondisk != eversion_t() && - min_last_complete_ondisk != pg_trim_to && - log.approx_size() > g_conf->osd_min_pg_log_entries) { - size_t num_to_trim = log.approx_size() - g_conf->osd_min_pg_log_entries; - list::const_iterator it = 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 > min_last_complete_ondisk) { - new_trim_to = min_last_complete_ondisk; - dout(10) << "calc_trim_to trimming to min_last_complete_ondisk" << dendl; - break; - } + if (is_degraded() || !is_clean()) { + dout(10) << "calc_trim_to no trim while degraded or not clean" << dendl; + pg_trim_to = eversion_t(); + return; + } + + if (is_scrubbing() && scrubber.classic) { + dout(10) << "calc_trim_to no trim during classic scrub" << dendl; + pg_trim_to = eversion_t(); + return; + } + + size_t target = g_conf->osd_min_pg_log_entries; + if (min_last_complete_ondisk != eversion_t() && + min_last_complete_ondisk != pg_trim_to && + log.approx_size() > target) { + size_t num_to_trim = log.approx_size() - target; + list::const_iterator it = 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 > min_last_complete_ondisk) { + new_trim_to = min_last_complete_ondisk; + 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 <= log.head); - assert(pg_trim_to <= min_last_complete_ondisk); } - } else { - // don't trim - pg_trim_to = eversion_t(); + dout(10) << "calc_trim_to " << pg_trim_to << " -> " << new_trim_to << dendl; + pg_trim_to = new_trim_to; + assert(pg_trim_to <= log.head); + assert(pg_trim_to <= min_last_complete_ondisk); } } -- 2.39.5