Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 3 additions & 7 deletions src/feo/src/agent/direct/primary.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
//! Implementation of the primary agent for direct scheduler-to-worker signalling

use crate::activity::ActivityIdAndBuilder;
use crate::agent::register_sigterm_handler;
use crate::agent::NodeAddress;
use crate::debug_fmt::ScoreDebugDebug;
use crate::error::Error;
Expand All @@ -29,7 +30,7 @@ use alloc::sync::Arc;
use alloc::vec::Vec;
use core::sync::atomic::AtomicBool;
use feo_time::Duration;
use score_log::{error, info};
use score_log::error;
use std::collections::HashMap;
use std::thread::{self, JoinHandle};

Expand Down Expand Up @@ -134,12 +135,7 @@ impl Primary {

// Create a shared flag to signal shutdown from an OS signal (e.g., Ctrl-C).
let shutdown_requested = Arc::new(AtomicBool::new(false));
let shutdown_clone = shutdown_requested.clone();
ctrlc::set_handler(move || {
info!("Ctrl-C detected. Requesting graceful shutdown...");
shutdown_clone.store(true, core::sync::atomic::Ordering::Relaxed);
})
.expect("Error setting Ctrl-C handler");
register_sigterm_handler(shutdown_requested.clone());

let scheduler = Scheduler::new(
config.id,
Expand Down
10 changes: 3 additions & 7 deletions src/feo/src/agent/direct/primary_mpsc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
//! Implementation of the primary agent for mpsc-only signalling

use crate::activity::ActivityIdAndBuilder;
use crate::agent::register_sigterm_handler;
use crate::debug_fmt::ScoreDebugDebug;
use crate::error::Error;
use crate::ids::{ActivityId, AgentId, WorkerId};
Expand All @@ -27,7 +28,7 @@ use alloc::sync::Arc;
use alloc::vec::Vec;
use core::sync::atomic::AtomicBool;
use feo_time::Duration;
use score_log::{debug, error, info};
use score_log::{debug, error};
use std::collections::HashMap;
use std::thread::{self, JoinHandle};

Expand Down Expand Up @@ -103,12 +104,7 @@ impl Primary {

// Create a shared flag to signal shutdown from an OS signal (e.g., Ctrl-C).
let shutdown_requested = Arc::new(AtomicBool::new(false));
let shutdown_clone = shutdown_requested.clone();
ctrlc::set_handler(move || {
info!("Ctrl-C detected. Requesting graceful shutdown...");
shutdown_clone.store(true, core::sync::atomic::Ordering::Relaxed);
})
.expect("Error setting Ctrl-C handler");
register_sigterm_handler(shutdown_requested.clone());

let scheduler = Scheduler::new(
config.id,
Expand Down
17 changes: 17 additions & 0 deletions src/feo/src/agent/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,11 @@
//! agents. The primary agent is responsible for triggering the execution of all activities distributed
//! across all agents.

use alloc::sync::Arc;
use core::net::SocketAddr;
use core::sync::atomic::AtomicBool;
use core::sync::atomic::Ordering;
use score_log::info;
use std::path::PathBuf;

pub mod com_init;
Expand All @@ -30,3 +34,16 @@ pub enum NodeAddress {
Tcp(SocketAddr),
UnixSocket(PathBuf),
}

fn register_sigterm_handler(shutdown: Arc<AtomicBool>) {
ctrlc::set_handler(move || {
if shutdown.load(Ordering::Relaxed) {
info!("Terminate triggered, exiting...");
std::process::exit(1);
} else {
info!("Ctrl-C detected. Requesting graceful shutdown...");
shutdown.store(true, core::sync::atomic::Ordering::Relaxed);
}
})
.expect("Error setting Ctrl-C handler")
}
10 changes: 3 additions & 7 deletions src/feo/src/agent/relayed/primary.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
//! Implementation of the primary agent for mixed signalling using sockets and mpsc channels

use crate::activity::ActivityIdAndBuilder;
use crate::agent::register_sigterm_handler;
use crate::agent::NodeAddress;
use crate::error::Error;
use crate::ids::{ActivityId, AgentId, WorkerId};
Expand All @@ -27,7 +28,7 @@ use alloc::sync::Arc;
use alloc::vec::Vec;
use core::sync::atomic::AtomicBool;
use feo_time::Duration;
use score_log::{debug, info};
use score_log::debug;
use std::collections::HashMap;
use std::thread::{self, JoinHandle};

Expand Down Expand Up @@ -144,12 +145,7 @@ impl Primary {

// Create a shared flag to signal shutdown from an OS signal (e.g., Ctrl-C).
let shutdown_requested = Arc::new(AtomicBool::new(false));
let shutdown_clone = shutdown_requested.clone();
ctrlc::set_handler(move || {
info!("Ctrl-C detected. Requesting graceful shutdown...");
shutdown_clone.store(true, core::sync::atomic::Ordering::Relaxed);
})
.expect("Error setting Ctrl-C handler");
register_sigterm_handler(shutdown_requested.clone());

let scheduler = Scheduler::new(
id,
Expand Down
Loading