d_engine_core/purge/
default_executor.rs

1use std::sync::Arc;
2
3use d_engine_proto::common::LogId;
4use tonic::async_trait;
5
6use crate::PurgeExecutor;
7use crate::RaftLog;
8use crate::Result;
9use crate::TypeConfig;
10use crate::alias::ROF;
11
12/// Default implementation using the configured log storage
13pub struct DefaultPurgeExecutor<T: TypeConfig> {
14    pub(super) raft_log: Arc<ROF<T>>,
15
16    /// === Volatile State ===
17    /// Background log purge task status
18    ///
19    /// When present, indicates an asynchronous cleanup task is in progress
20    /// targeting the specified log index.
21    #[allow(dead_code)]
22    pub(super) pending_purge: Option<LogId>,
23}
24
25#[async_trait]
26impl<T: TypeConfig> PurgeExecutor for DefaultPurgeExecutor<T> {
27    async fn execute_purge(
28        &self,
29        last_included: LogId,
30    ) -> Result<()> {
31        self.raft_log.purge_logs_up_to(last_included).await
32    }
33}
34
35impl<T: TypeConfig> DefaultPurgeExecutor<T> {
36    pub fn new(raft_log: Arc<ROF<T>>) -> Self {
37        DefaultPurgeExecutor {
38            raft_log,
39            pending_purge: None,
40        }
41    }
42}