LCOV - code coverage report
Current view: top level - pageserver/src/tenant - gc_result.rs (source / functions) Coverage Total Hit
Test: 5fe7fa8d483b39476409aee736d6d5e32728bfac.info Lines: 70.8 % 24 17
Test Date: 2025-03-12 16:10:49 Functions: 20.0 % 5 1

            Line data    Source code
       1              : use std::ops::AddAssign;
       2              : use std::time::Duration;
       3              : 
       4              : use anyhow::Result;
       5              : use serde::Serialize;
       6              : 
       7              : ///
       8              : /// Result of performing GC
       9              : ///
      10            0 : #[derive(Default, Serialize, Debug)]
      11              : pub struct GcResult {
      12              :     pub layers_total: u64,
      13              :     pub layers_needed_by_cutoff: u64,
      14              :     pub layers_needed_by_pitr: u64,
      15              :     pub layers_needed_by_branches: u64,
      16              :     pub layers_needed_by_leases: u64,
      17              :     pub layers_not_updated: u64,
      18              :     pub layers_removed: u64, // # of layer files removed because they have been made obsolete by newer ondisk files.
      19              : 
      20              :     #[serde(serialize_with = "serialize_duration_as_millis")]
      21              :     pub elapsed: Duration,
      22              : 
      23              :     /// The layers which were garbage collected.
      24              :     ///
      25              :     /// Used in `/v1/tenant/:tenant_id/timeline/:timeline_id/do_gc` to wait for the layers to be
      26              :     /// dropped in tests.
      27              :     #[cfg(feature = "testing")]
      28              :     #[serde(skip)]
      29              :     pub(crate) doomed_layers: Vec<crate::tenant::storage_layer::Layer>,
      30              : }
      31              : 
      32              : // helper function for `GcResult`, serializing a `Duration` as an integer number of milliseconds
      33            0 : fn serialize_duration_as_millis<S>(d: &Duration, serializer: S) -> Result<S::Ok, S::Error>
      34            0 : where
      35            0 :     S: serde::Serializer,
      36            0 : {
      37            0 :     d.as_millis().serialize(serializer)
      38            0 : }
      39              : 
      40              : impl AddAssign for GcResult {
      41            8 :     fn add_assign(&mut self, other: Self) {
      42            8 :         self.layers_total += other.layers_total;
      43            8 :         self.layers_needed_by_pitr += other.layers_needed_by_pitr;
      44            8 :         self.layers_needed_by_cutoff += other.layers_needed_by_cutoff;
      45            8 :         self.layers_needed_by_branches += other.layers_needed_by_branches;
      46            8 :         self.layers_needed_by_leases += other.layers_needed_by_leases;
      47            8 :         self.layers_not_updated += other.layers_not_updated;
      48            8 :         self.layers_removed += other.layers_removed;
      49            8 : 
      50            8 :         self.elapsed += other.elapsed;
      51            8 : 
      52            8 :         #[cfg(feature = "testing")]
      53            8 :         {
      54            8 :             let mut other = other;
      55            8 :             self.doomed_layers.append(&mut other.doomed_layers);
      56            8 :         }
      57            8 :     }
      58              : }
        

Generated by: LCOV version 2.1-beta