@@ -8,7 +8,7 @@ use axum::{
8
8
} ;
9
9
use slog:: { error, info, warn, Logger } ;
10
10
use std:: sync:: Arc ;
11
- use tokio:: sync:: oneshot :: Receiver ;
11
+ use tokio:: sync:: watch :: Receiver ;
12
12
13
13
use mithril_common:: logging:: LoggerExtensions ;
14
14
use mithril_common:: StdResult ;
@@ -93,9 +93,10 @@ impl<T: MetricsServiceExporter + 'static> MetricsServer<T> {
93
93
. await ?;
94
94
95
95
let serve_logger = self . logger . clone ( ) ;
96
+ let mut shutdown_rx = shutdown_rx;
96
97
axum:: serve ( listener, app)
97
98
. with_graceful_shutdown ( async move {
98
- shutdown_rx. await . ok ( ) ;
99
+ shutdown_rx. changed ( ) . await . ok ( ) ;
99
100
warn ! (
100
101
serve_logger,
101
102
"shutting down HTTP server after receiving signal"
@@ -112,7 +113,7 @@ mod tests {
112
113
use anyhow:: anyhow;
113
114
use reqwest:: StatusCode ;
114
115
use std:: time:: Duration ;
115
- use tokio:: { sync:: oneshot , task:: yield_now, time:: sleep} ;
116
+ use tokio:: { sync:: watch , task:: yield_now, time:: sleep} ;
116
117
117
118
use crate :: helper:: test_tools:: TestLogger ;
118
119
@@ -135,7 +136,7 @@ mod tests {
135
136
#[ tokio:: test]
136
137
async fn test_metrics_server ( ) {
137
138
let logger = TestLogger :: stdout ( ) ;
138
- let ( shutdown_tx, shutdown_rx) = oneshot :: channel ( ) ;
139
+ let ( shutdown_tx, shutdown_rx) = watch :: channel ( ( ) ) ;
139
140
let metrics_service = Arc :: new ( PseudoMetricsService :: new ( ) ) ;
140
141
let metrics_server = Arc :: new ( MetricsServer :: new (
141
142
"0.0.0.0" ,
0 commit comments