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