@@ -203,6 +203,12 @@ void SegmentCleaner::register_metrics()
203203 sm::description (" total number of extents released by SegmentCleaner" )),
204204 sm::make_counter (" accumulated_blocked_ios" , stats.accumulated_blocked_ios ,
205205 sm::description (" accumulated total number of ios that were blocked by gc" )),
206+ sm::make_counter (" reclaimed_segments" , stats.reclaimed_segments ,
207+ sm::description (" reclaimed segments" )),
208+ sm::make_counter (" reclaim_rewrite_bytes" , stats.reclaim_rewrite_bytes ,
209+ sm::description (" rewritten bytes due to reclaim" )),
210+ sm::make_counter (" reclaiming_bytes" , stats.reclaiming_bytes ,
211+ sm::description (" bytes being reclaimed" )),
206212 sm::make_derive (" empty_segments" , stats.empty_segments ,
207213 sm::description (" current empty segments" )),
208214 sm::make_derive (" ios_blocking" , stats.ios_blocking ,
@@ -397,19 +403,21 @@ SegmentCleaner::gc_reclaim_space_ret SegmentCleaner::gc_reclaim_space()
397403 ).safe_then ([this ](auto &&_extents) {
398404 return seastar::do_with (
399405 std::move (_extents),
400- [this ](auto &extents) {
401- return repeat_eagain ([this , &extents]() mutable {
406+ (size_t )0 ,
407+ [this ](auto &extents, auto &reclaimed) {
408+ return repeat_eagain ([this , &extents, &reclaimed]() mutable {
409+ reclaimed = 0 ;
402410 logger ().debug (
403411 " SegmentCleaner::gc_reclaim_space: processing {} extents" ,
404412 extents.size ());
405413 return ecb->with_transaction_intr (
406414 Transaction::src_t ::CLEANER_RECLAIM,
407415 " reclaim_space" ,
408- [this , &extents](auto & t)
416+ [this , &extents, &reclaimed ](auto & t)
409417 {
410418 return trans_intr::do_for_each (
411419 extents,
412- [this , &t](auto &extent) {
420+ [this , &t, &reclaimed ](auto &extent) {
413421 auto &addr = extent.first ;
414422 auto commit_time = extent.second .first .commit_time ;
415423 auto commit_type = extent.second .first .commit_type ;
@@ -423,7 +431,7 @@ SegmentCleaner::gc_reclaim_space_ret SegmentCleaner::gc_reclaim_space()
423431 addr,
424432 info.addr ,
425433 info.len
426- ).si_then ([&info, commit_type, commit_time, addr=addr, &t, this ]
434+ ).si_then ([&info, commit_type, commit_time, addr=addr, &t, this , &reclaimed ]
427435 (CachedExtentRef ext) {
428436 if (!ext) {
429437 logger ().debug (
@@ -463,6 +471,7 @@ SegmentCleaner::gc_reclaim_space_ret SegmentCleaner::gc_reclaim_space()
463471 && commit_time ==
464472 ext->get_last_rewritten ().time_since_epoch ().count ()));
465473
474+ reclaimed += ext->get_length ();
466475 return ecb->rewrite_extent (
467476 t,
468477 ext);
@@ -475,10 +484,16 @@ SegmentCleaner::gc_reclaim_space_ret SegmentCleaner::gc_reclaim_space()
475484 return ecb->submit_transaction_direct (t);
476485 });
477486 });
487+ }).safe_then ([&reclaimed] {
488+ return seastar::make_ready_future<size_t >(reclaimed);
478489 });
479490 });
480- }).safe_then ([this ] {
491+ }).safe_then ([this ](size_t reclaimed) {
492+ stats.reclaiming_bytes += reclaimed;
481493 if (scan_cursor->is_complete ()) {
494+ stats.reclaim_rewrite_bytes += stats.reclaiming_bytes ;
495+ stats.reclaiming_bytes = 0 ;
496+ stats.reclaimed_segments ++;
482497 scan_cursor.reset ();
483498 }
484499 });
0 commit comments