]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: don't trim pg log if degraded
authorSage Weil <sage@newdream.net>
Thu, 18 Jun 2009 23:38:39 +0000 (16:38 -0700)
committerSage Weil <sage@newdream.net>
Thu, 18 Jun 2009 23:42:35 +0000 (16:42 -0700)
Also be a bit more verbose about pg_trim_to changes.

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

index 029576514c15bc0b63cfaa1d711535b819985a0a..52ce2324a1e7753cd0f9efe7cae1bc22647b624c 100644 (file)
@@ -847,6 +847,7 @@ public:
   bool       is_replay() const { return state_test(PG_STATE_REPLAY); }
   //bool       is_complete()    { return state_test(PG_STATE_COMPLETE); }
   bool       is_clean() const { return state_test(PG_STATE_CLEAN); }
+  bool       is_degraded() const { return state_test(PG_STATE_DEGRADED); }
   bool       is_stray() const { return state_test(PG_STATE_STRAY); }
 
   bool       is_scrubbing() const { return state_test(PG_STATE_SCRUBBING); }
index 288168943b0ac4e217334f5704b7a3162ab89147..06db0dd5a928b9f4db25957434492c6e63d7f350 100644 (file)
@@ -415,10 +415,13 @@ void ReplicatedPG::do_pg_op(MOSDOp *op)
 
 void ReplicatedPG::calc_trim_to()
 {
-  if (is_clean() ||
-      log.top.version - log.bottom.version > info.stats.num_objects) {
-    pg_trim_to = min_last_complete_ondisk;
-    if (pg_trim_to != eversion_t()) {
+  if (!is_degraded() &&
+      (is_clean() ||
+       log.top.version - log.bottom.version > info.stats.num_objects)) {
+    if (min_last_complete_ondisk != eversion_t() &&
+       min_last_complete_ondisk != pg_trim_to) {
+      dout(10) << "calc_trim_to " << pg_trim_to << " -> " << min_last_complete_ondisk << dendl;
+      pg_trim_to = min_last_complete_ondisk;
       assert(pg_trim_to >= log.bottom);
       assert(pg_trim_to <= log.top);
     }