tatara_core/cluster/
roles.rs1use serde::{Deserialize, Serialize};
2use tracing::info;
3
4use super::types::NodeRoles;
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct RoleConfig {
9 #[serde(default = "default_true")]
10 pub voter: bool,
11 #[serde(default = "default_true")]
12 pub worker: bool,
13 #[serde(default = "default_priority")]
14 pub voter_priority: u32,
15}
16
17impl Default for RoleConfig {
18 fn default() -> Self {
19 Self {
20 voter: true,
21 worker: true,
22 voter_priority: 10,
23 }
24 }
25}
26
27impl From<RoleConfig> for NodeRoles {
28 fn from(cfg: RoleConfig) -> Self {
29 NodeRoles {
30 voter: cfg.voter,
31 worker: cfg.worker,
32 voter_priority: cfg.voter_priority,
33 }
34 }
35}
36
37pub fn resolve_roles(config: &RoleConfig) -> NodeRoles {
42 let roles = NodeRoles::from(config.clone());
43
44 info!(
45 voter = roles.voter,
46 worker = roles.worker,
47 priority = roles.voter_priority,
48 "Node roles resolved"
49 );
50
51 roles
52}
53
54fn default_true() -> bool {
55 true
56}
57
58fn default_priority() -> u32 {
59 10
60}