Mountain/Binary/Shutdown/SchedulerShutdown.rs
1//! # Scheduler Shutdown Module
2//!
3//! Handles graceful shutdown of the Echo task scheduler.
4
5use std::sync::Arc;
6
7use log::{debug, error, info};
8use Echo::Scheduler::Scheduler::Scheduler;
9
10/// Stops the Echo task scheduler and cleans up its resources.
11///
12/// # Arguments
13///
14/// * `SchedulerForShutdown` - Arc-wrapped scheduler to shut down
15///
16/// # Returns
17///
18/// A `Result` indicating success or failure.
19///
20/// # Shutdown Process
21///
22/// This function performs:
23/// - Stops accepting new tasks
24/// - Completes in-progress tasks
25/// - Cleans up scheduler resources
26///
27/// # Errors
28///
29/// Returns an error if the scheduler is not exclusively owned or stop fails.
30pub async fn SchedulerShutdown(SchedulerForShutdown:Arc<Scheduler>) -> Result<(), String> {
31 debug!("[Shutdown] [Scheduler] Stopping Echo scheduler...");
32
33 // Try to get exclusive ownership for shutdown
34 match Arc::try_unwrap(SchedulerForShutdown) {
35 Ok(mut Scheduler) => {
36 Scheduler.Stop().await;
37 info!("[Shutdown] [Scheduler] Echo scheduler stopped successfully.");
38 Ok(())
39 },
40 Err(_) => Err("Scheduler not exclusively owned".to_string()),
41 }
42}