Addition of a new column in PG dump, OBJECTS_SCRUBBED, which keeps track of the number of objects scrubbed.
Signed-off-by: Aishwarya Mathuria <amathuri@redhat.com>
tab.define_column("SNAPTRIMQ_LEN", TextTable::LEFT, TextTable::RIGHT);
tab.define_column("LAST_SCRUB_DURATION", TextTable::LEFT, TextTable::RIGHT);
tab.define_column("SCRUB_SCHEDULING", TextTable::LEFT, TextTable::LEFT);
+ tab.define_column("OBJECTS_SCRUBBED", TextTable::LEFT, TextTable::RIGHT);
}
for (const auto& [pg, st] : pg_stats) {
<< st.snaptrimq_len
<< st.last_scrub_duration
<< st.dump_scrub_schedule()
+ << st.objects_scrubbed
<< TextTable::endrow;
}
}
});
}
+ static void add_objects_scrubbed_count(
+ int64_t count, pg_stat_t &stats) {
+ stats.objects_scrubbed += count;
+ }
+
+ void add_objects_scrubbed_count(int64_t count) {
+ recovery_state.update_stats(
+ [=](auto &history, auto &stats) {
+ add_objects_scrubbed_count(count, stats);
+ return true;
+ });
+ }
+
bool is_deleting() const {
return recovery_state.is_deleting();
}
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_int("objects_scrubbed", objects_scrubbed);
f->dump_int("log_size", log_size);
f->dump_int("ondisk_log_size", ondisk_log_size);
f->dump_bool("stats_invalid", stats_invalid);
encode(scrub_sched_status.m_is_active, bl);
encode((scrub_sched_status.m_is_deep==scrub_level_t::deep), bl);
encode(scrub_sched_status.m_is_periodic, bl);
+ encode(objects_scrubbed, bl);
+
ENCODE_FINISH(bl);
}
{
bool tmp;
uint32_t old_state;
- DECODE_START(26, bl);
+ DECODE_START(27, bl);
decode(version, bl);
decode(reported_seq, bl);
decode(reported_epoch, bl);
scrub_sched_status.m_is_deep = tmp ? scrub_level_t::deep : scrub_level_t::shallow;
decode(tmp, bl);
scrub_sched_status.m_is_periodic = tmp;
+ decode(objects_scrubbed, bl);
}
}
DECODE_FINISH(bl);
a.last_clean_scrub_stamp = utime_t(17, 18);
a.last_scrub_duration = 3617;
a.snaptrimq_len = 1048576;
+ a.objects_scrubbed = 0;
list<object_stat_collection_t*> l;
object_stat_collection_t::generate_test_instances(l);
a.stats = *l.back();
l.purged_snaps == r.purged_snaps &&
l.snaptrimq_len == r.snaptrimq_len &&
l.last_scrub_duration == r.last_scrub_duration &&
- l.scrub_sched_status == r.scrub_sched_status;
+ l.scrub_sched_status == r.scrub_sched_status &&
+ l.objects_scrubbed == r.objects_scrubbed;
}
// -- store_statfs_t --
int64_t log_size;
int64_t ondisk_log_size; // >= active_log_size
+ int64_t objects_scrubbed;
std::vector<int32_t> up, acting;
std::vector<pg_shard_t> avail_no_missing;
created(0), last_epoch_clean(0),
parent_split_bits(0),
log_size(0), ondisk_log_size(0),
+ objects_scrubbed(0),
mapping_epoch(0),
up_primary(-1),
acting_primary(-1),
{
dout(10) << __func__ << " has maps, analyzing" << dendl;
+ int64_t primary_objects = 0;
+
// construct authoritative scrub map for type-specific scrubbing
m_cleaned_meta_map.insert(m_primary_scrubmap);
map<hobject_t, pair<std::optional<uint32_t>, std::optional<uint32_t>>> missing_digest;
dout(2) << __func__ << ": primary (" << m_pg->get_primary() << ") has "
<< m_primary_scrubmap.objects.size() << " items" << dendl;
+ primary_objects = m_primary_scrubmap.objects.size();
+ m_pg->add_objects_scrubbed_count(primary_objects);
ss.str("");
ss.clear();