]> git-server-git.apps.pok.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>
Tue, 26 Feb 2013 20:26:22 +0000 (12:26 -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>
src/osd/PG.cc
src/osd/PG.h
src/osd/ReplicatedPG.cc

index 4ff5242277b443acfa44e71be76fdbf2b6fdc087..c6617f853b0f9ee14a41a94c7d34c8b8b1089b91 100644 (file)
@@ -3525,6 +3525,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 32e78a435a492543e33732b9da2ac144b89994bf..c7c63b725d03165d1dcd0be259f0a2b9f3b8bca3 100644 (file)
@@ -834,6 +834,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)
     {
@@ -869,6 +870,7 @@ public:
     map<hobject_t, pair<ScrubMap::object, int> > authoritative;
 
     // classic scrub
+    bool classic;
     bool finalizing;
 
     // chunky scrub
@@ -940,6 +942,7 @@ public:
 
     // clear all state
     void reset() {
+      classic = false;
       finalizing = false;
       block_writes = false;
       active = false;
index 3c449040f072470db4a5b6cde9c20d1a4cb2a01b..873c3d2b510c18b46277b608ccc2d67dcb558492 100644 (file)
@@ -564,7 +564,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) {