]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: add last_clean_scrub_stamp to pg_stat_t, pg_history_t
authorSage Weil <sage@inktank.com>
Mon, 14 Jan 2013 06:43:35 +0000 (22:43 -0800)
committerSage Weil <sage@inktank.com>
Tue, 15 Jan 2013 02:24:40 +0000 (18:24 -0800)
Signed-off-by: Sage Weil <sage@inktank.com>
src/osd/osd_types.cc
src/osd/osd_types.h

index 69420eef98986b6ffd7b459f42064822fa6a400c..a3d4ed39da559674dace365cfd7c6d96d3530b2f 100644 (file)
@@ -1017,6 +1017,7 @@ void pg_stat_t::dump(Formatter *f) const
   f->dump_stream("last_scrub_stamp") << last_scrub_stamp;
   f->dump_stream("last_deep_scrub") << last_deep_scrub;
   f->dump_stream("last_deep_scrub_stamp") << last_deep_scrub_stamp;
+  f->dump_stream("last_clean_scrub_stamp") << last_clean_scrub_stamp;
   f->dump_unsigned("log_size", log_size);
   f->dump_unsigned("ondisk_log_size", ondisk_log_size);
   f->dump_stream("stats_invalid") << stats_invalid;
@@ -1033,7 +1034,7 @@ void pg_stat_t::dump(Formatter *f) const
 
 void pg_stat_t::encode(bufferlist &bl) const
 {
-  ENCODE_START(11, 8, bl);
+  ENCODE_START(12, 8, bl);
   ::encode(version, bl);
   ::encode(reported, bl);
   ::encode(state, bl);
@@ -1059,12 +1060,13 @@ void pg_stat_t::encode(bufferlist &bl) const
   ::encode(last_deep_scrub, bl);
   ::encode(last_deep_scrub_stamp, bl);
   ::encode(stats_invalid, bl);
+  ::encode(last_clean_scrub_stamp, bl);
   ENCODE_FINISH(bl);
 }
 
 void pg_stat_t::decode(bufferlist::iterator &bl)
 {
-  DECODE_START_LEGACY_COMPAT_LEN(10, 8, 8, bl);
+  DECODE_START_LEGACY_COMPAT_LEN(12, 8, 8, bl);
   ::decode(version, bl);
   ::decode(reported, bl);
   ::decode(state, bl);
@@ -1133,6 +1135,11 @@ void pg_stat_t::decode(bufferlist::iterator &bl)
   } else {
     ::decode(stats_invalid, bl);
   }
+  if (struct_v >= 12) {
+    ::decode(last_clean_scrub_stamp, bl);
+  } else {
+    last_clean_scrub_stamp = utime_t();
+  }
   DECODE_FINISH(bl);
 }
 
@@ -1160,6 +1167,7 @@ void pg_stat_t::generate_test_instances(list<pg_stat_t*>& o)
   a.last_scrub_stamp = utime_t(11, 12);
   a.last_deep_scrub = eversion_t(13, 14);
   a.last_deep_scrub_stamp = utime_t(15, 16);
+  a.last_clean_scrub_stamp = utime_t(17, 18);
   list<object_stat_collection_t*> l;
   object_stat_collection_t::generate_test_instances(l);
   a.stats = *l.back();
@@ -1247,7 +1255,7 @@ void pool_stat_t::generate_test_instances(list<pool_stat_t*>& o)
 
 void pg_history_t::encode(bufferlist &bl) const
 {
-  ENCODE_START(5, 4, bl);
+  ENCODE_START(6, 4, bl);
   ::encode(epoch_created, bl);
   ::encode(last_epoch_started, bl);
   ::encode(last_epoch_clean, bl);
@@ -1259,12 +1267,13 @@ void pg_history_t::encode(bufferlist &bl) const
   ::encode(last_scrub_stamp, bl);
   ::encode(last_deep_scrub, bl);
   ::encode(last_deep_scrub_stamp, bl);
+  ::encode(last_clean_scrub_stamp, bl);
   ENCODE_FINISH(bl);
 }
 
 void pg_history_t::decode(bufferlist::iterator &bl)
 {
-  DECODE_START_LEGACY_COMPAT_LEN(5, 4, 4, bl);
+  DECODE_START_LEGACY_COMPAT_LEN(6, 4, 4, bl);
   ::decode(epoch_created, bl);
   ::decode(last_epoch_started, bl);
   if (struct_v >= 3)
@@ -1278,10 +1287,13 @@ void pg_history_t::decode(bufferlist::iterator &bl)
   if (struct_v >= 2) {
     ::decode(last_scrub, bl);
     ::decode(last_scrub_stamp, bl);
-    if (struct_v >= 5) {
-      ::decode(last_deep_scrub, bl);
-      ::decode(last_deep_scrub_stamp, bl);
-    }
+  }
+  if (struct_v >= 5) {
+    ::decode(last_deep_scrub, bl);
+    ::decode(last_deep_scrub_stamp, bl);
+  }
+  if (struct_v >= 6) {
+    ::decode(last_clean_scrub_stamp, bl);
   }
   DECODE_FINISH(bl);
 }
@@ -1299,6 +1311,7 @@ void pg_history_t::dump(Formatter *f) const
   f->dump_stream("last_scrub_stamp") << last_scrub_stamp;
   f->dump_stream("last_deep_scrub") << last_deep_scrub;
   f->dump_stream("last_deep_scrub_stamp") << last_deep_scrub_stamp;
+  f->dump_stream("last_clean_scrub_stamp") << last_clean_scrub_stamp;
 }
 
 void pg_history_t::generate_test_instances(list<pg_history_t*>& o)
@@ -1316,6 +1329,7 @@ void pg_history_t::generate_test_instances(list<pg_history_t*>& o)
   o.back()->last_scrub_stamp = utime_t(10, 11);
   o.back()->last_deep_scrub = eversion_t(12, 13);
   o.back()->last_deep_scrub_stamp = utime_t(14, 15);
+  o.back()->last_clean_scrub_stamp = utime_t(16, 17);
 }
 
 
index 81f1aa2962dc9a8a6732fb9317a3da54f4c4e455..1e57bc9427c6c02fa8fa318f0344b615c00622ae 100644 (file)
@@ -885,6 +885,7 @@ struct pg_stat_t {
   eversion_t last_deep_scrub;
   utime_t last_scrub_stamp;
   utime_t last_deep_scrub_stamp;
+  utime_t last_clean_scrub_stamp;
 
   object_stat_collection_t stats;
   bool stats_invalid;
@@ -898,7 +899,7 @@ struct pg_stat_t {
   pg_stat_t()
     : state(0),
       created(0), last_epoch_clean(0),
-      parent_split_bits(0), 
+      parent_split_bits(0),
       stats_invalid(false),
       log_size(0), ondisk_log_size(0),
       mapping_epoch(0)
@@ -978,6 +979,7 @@ struct pg_history_t {
   eversion_t last_deep_scrub;
   utime_t last_scrub_stamp;
   utime_t last_deep_scrub_stamp;
+  utime_t last_clean_scrub_stamp;
 
   pg_history_t()
     : epoch_created(0),
@@ -1019,6 +1021,10 @@ struct pg_history_t {
       last_deep_scrub_stamp = other.last_deep_scrub_stamp;
       modified = true;
     }
+    if (other.last_clean_scrub_stamp > last_clean_scrub_stamp) {
+      last_clean_scrub_stamp = other.last_clean_scrub_stamp;
+      modified = true;
+    }
     return modified;
   }