void OpsExecuter::apply_stats()
{
- pg->get_peering_state().apply_op_stats(get_target(), delta_stats);
- pg->scrubber.handle_op_stats(get_target(), delta_stats);
- pg->publish_stats_to_osd();
+ pg->apply_stats(get_target(), delta_stats);
}
OpsExecuter::OpsExecuter(Ref<PG> pg,
}
return seastar::do_with(ceph::os::Transaction{}, [=, this](auto &txn) {
- int64_t num_objects_before_trim = delta_stats.num_objects;
osd_op_p.at_version = pg->get_next_version();
auto ret = remove_or_update_iertr::now();
if (new_snaps.empty()) {
ret = adjust_snaps(obc, head_obc, new_snaps, txn);
}
return std::move(ret).si_then(
- [&txn, obc, num_objects_before_trim,
- head_obc=std::move(head_obc), this]() mutable {
+ [&txn, obc, head_obc=std::move(head_obc), this]() mutable {
// save head snapset
logger().debug("{}: {} new snapset {} on {}",
*this, coid, head_obc->ssc->snapset, head_obc->obs.oi);
update_head(obc, head_obc, txn);
}
// Stats reporting - Set number of objects trimmed
- if (num_objects_before_trim > delta_stats.num_objects) {
- //int64_t num_objects_trimmed =
- // num_objects_before_trim - delta_stats.num_objects;
- //add_objects_trimmed_count(num_objects_trimmed);
+ if (delta_stats.num_objects < 0) {
+ int64_t num_objects_trimmed = std::abs(delta_stats.num_objects);
+ pg->get_peering_state().update_stats_wo_resched(
+ [num_objects_trimmed](auto &history, auto &stats) {
+ stats.objects_trimmed += num_objects_trimmed;
+ });
}
+ pg->apply_stats(coid, delta_stats);
}).si_then(
[&txn] () mutable {
return std::move(txn);
return pg_stats.value_or(pg_stat_t{});
}
+void PG::apply_stats(
+ const hobject_t &soid,
+ const object_stat_sum_t &delta_stats)
+{
+ peering_state.apply_op_stats(soid, delta_stats);
+ scrubber.handle_op_stats(soid, delta_stats);
+ publish_stats_to_osd();
+}
+
void PG::queue_check_readable(epoch_t last_peering_reset, ceph::timespan delay)
{
// handle the peering event in the background