child->info.last_backfill = info.last_backfill;
child->info.stats = info.stats;
+ info.stats.stats_invalid = true;
+ child->info.stats.stats_invalid = true;
child->snap_trimq = snap_trimq;
bool deep_scrub = state_test(PG_STATE_DEEP_SCRUB);
const char *mode = (repair ? "repair": (deep_scrub ? "deep-scrub" : "scrub"));
+ if (info.stats.stats_invalid) {
+ info.stats.stats = scrub_cstat;
+ info.stats.stats_invalid = false;
+ }
+
dout(10) << mode << " got "
<< scrub_cstat.sum.num_objects << "/" << info.stats.stats.sum.num_objects << " objects, "
<< scrub_cstat.sum.num_object_clones << "/" << info.stats.stats.sum.num_object_clones << " clones, "
f->dump_stream("last_deep_scrub_stamp") << last_deep_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;
stats.dump(f);
f->open_array_section("up");
for (vector<int>::const_iterator p = up.begin(); p != up.end(); ++p)
void pg_stat_t::encode(bufferlist &bl) const
{
- ENCODE_START(10, 8, bl);
+ ENCODE_START(11, 8, bl);
::encode(version, bl);
::encode(reported, bl);
::encode(state, bl);
::encode(mapping_epoch, bl);
::encode(last_deep_scrub, bl);
::encode(last_deep_scrub_stamp, bl);
+ ::encode(stats_invalid, bl);
ENCODE_FINISH(bl);
}
}
}
}
+ if (struct_v < 11) {
+ stats_invalid = false;
+ } else {
+ ::decode(stats_invalid, bl);
+ }
DECODE_FINISH(bl);
}
utime_t last_deep_scrub_stamp;
object_stat_collection_t stats;
+ bool stats_invalid;
int64_t log_size;
int64_t ondisk_log_size; // >= active_log_size
: state(0),
created(0), last_epoch_clean(0),
parent_split_bits(0),
+ stats_invalid(false),
log_size(0), ondisk_log_size(0),
mapping_epoch(0)
{ }