reifydb_core/
retention.rs1use serde::{Deserialize, Serialize};
5
6use crate::common::CommitVersion;
7
8#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
10pub enum RetentionStrategy {
11 #[default]
13 KeepForever,
14
15 KeepVersions {
17 count: u64,
18 cleanup_mode: CleanupMode,
19 },
20}
21
22#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
24pub enum CleanupMode {
25 Delete,
28
29 Drop,
32}
33
34#[derive(Debug, Clone, Copy, PartialEq, Eq)]
36pub enum CleanupAction {
37 Delete,
39
40 Drop,
42
43 Keep,
45}
46
47impl RetentionStrategy {
48 pub fn should_retain(
50 &self,
51 _version: CommitVersion,
52 _current_version: CommitVersion,
53 version_count: u64,
54 ) -> bool {
55 match self {
56 RetentionStrategy::KeepForever => true,
57
58 RetentionStrategy::KeepVersions {
59 count,
60 ..
61 } => {
62 version_count <= *count
64 }
65 }
66 }
67
68 pub fn cleanup_mode(&self) -> Option<CleanupMode> {
70 match self {
71 RetentionStrategy::KeepForever => None,
72 RetentionStrategy::KeepVersions {
73 cleanup_mode,
74 ..
75 } => Some(*cleanup_mode),
76 }
77 }
78}