feature: CancellationToken-based shutdowns (#5325)

* initial stub for ShutdownToken

* attempting to start using new ShutdownManager in NymNode

* migrated verloc tasks

* added custom shutdown signal registration

* integrated legacy task support

* migrated additional tasks inside nym-node

* removed import thats unused in wasm

* apply review comments

* windows fixes
This commit is contained in:
Jędrzej Stuczyński
2025-01-13 09:13:13 +00:00
committed by GitHub
parent 11d6ee2fdb
commit 102cd1033c
18 changed files with 515 additions and 191 deletions
+4 -3
View File
@@ -6,6 +6,7 @@ use futures::StreamExt;
use nym_node_metrics::events::{
events_channels, MetricEventsReceiver, MetricEventsSender, MetricsEvent,
};
use nym_task::ShutdownToken;
use std::any;
use std::any::TypeId;
use std::collections::HashMap;
@@ -24,11 +25,11 @@ pub(crate) struct MetricsAggregator {
// registered_handlers: HashMap<TypeId, Box<dyn Any + Send + Sync + 'static>>,
event_sender: MetricEventsSender,
event_receiver: MetricEventsReceiver,
shutdown: nym_task::TaskClient,
shutdown: ShutdownToken,
}
impl MetricsAggregator {
pub fn new(handlers_update_interval: Duration, shutdown: nym_task::TaskClient) -> Self {
pub fn new(handlers_update_interval: Duration, shutdown: ShutdownToken) -> Self {
let (event_sender, event_receiver) = events_channels();
MetricsAggregator {
@@ -113,7 +114,7 @@ impl MetricsAggregator {
loop {
tokio::select! {
biased;
_ = self.shutdown.recv() => {
_ = self.shutdown.cancelled() => {
debug!("MetricsAggregator: Received shutdown");
break;
}
+6 -5
View File
@@ -4,7 +4,7 @@
use human_repr::HumanCount;
use human_repr::HumanThroughput;
use nym_node_metrics::NymNodeMetrics;
use nym_task::TaskClient;
use nym_task::ShutdownToken;
use std::time::Duration;
use time::OffsetDateTime;
use tokio::task::JoinHandle;
@@ -49,14 +49,14 @@ pub(crate) struct ConsoleLogger {
logging_delay: Duration,
at_last_update: AtLastUpdate,
metrics: NymNodeMetrics,
shutdown: TaskClient,
shutdown: ShutdownToken,
}
impl ConsoleLogger {
pub(crate) fn new(
logging_delay: Duration,
metrics: NymNodeMetrics,
shutdown: TaskClient,
shutdown: ShutdownToken,
) -> Self {
ConsoleLogger {
logging_delay,
@@ -126,11 +126,12 @@ impl ConsoleLogger {
async fn run(&mut self) {
trace!("Starting ConsoleLogger");
let mut interval = interval_at(Instant::now() + self.logging_delay, self.logging_delay);
while !self.shutdown.is_shutdown() {
loop {
tokio::select! {
biased;
_ = self.shutdown.recv() => {
_ = self.shutdown.cancelled() => {
trace!("ConsoleLogger: Received shutdown");
break
}
_ = interval.tick() => self.log_running_stats().await,
};