use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use std::time::Duration;
pub const DEFAULT_FORCE_KILL_MARGIN_SECS: u64 = 5;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub struct ShutdownBudget {
pub graceful_timeout: Duration,
pub abort_wait: Duration,
}
impl ShutdownBudget {
pub fn new(graceful_timeout: Duration, abort_wait: Duration) -> Self {
Self {
graceful_timeout,
abort_wait,
}
}
}
impl Default for ShutdownBudget {
fn default() -> Self {
Self::new(Duration::from_secs(5), Duration::from_secs(1))
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub struct TreeShutdownPolicy {
pub budget: ShutdownBudget,
pub abort_after_timeout: bool,
pub force_kill_margin: Duration,
pub max_orphan_threshold: u32,
}
impl TreeShutdownPolicy {
pub fn new(
budget: ShutdownBudget,
abort_after_timeout: bool,
force_kill_margin: Duration,
max_orphan_threshold: u32,
) -> Self {
Self {
budget,
abort_after_timeout,
force_kill_margin,
max_orphan_threshold,
}
}
pub fn with_budget(budget: ShutdownBudget) -> Self {
Self::new(
budget,
true,
Duration::from_secs(DEFAULT_FORCE_KILL_MARGIN_SECS),
0,
)
}
}
impl Default for TreeShutdownPolicy {
fn default() -> Self {
Self::with_budget(ShutdownBudget::default())
}
}