triton_distributed/
config.rs1use super::Result;
17use derive_builder::Builder;
18use figment::{
19 providers::{Env, Format, Serialized, Toml},
20 Figment,
21};
22use serde::{Deserialize, Serialize};
23use validator::Validate;
24
25#[derive(Debug, Clone, Serialize, Deserialize)]
26pub struct WorkerConfig {
27 pub graceful_shutdown_timeout: u64,
29}
30
31impl WorkerConfig {
32 pub fn from_settings() -> Self {
33 Figment::new()
36 .merge(Serialized::defaults(Self::default()))
37 .merge(Env::prefixed("TRITON_WORKER_"))
38 .extract()
39 .unwrap()
40 }
41}
42
43impl Default for WorkerConfig {
44 fn default() -> Self {
45 WorkerConfig {
46 graceful_shutdown_timeout: if cfg!(debug_assertions) {
47 1 } else {
49 30 },
51 }
52 }
53}
54
55#[derive(Serialize, Deserialize, Validate, Debug, Builder, Clone)]
58#[builder(build_fn(private, name = "build_internal"), derive(Debug, Serialize))]
59pub struct RuntimeConfig {
60 #[validate(range(min = 1))]
63 #[builder(default = "16")]
64 #[builder_field_attr(serde(skip_serializing_if = "Option::is_none"))]
65 pub max_worker_threads: usize,
66
67 #[validate(range(min = 1))]
70 #[builder(default = "16")]
71 #[builder_field_attr(serde(skip_serializing_if = "Option::is_none"))]
72 pub max_blocking_threads: usize,
73}
74
75impl RuntimeConfig {
76 pub fn builder() -> RuntimeConfigBuilder {
77 RuntimeConfigBuilder::default()
78 }
79
80 pub(crate) fn figment() -> Figment {
81 Figment::new()
82 .merge(Serialized::defaults(RuntimeConfig::default()))
83 .merge(Toml::file("/opt/triton/defaults/runtime.toml"))
84 .merge(Toml::file("/opt/triton/etc/runtime.toml"))
85 .merge(Env::prefixed("TRITON_RUNTIME_"))
86 }
87
88 pub fn from_settings() -> Result<RuntimeConfig> {
96 let config: RuntimeConfig = Self::figment().extract()?;
97 config.validate()?;
98 Ok(config)
99 }
100
101 pub fn single_threaded() -> Self {
102 RuntimeConfig {
103 max_worker_threads: 1,
104 max_blocking_threads: 1,
105 }
106 }
107
108 pub(crate) fn create_runtime(&self) -> Result<tokio::runtime::Runtime> {
110 Ok(tokio::runtime::Builder::new_multi_thread()
111 .worker_threads(self.max_worker_threads)
112 .max_blocking_threads(self.max_blocking_threads)
113 .enable_all()
114 .build()?)
115 }
116}
117
118impl Default for RuntimeConfig {
119 fn default() -> Self {
120 Self::single_threaded()
121 }
122}
123
124impl RuntimeConfigBuilder {
125 pub fn build(&self) -> Result<RuntimeConfig> {
127 let config = self.build_internal()?;
128 config.validate()?;
129 Ok(config)
130 }
131}