fix: shutdown properly on error
All checks were successful
Rust / build (push) Successful in 9m7s
ci/woodpecker/push/push-next Pipeline was successful
ci/woodpecker/push/cron-docker-builder Pipeline was successful
ci/woodpecker/push/tag-created Pipeline was successful
Release Please / Release-plz (push) Successful in 2m2s
All checks were successful
Rust / build (push) Successful in 9m7s
ci/woodpecker/push/push-next Pipeline was successful
ci/woodpecker/push/cron-docker-builder Pipeline was successful
ci/woodpecker/push/tag-created Pipeline was successful
Release Please / Release-plz (push) Successful in 2m2s
This commit is contained in:
parent
b4a4631a1d
commit
5e0cf270dd
3 changed files with 26 additions and 18 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
@ -1127,6 +1127,7 @@ dependencies = [
|
||||||
"test-log",
|
"test-log",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
"time",
|
"time",
|
||||||
|
"tokio",
|
||||||
"toml",
|
"toml",
|
||||||
"tracing",
|
"tracing",
|
||||||
"tracing-error",
|
"tracing-error",
|
||||||
|
|
|
@ -51,6 +51,7 @@ toml = { workspace = true }
|
||||||
# Actors
|
# Actors
|
||||||
actix = { workspace = true }
|
actix = { workspace = true }
|
||||||
actix-rt = { workspace = true }
|
actix-rt = { workspace = true }
|
||||||
|
tokio = { workspace = true }
|
||||||
|
|
||||||
# boilerplate
|
# boilerplate
|
||||||
bon = { workspace = true }
|
bon = { workspace = true }
|
||||||
|
|
|
@ -20,7 +20,7 @@ use git_next_core::git::RepositoryFactory;
|
||||||
|
|
||||||
use color_eyre::{eyre::Context, Result};
|
use color_eyre::{eyre::Context, Result};
|
||||||
use kxio::{fs::FileSystem, network::Network};
|
use kxio::{fs::FileSystem, network::Network};
|
||||||
use tracing::{error, info};
|
use tracing::info;
|
||||||
|
|
||||||
use std::{
|
use std::{
|
||||||
path::PathBuf,
|
path::PathBuf,
|
||||||
|
@ -46,6 +46,7 @@ pub fn init(fs: &FileSystem) -> Result<()> {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(clippy::too_many_lines)]
|
||||||
pub fn start(
|
pub fn start(
|
||||||
ui: bool,
|
ui: bool,
|
||||||
fs: FileSystem,
|
fs: FileSystem,
|
||||||
|
@ -97,7 +98,6 @@ pub fn start(
|
||||||
use crate::server::actor::messages::SubscribeToUpdates;
|
use crate::server::actor::messages::SubscribeToUpdates;
|
||||||
use crate::tui;
|
use crate::tui;
|
||||||
|
|
||||||
let (tx_shutdown, rx_shutdown) = channel::<String>();
|
|
||||||
let tui_addr = tui::Tui::new(tx_shutdown.clone()).start();
|
let tui_addr = tui::Tui::new(tx_shutdown.clone()).start();
|
||||||
server.do_send(SubscribeToUpdates::new(tui_addr.clone().recipient()));
|
server.do_send(SubscribeToUpdates::new(tui_addr.clone().recipient()));
|
||||||
server.do_send(ShutdownTrigger::new(tx_shutdown));
|
server.do_send(ShutdownTrigger::new(tx_shutdown));
|
||||||
|
@ -116,18 +116,26 @@ pub fn start(
|
||||||
} else {
|
} else {
|
||||||
server.do_send(ShutdownTrigger::new(tx_shutdown.clone()));
|
server.do_send(ShutdownTrigger::new(tx_shutdown.clone()));
|
||||||
server.do_send(FileUpdated);
|
server.do_send(FileUpdated);
|
||||||
info!("Server running - Press Ctrl-C to stop...");
|
|
||||||
|
|
||||||
actix_rt::spawn(async move {
|
info!("Server running - Press Ctrl-C to stop...");
|
||||||
let _ = signal::ctrl_c().await;
|
tokio::select! {
|
||||||
info!("Ctrl-C received, shutting down...");
|
_r = signal::ctrl_c() => {
|
||||||
let _ = tx_shutdown.send(String::new());
|
info!("Ctrl-C received, shutting down...");
|
||||||
});
|
}
|
||||||
if let Ok(message) = rx_shutdown.try_recv() {
|
_x = async move {
|
||||||
let _ = shutdown_message_holder_exec
|
loop{
|
||||||
.write()
|
if let Ok(message) = rx_shutdown.try_recv() {
|
||||||
.map(|mut o| o.replace(message));
|
let _ = shutdown_message_holder_exec
|
||||||
}
|
.write()
|
||||||
|
.map(|mut o| o.replace(message));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
actix_rt::task::yield_now().await;
|
||||||
|
}
|
||||||
|
} => {
|
||||||
|
info!("signaled shutdown");
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// shutdown
|
// shutdown
|
||||||
|
@ -147,10 +155,10 @@ pub fn start(
|
||||||
#[cfg(feature = "tui")]
|
#[cfg(feature = "tui")]
|
||||||
if ui {
|
if ui {
|
||||||
ratatui::restore();
|
ratatui::restore();
|
||||||
eprintln!("Server: {err:?}");
|
|
||||||
}
|
}
|
||||||
error!(?err, "server");
|
if !err.is_empty() {
|
||||||
return Err(color_eyre::eyre::eyre!(format!("{err}")));
|
return Err(color_eyre::eyre::eyre!(format!("{err}")));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// check for error from file watcher thread
|
// check for error from file watcher thread
|
||||||
|
@ -159,9 +167,7 @@ pub fn start(
|
||||||
#[cfg(feature = "tui")]
|
#[cfg(feature = "tui")]
|
||||||
if ui {
|
if ui {
|
||||||
ratatui::restore();
|
ratatui::restore();
|
||||||
eprintln!("File Watcher: {err:?}");
|
|
||||||
}
|
}
|
||||||
error!(?err, "file watcher");
|
|
||||||
return Err(color_eyre::eyre::eyre!(format!("{err}")));
|
return Err(color_eyre::eyre::eyre!(format!("{err}")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue