Skip to content

Commit ca414b0

Browse files
authored
Merge pull request ceph#56378 from guojidan/snap-stats
crimson/osd/osd_operations/snaptrim_event: update PG's stats Reviewed-by: Matan Breizman <[email protected]> Reviewed-by: Samuel Just <[email protected]>
2 parents d82c9aa + 4a180f5 commit ca414b0

File tree

5 files changed

+21
-12
lines changed

5 files changed

+21
-12
lines changed

src/crimson/osd/ops_executer.cc

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1049,9 +1049,7 @@ ObjectContextRef OpsExecuter::prepare_clone(
10491049

10501050
void OpsExecuter::apply_stats()
10511051
{
1052-
pg->get_peering_state().apply_op_stats(get_target(), delta_stats);
1053-
pg->scrubber.handle_op_stats(get_target(), delta_stats);
1054-
pg->publish_stats_to_osd();
1052+
pg->apply_stats(get_target(), delta_stats);
10551053
}
10561054

10571055
OpsExecuter::OpsExecuter(Ref<PG> pg,

src/crimson/osd/osd_operations/snaptrim_event.cc

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,6 @@ SnapTrimObjSubEvent::remove_or_update(
381381
}
382382

383383
return seastar::do_with(ceph::os::Transaction{}, [=, this](auto &txn) {
384-
int64_t num_objects_before_trim = delta_stats.num_objects;
385384
osd_op_p.at_version = pg->get_next_version();
386385
auto ret = remove_or_update_iertr::now();
387386
if (new_snaps.empty()) {
@@ -396,8 +395,7 @@ SnapTrimObjSubEvent::remove_or_update(
396395
ret = adjust_snaps(obc, head_obc, new_snaps, txn);
397396
}
398397
return std::move(ret).si_then(
399-
[&txn, obc, num_objects_before_trim,
400-
head_obc=std::move(head_obc), this]() mutable {
398+
[&txn, obc, head_obc=std::move(head_obc), this]() mutable {
401399
// save head snapset
402400
logger().debug("{}: {} new snapset {} on {}",
403401
*this, coid, head_obc->ssc->snapset, head_obc->obs.oi);
@@ -407,11 +405,14 @@ SnapTrimObjSubEvent::remove_or_update(
407405
update_head(obc, head_obc, txn);
408406
}
409407
// Stats reporting - Set number of objects trimmed
410-
if (num_objects_before_trim > delta_stats.num_objects) {
411-
//int64_t num_objects_trimmed =
412-
// num_objects_before_trim - delta_stats.num_objects;
413-
//add_objects_trimmed_count(num_objects_trimmed);
408+
if (delta_stats.num_objects < 0) {
409+
int64_t num_objects_trimmed = std::abs(delta_stats.num_objects);
410+
pg->get_peering_state().update_stats_wo_resched(
411+
[num_objects_trimmed](auto &history, auto &stats) {
412+
stats.objects_trimmed += num_objects_trimmed;
413+
});
414414
}
415+
pg->apply_stats(coid, delta_stats);
415416
}).si_then(
416417
[&txn] () mutable {
417418
return std::move(txn);

src/crimson/osd/osd_operations/snaptrim_event.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,6 @@ class SnapTrimObjSubEvent : public PhasedOperationT<SnapTrimObjSubEvent> {
134134
CommonPGPipeline& client_pp();
135135

136136
private:
137-
/* TODO: we don't actually update the PG's stats
138-
* https://tracker.ceph.com/issues/63307 */
139137
object_stat_sum_t delta_stats;
140138

141139
snap_trim_obj_subevent_ret_t remove_clone(

src/crimson/osd/pg.cc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,15 @@ pg_stat_t PG::get_stats() const
212212
return pg_stats.value_or(pg_stat_t{});
213213
}
214214

215+
void PG::apply_stats(
216+
const hobject_t &soid,
217+
const object_stat_sum_t &delta_stats)
218+
{
219+
peering_state.apply_op_stats(soid, delta_stats);
220+
scrubber.handle_op_stats(soid, delta_stats);
221+
publish_stats_to_osd();
222+
}
223+
215224
void PG::queue_check_readable(epoch_t last_peering_reset, ceph::timespan delay)
216225
{
217226
// handle the peering event in the background

src/crimson/osd/pg.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -664,6 +664,9 @@ class PG : public boost::intrusive_ref_counter<
664664
void publish_stats_to_osd() final;
665665
void clear_publish_stats() final;
666666
pg_stat_t get_stats() const;
667+
void apply_stats(
668+
const hobject_t &soid,
669+
const object_stat_sum_t &delta_stats);
667670

668671
private:
669672
std::optional<pg_stat_t> pg_stats;

0 commit comments

Comments
 (0)