]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd_types: add last_became_active to pg_stats
authorSamuel Just <sam.just@inktank.com>
Mon, 1 Apr 2013 22:42:34 +0000 (15:42 -0700)
committerSamuel Just <sam.just@inktank.com>
Wed, 24 Apr 2013 03:54:57 +0000 (20:54 -0700)
Signed-off-by: Samuel Just <sam.just@inktank.com>
src/osd/PG.cc
src/osd/osd_types.cc
src/osd/osd_types.h

index 8cab7c774008f3d16b5a1f1d8b44b3076427a2c2..90fe7728d63bf9e25ac4e901e6a7af895e790dfe 100644 (file)
@@ -2322,6 +2322,9 @@ void PG::update_stats()
     if (info.stats.state != state) {
       info.stats.state = state;
       info.stats.last_change = now;
+      if ((state & PG_STATE_ACTIVE) &&
+         !(info.stats.state & PG_STATE_ACTIVE))
+       info.stats.last_became_active = now;
     }
     if (info.stats.state & PG_STATE_CLEAN)
       info.stats.last_clean = now;
index 83c688707650d169b6aac40180160007500a9de5..89ca468710b26438c93780431a011044bef60d53 100644 (file)
@@ -1090,6 +1090,7 @@ void pg_stat_t::dump(Formatter *f) const
   f->dump_stream("last_change") << last_change;
   f->dump_stream("last_active") << last_active;
   f->dump_stream("last_clean") << last_clean;
+  f->dump_stream("last_became_active") << last_became_active;
   f->dump_stream("last_unstale") << last_unstale;
   f->dump_unsigned("mapping_epoch", mapping_epoch);
   f->dump_stream("log_start") << log_start;
@@ -1119,7 +1120,7 @@ void pg_stat_t::dump(Formatter *f) const
 
 void pg_stat_t::encode(bufferlist &bl) const
 {
-  ENCODE_START(12, 8, bl);
+  ENCODE_START(13, 8, bl);
   ::encode(version, bl);
   ::encode(reported, bl);
   ::encode(state, bl);
@@ -1146,12 +1147,13 @@ void pg_stat_t::encode(bufferlist &bl) const
   ::encode(last_deep_scrub_stamp, bl);
   ::encode(stats_invalid, bl);
   ::encode(last_clean_scrub_stamp, bl);
+  ::encode(last_became_active, bl);
   ENCODE_FINISH(bl);
 }
 
 void pg_stat_t::decode(bufferlist::iterator &bl)
 {
-  DECODE_START_LEGACY_COMPAT_LEN(12, 8, 8, bl);
+  DECODE_START_LEGACY_COMPAT_LEN(13, 8, 8, bl);
   ::decode(version, bl);
   ::decode(reported, bl);
   ::decode(state, bl);
@@ -1225,6 +1227,11 @@ void pg_stat_t::decode(bufferlist::iterator &bl)
   } else {
     last_clean_scrub_stamp = utime_t();
   }
+  if (struct_v >= 13) {
+    ::decode(last_became_active, bl);
+  } else {
+    last_became_active = last_active;
+  }
   DECODE_FINISH(bl);
 }
 
index 12a410ef2d227525aa75468602068c3cfadd0ae3..fbc467b7cf6bd70a714a9fd1ef2944a8c66c5b90 100644 (file)
@@ -931,6 +931,8 @@ struct pg_stat_t {
   vector<int> up, acting;
   epoch_t mapping_epoch;
 
+  utime_t last_became_active;
+
   pg_stat_t()
     : state(0),
       created(0), last_epoch_clean(0),