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