Skip to main content

reifydb_core/
retention.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2025 ReifyDB
3
4use serde::{Deserialize, Serialize};
5
6use crate::common::CommitVersion;
7
8#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
9pub enum RetentionStrategy {
10	#[default]
11	KeepForever,
12
13	KeepVersions {
14		count: u64,
15		cleanup_mode: CleanupMode,
16	},
17}
18
19#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
20pub enum CleanupMode {
21	Delete,
22
23	Drop,
24}
25
26#[derive(Debug, Clone, Copy, PartialEq, Eq)]
27pub enum CleanupAction {
28	Delete,
29
30	Drop,
31
32	Keep,
33}
34
35impl RetentionStrategy {
36	pub fn should_retain(
37		&self,
38		_version: CommitVersion,
39		_current_version: CommitVersion,
40		version_count: u64,
41	) -> bool {
42		match self {
43			RetentionStrategy::KeepForever => true,
44
45			RetentionStrategy::KeepVersions {
46				count,
47				..
48			} => version_count <= *count,
49		}
50	}
51
52	pub fn cleanup_mode(&self) -> Option<CleanupMode> {
53		match self {
54			RetentionStrategy::KeepForever => None,
55			RetentionStrategy::KeepVersions {
56				cleanup_mode,
57				..
58			} => Some(*cleanup_mode),
59		}
60	}
61}