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