]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: allow pg log trim during (non-classic) scrub
authorSage Weil <sage@inktank.com>
Sat, 23 Feb 2013 00:48:02 +0000 (16:48 -0800)
committerSage Weil <sage@inktank.com>
Fri, 8 Mar 2013 22:13:50 +0000 (14:13 -0800)
Chunky (and deep) scrub do not care about PG log trimming.  Classic scrub
still does.

Deep scrub can take a long time, so not trimming the log during that period
may eat lots of RAM; avoid that!

Might fix: #4179
Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Samuel Just <sam.just@inktank.com>
(cherry picked from commit 0ba8db6b664205348d5499937759916eac0997bf)

src/osd/PG.cc
src/osd/PG.h
src/osd/ReplicatedPG.cc

index 4aa6f5cb4f27e4948ccbc3da04774f44dfdb49c0..a69dd5d20b5906f767f13073a14e8cf0b96eeef4 100644 (file)
@@ -3654,6 +3654,7 @@ void PG::classic_scrub()
   if (!scrubber.active) {
     dout(10) << "scrub start" << dendl;
     scrubber.active = true;
+    scrubber.classic = true;
 
     update_stats();
     scrubber.received_maps.clear();
index f6dd8817f7276a11d9576ca9652d8e2c366cda4c..70e2756a9bbb026166197e2a0de69dcd0a03f173 100644 (file)
@@ -815,6 +815,7 @@ public:
       block_writes(false), active(false), queue_snap_trim(false),
       waiting_on(0), errors(0), fixed(0), active_rep_scrub(0),
       must_scrub(false), must_deep_scrub(false), must_repair(false),
+      classic(false),
       finalizing(false), is_chunky(false), state(INACTIVE),
       deep(false)
     {
@@ -850,6 +851,7 @@ public:
     map<hobject_t, pair<ScrubMap::object, int> > authoritative;
 
     // classic scrub
+    bool classic;
     bool finalizing;
 
     // chunky scrub
@@ -921,6 +923,7 @@ public:
 
     // clear all state
     void reset() {
+      classic = false;
       finalizing = false;
       block_writes = false;
       active = false;
index f67c2c323b42d7317b336bc42d906dff7f117f9a..5dc0f1e398d7abfff4060ed93a9d01d4842b58f2 100644 (file)
@@ -563,7 +563,7 @@ void ReplicatedPG::do_pg_op(OpRequestRef op)
 
 void ReplicatedPG::calc_trim_to()
 {
-  if (!is_degraded() && !is_scrubbing() && is_clean()) {
+  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) {