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 : }
|