d_engine_core/
raft_context.rs

1use std::fmt::Debug;
2use std::sync::Arc;
3
4use crate::RaftNodeConfig;
5use crate::TypeConfig;
6use crate::alias::EOF;
7use crate::alias::MOF;
8use crate::alias::PE;
9use crate::alias::REPOF;
10use crate::alias::ROF;
11use crate::alias::SMHOF;
12use crate::alias::SMOF;
13use crate::alias::TROF;
14
15pub struct RaftStorageHandles<T: TypeConfig> {
16    pub raft_log: Arc<ROF<T>>,
17    pub state_machine: Arc<SMOF<T>>,
18}
19
20pub struct RaftCoreHandlers<T: TypeConfig> {
21    pub election_handler: EOF<T>,
22    pub replication_handler: REPOF<T>,
23    pub state_machine_handler: Arc<SMHOF<T>>,
24
25    // Raft Log Purge Executor
26    pub purge_executor: Arc<PE<T>>,
27}
28
29pub struct RaftContext<T>
30where
31    T: TypeConfig,
32{
33    pub node_id: u32,
34
35    // Storages
36    pub storage: RaftStorageHandles<T>,
37
38    // Network
39    pub transport: Arc<TROF<T>>,
40
41    // Cluster Membership
42    pub membership: Arc<MOF<T>>,
43
44    // Handlers
45    pub handlers: RaftCoreHandlers<T>,
46
47    // RaftNodeConfig
48    pub node_config: Arc<RaftNodeConfig>,
49}
50
51impl<T> RaftContext<T>
52where
53    T: TypeConfig,
54{
55    pub fn raft_log(&self) -> &Arc<ROF<T>> {
56        &self.storage.raft_log
57    }
58
59    pub fn state_machine(&self) -> &SMOF<T> {
60        &self.storage.state_machine
61    }
62
63    pub fn transport(&self) -> &Arc<TROF<T>> {
64        &self.transport
65    }
66    pub fn replication_handler(&self) -> &REPOF<T> {
67        &self.handlers.replication_handler
68    }
69
70    pub fn election_handler(&self) -> &EOF<T> {
71        &self.handlers.election_handler
72    }
73
74    pub fn state_machine_handler(&self) -> &Arc<SMHOF<T>> {
75        &self.handlers.state_machine_handler
76    }
77
78    pub fn node_config(&self) -> Arc<RaftNodeConfig> {
79        self.node_config.clone()
80    }
81
82    pub fn membership(&self) -> Arc<MOF<T>> {
83        self.membership.clone()
84    }
85
86    pub fn purge_executor(&self) -> Arc<PE<T>> {
87        self.handlers.purge_executor.clone()
88    }
89
90    pub fn membership_ref(&self) -> &Arc<MOF<T>> {
91        &self.membership
92    }
93
94    #[cfg(test)]
95    pub fn set_membership(
96        &mut self,
97        membership: Arc<MOF<T>>,
98    ) {
99        self.membership = membership;
100    }
101
102    #[cfg(test)]
103    pub fn set_transport(
104        &mut self,
105        transport: Arc<TROF<T>>,
106    ) {
107        self.transport = transport
108    }
109}
110
111impl<T> Debug for RaftContext<T>
112where
113    T: TypeConfig,
114{
115    fn fmt(
116        &self,
117        f: &mut std::fmt::Formatter<'_>,
118    ) -> std::fmt::Result {
119        f.debug_struct("RaftContext").field("node_id", &self.node_id).finish()
120    }
121}