fix: prometheus graceful shutdown (#8784)

This commit is contained in:
Matthias Seitz
2024-06-12 20:47:28 +02:00
committed by GitHub
parent b8cd7be6c9
commit 8398625d14

View File

@ -2,6 +2,7 @@
use crate::metrics::version_metrics::register_version_metrics; use crate::metrics::version_metrics::register_version_metrics;
use eyre::WrapErr; use eyre::WrapErr;
use futures::{future::FusedFuture, FutureExt};
use http::Response; use http::Response;
use metrics::describe_gauge; use metrics::describe_gauge;
use metrics_exporter_prometheus::{PrometheusBuilder, PrometheusHandle}; use metrics_exporter_prometheus::{PrometheusBuilder, PrometheusHandle};
@ -65,17 +66,14 @@ async fn start_endpoint<F: Hook + 'static>(
tokio::net::TcpListener::bind(listen_addr).await.wrap_err("Could not bind to address")?; tokio::net::TcpListener::bind(listen_addr).await.wrap_err("Could not bind to address")?;
task_executor.spawn_with_graceful_shutdown_signal(|signal| async move { task_executor.spawn_with_graceful_shutdown_signal(|signal| async move {
let mut shutdown = signal.ignore_guard(); let mut shutdown = signal.ignore_guard().fuse();
loop { loop {
let io = tokio::select! { let io = match listener.accept().await {
res = listener.accept() => match res { Ok((stream, _remote_addr)) => stream,
Ok((stream, _remote_addr)) => stream, Err(err) => {
Err(err) => { tracing::error!(%err, "failed to accept connection");
tracing::error!(%err, "failed to accept connection"); continue;
continue; }
}
},
_ = &mut shutdown => break,
}; };
let handle = handle.clone(); let handle = handle.clone();
@ -89,7 +87,11 @@ async fn start_endpoint<F: Hook + 'static>(
if let Err(error) = if let Err(error) =
jsonrpsee::server::serve_with_graceful_shutdown(io, service, &mut shutdown).await jsonrpsee::server::serve_with_graceful_shutdown(io, service, &mut shutdown).await
{ {
tracing::error!(%error, "metrics endpoint crashed") tracing::debug!(%error, "failed to serve request")
}
if shutdown.is_terminated() {
break;
} }
} }
}); });