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;
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;
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);
::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);
} 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);
}