if ((state & PG_STATE_ACTIVE) &&
!(info.stats.state & PG_STATE_ACTIVE))
info.stats.last_became_active = now;
+ if ((state & (PG_STATE_ACTIVE|PG_STATE_PEERED)) &&
+ !(info.stats.state & (PG_STATE_ACTIVE|PG_STATE_PEERED)))
+ info.stats.last_became_peered = now;
}
_update_calc_stats();
++info.stats.reported_seq;
info.stats.last_fresh = now;
+
if (info.stats.state & PG_STATE_CLEAN)
info.stats.last_clean = now;
if (info.stats.state & PG_STATE_ACTIVE)
info.stats.last_active = now;
+ if (info.stats.state & (PG_STATE_ACTIVE|PG_STATE_PEERED))
+ info.stats.last_peered = now;
info.stats.last_unstale = now;
if ((info.stats.state & PG_STATE_DEGRADED) == 0)
info.stats.last_undegraded = now;
f->dump_stream("last_fresh") << last_fresh;
f->dump_stream("last_change") << last_change;
f->dump_stream("last_active") << last_active;
+ f->dump_stream("last_peered") << last_peered;
f->dump_stream("last_clean") << last_clean;
f->dump_stream("last_became_active") << last_became_active;
+ f->dump_stream("last_became_peered") << last_became_peered;
f->dump_stream("last_unstale") << last_unstale;
f->dump_stream("last_undegraded") << last_undegraded;
f->dump_stream("last_fullsized") << last_fullsized;
void pg_stat_t::encode(bufferlist &bl) const
{
- ENCODE_START(20, 8, bl);
+ ENCODE_START(21, 8, bl);
::encode(version, bl);
::encode(reported_seq, bl);
::encode(reported_epoch, bl);
::encode(last_undegraded, bl);
::encode(last_fullsized, bl);
::encode(hitset_bytes_stats_invalid, bl);
+ ::encode(last_peered, bl);
+ ::encode(last_became_peered, bl);
ENCODE_FINISH(bl);
}
// encoder may not have supported num_bytes_hit_set_archive accounting.
hitset_bytes_stats_invalid = true;
}
+ if (struct_v >= 21) {
+ ::decode(last_peered, bl);
+ ::decode(last_became_peered, bl);
+ } else {
+ last_peered = last_active;
+ last_became_peered = last_became_active;
+ }
DECODE_FINISH(bl);
}
utime_t last_fresh; // last reported
utime_t last_change; // new state != previous state
utime_t last_active; // state & PG_STATE_ACTIVE
+ utime_t last_peered; // state & PG_STATE_ACTIVE || state & PG_STATE_ACTIVE
utime_t last_clean; // state & PG_STATE_CLEAN
utime_t last_unstale; // (state & PG_STATE_STALE) == 0
utime_t last_undegraded; // (state & PG_STATE_DEGRADED) == 0
vector<int32_t> blocked_by; ///< osds on which the pg is blocked
utime_t last_became_active;
+ utime_t last_became_peered;
/// true if num_objects_dirty is not accurate (because it was not
/// maintained starting from pool creation)