]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: restructure calc_trim
authorSage Weil <sage@inktank.com>
Mon, 25 Feb 2013 23:33:35 +0000 (15:33 -0800)
committerSage Weil <sage@inktank.com>
Tue, 26 Feb 2013 20:26:32 +0000 (12:26 -0800)
No functional change, except that we log more debug, yay!

Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Samuel Just <sam.just@inktank.com>
src/osd/ReplicatedPG.cc

index 873c3d2b510c18b46277b608ccc2d67dcb558492..3cbc202d051500b61083bea39a5ec1fce5046ca1 100644 (file)
@@ -564,30 +564,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<pg_log_entry_t>::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<pg_log_entry_t>::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);
   }
 }