@@ -130,19 +130,39 @@ fn gc_sweep<'a>(
130130 })
131131}
132132
133+ /// Configuration for garbage collection.
133134#[derive(derive_more::Debug, Clone)]
134135pub struct GcConfig {
136+ /// Interval in which to run garbage collection.
135137 pub interval: std::time::Duration,
138+ /// Optional callback to manually add protected blobs.
139+ ///
140+ /// The callback is called before each garbage collection run. It gets a `&mut HashSet<Hash>`
141+ /// and returns a future that returns [`ProtectOutcome`]. All hashes that are added to the
142+ /// [`HashSet`] will be protected from garbage collection during this run.
143+ ///
144+ /// In normal operation, return [`ProtectOutcome::Continue`] from the callback. If you return
145+ /// [`ProtectOutcome::Abort`], the garbage collection run will be aborted.Use this if your
146+ /// source of hashes to protect returned an error, and thus garbage collection should be skipped
147+ /// completely to not unintentionally delete blobs that should be protected.
136148 #[debug("ProtectCallback")]
137149 pub add_protected: Option<ProtectCb>,
138150}
139151
152+ /// Returned from [`ProtectCb`].
153+ ///
154+ /// See [`GcConfig::add_protected] for details.
140155#[derive(Debug)]
141156pub enum ProtectOutcome {
157+ /// Continue with the garbage collection run.
142158 Continue,
143- Skip,
159+ /// Abort the garbage collection run.
160+ Abort,
144161}
145162
163+ /// The type of the garbage collection callback.
164+ ///
165+ /// See [`GcConfig::add_protected] for details.
146166pub type ProtectCb = Arc<
147167 dyn for<'a> Fn(
148168 &'a mut HashSet<Hash>,
@@ -205,8 +225,8 @@ pub async fn run_gc(store: Store, config: GcConfig) {
205225 if let Some(ref cb) = config.add_protected {
206226 match (cb)(&mut live).await {
207227 ProtectOutcome::Continue => {}
208- ProtectOutcome::Skip => {
209- info!("Skip gc run: protect callback indicated skip ");
228+ ProtectOutcome::Abort => {
229+ info!("abort gc run: protect callback indicated abort ");
210230 continue;
211231 }
212232 }
0 commit comments