Refactor app deletion logic to handle contracts asynchronously and improve error logging
This commit is contained in:
		
							parent
							
								
									ba4884e25a
								
							
						
					
					
						commit
						28618f38d0
					
				| @ -66,11 +66,10 @@ impl HostResources { | |||||||
|         for (port, _) in app.mapped_ports.iter() { |         for (port, _) in app.mapped_ports.iter() { | ||||||
|             self.reserved_host_ports.remove(port); |             self.reserved_host_ports.remove(port); | ||||||
|         } |         } | ||||||
|         let removed_existing_app = self.existing_apps.take(&app.uuid).ok_or_else(|| { |         self.existing_apps.take(&app.uuid).ok_or_else(|| { | ||||||
|             log::error!("App \"{}\" not found", app.uuid); |             log::error!("App \"{}\" not found", app.uuid); | ||||||
|             anyhow!("App \"{}\" not found", app.uuid) |             anyhow!("App \"{}\" not found", app.uuid) | ||||||
|         })?; |         })?; | ||||||
|         dbg!(removed_existing_app, &self.existing_apps); |  | ||||||
| 
 | 
 | ||||||
|         self.save_to_disk() |         self.save_to_disk() | ||||||
|     } |     } | ||||||
|  | |||||||
							
								
								
									
										20
									
								
								src/main.rs
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										20
									
								
								src/main.rs
									
									
									
									
									
								
							| @ -16,6 +16,7 @@ use detee_shared::pb::brain::NewAppRes; | |||||||
| use detee_shared::types::brain::AppDeployConfig; | use detee_shared::types::brain::AppDeployConfig; | ||||||
| use log::info; | use log::info; | ||||||
| use log::warn; | use log::warn; | ||||||
|  | use std::collections::HashSet; | ||||||
| use std::time::Duration; | use std::time::Duration; | ||||||
| use tokio::sync::mpsc::Receiver; | use tokio::sync::mpsc::Receiver; | ||||||
| use tokio::sync::mpsc::Sender; | use tokio::sync::mpsc::Sender; | ||||||
| @ -63,8 +64,21 @@ impl AppHandler { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     fn handle_contracts(&mut self, contracts: Vec<AppContract>) { |     async fn handle_contracts(&mut self, contracts: Vec<AppContract>) { | ||||||
|         dbg!(&contracts); |         let apps_in_host = self.host_resource.existing_apps.clone(); | ||||||
|  |         let apps_in_brain: HashSet<String> = contracts | ||||||
|  |             .iter() | ||||||
|  |             .map(|contact| contact.uuid.clone()) | ||||||
|  |             .collect(); | ||||||
|  | 
 | ||||||
|  |         let deleted_apps: HashSet<String> = | ||||||
|  |             apps_in_host.difference(&apps_in_brain).cloned().collect(); | ||||||
|  | 
 | ||||||
|  |         for uuid in deleted_apps { | ||||||
|  |             if let Err(e) = self.handle_del_app_req(uuid.clone()).await { | ||||||
|  |                 log::error!("Failed to delete app: {e}"); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     async fn run(mut self) { |     async fn run(mut self) { | ||||||
| @ -154,7 +168,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> { | |||||||
|         let brain_url = app_handler.host_config.brain_url.clone(); |         let brain_url = app_handler.host_config.brain_url.clone(); | ||||||
| 
 | 
 | ||||||
|         match grpc::register_node(&app_handler.host_config).await { |         match grpc::register_node(&app_handler.host_config).await { | ||||||
|             Ok(app_contracts) => app_handler.handle_contracts(app_contracts), |             Ok(app_contracts) => app_handler.handle_contracts(app_contracts).await, | ||||||
| 
 | 
 | ||||||
|             Err(e) => log::error!("Failed to connect to brain: {e}"), |             Err(e) => log::error!("Failed to connect to brain: {e}"), | ||||||
|         } |         } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user