reifydb_core/
retention.rs1use 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}