d_engine_core/
raft_context.rs1use 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 pub purge_executor: Arc<PE<T>>,
27}
28
29pub struct RaftContext<T>
30where
31 T: TypeConfig,
32{
33 pub node_id: u32,
34
35 pub storage: RaftStorageHandles<T>,
37
38 pub transport: Arc<TROF<T>>,
40
41 pub membership: Arc<MOF<T>>,
43
44 pub handlers: RaftCoreHandlers<T>,
46
47 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}