Mountain/RunTime/Shutdown/
ShutdownWithRecovery.rs1#![allow(non_snake_case)]
2
3use CommonLibrary::Error::CommonError::CommonError;
8
9use crate::{RunTime::ApplicationRunTime::ApplicationRunTime, dev_log};
10
11impl ApplicationRunTime {
12 pub async fn ShutdownWithRecovery(&self) -> Result<(), CommonError> {
13 dev_log!("lifecycle", "[ApplicationRunTime] Initiating robust shutdown with recovery...");
14
15 let mut ShutdownErrors:Vec<String> = Vec::new();
16
17 match self.ShutdownCocoonWithRetry().await {
18 Ok(()) => dev_log!("lifecycle", "[ApplicationRunTime] Cocoon shutdown successful"),
19 Err(Error) => {
20 ShutdownErrors.push(format!("Cocoon shutdown failed: {}", Error));
21 dev_log!("lifecycle", "warn: [ApplicationRunTime] Cocoon shutdown failed, continuing...");
22 },
23 }
24
25 match self.DisposeTerminalsSafely().await {
26 Ok(()) => dev_log!("lifecycle", "[ApplicationRunTime] Terminal disposal successful"),
27 Err(Error) => {
28 ShutdownErrors.push(format!("Terminal disposal failed: {}", Error));
29 dev_log!(
30 "lifecycle",
31 "warn: [ApplicationRunTime] Terminal disposal failed, continuing..."
32 );
33 },
34 }
35
36 match self.SaveApplicationState().await {
37 Ok(()) => dev_log!("lifecycle", "[ApplicationRunTime] Application state saved"),
38 Err(Error) => {
39 ShutdownErrors.push(format!("State save failed: {}", Error));
40 dev_log!(
41 "lifecycle",
42 "warn: [ApplicationRunTime] Failed to save application state, continuing..."
43 );
44 },
45 }
46
47 self.FlushPendingOperations().await;
48
49 if !ShutdownErrors.is_empty() {
50 Err(CommonError::Unknown {
51 Description:format!("Shutdown completed with {} errors: {:?}", ShutdownErrors.len(), ShutdownErrors),
52 })
53 } else {
54 Ok(())
55 }
56 }
57}