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