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:
committed by
GitHub
parent
11d6ee2fdb
commit
102cd1033c
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user