fix: redesigned graceful shutdown for config update
This commit is contained in:
parent
8d9f07a848
commit
48b33409f9
4 changed files with 213 additions and 197 deletions
|
|
@ -1,7 +1,7 @@
|
|||
use crate::{constants::*, count::RequestCount};
|
||||
use hot_reload::ReloaderReceiver;
|
||||
use rpxy_certs::ServerCryptoBase;
|
||||
use std::{net::SocketAddr, sync::Arc, time::Duration};
|
||||
use std::{net::SocketAddr, time::Duration};
|
||||
use tokio_util::sync::CancellationToken;
|
||||
|
||||
/// Global object containing proxy configurations and shared object like counters.
|
||||
|
|
@ -14,13 +14,13 @@ pub struct Globals {
|
|||
/// Shared context - Async task runtime handler
|
||||
pub runtime_handle: tokio::runtime::Handle,
|
||||
/// Shared context - Notify object to stop async tasks
|
||||
pub cancel_token: Option<CancellationToken>,
|
||||
pub cancel_token: CancellationToken,
|
||||
/// Shared context - Certificate reloader service receiver // TODO: newer one
|
||||
pub cert_reloader_rx: Option<ReloaderReceiver<ServerCryptoBase>>,
|
||||
|
||||
#[cfg(feature = "acme")]
|
||||
/// ServerConfig used for only ACME challenge for ACME domains
|
||||
pub server_configs_acme_challenge: Arc<rustc_hash::FxHashMap<String, Arc<rustls::ServerConfig>>>,
|
||||
pub server_configs_acme_challenge: std::sync::Arc<rustc_hash::FxHashMap<String, std::sync::Arc<rustls::ServerConfig>>>,
|
||||
}
|
||||
|
||||
/// Configuration parameters for proxy transport and request handlers
|
||||
|
|
|
|||
|
|
@ -108,7 +108,7 @@ pub async fn entrypoint(
|
|||
proxy_config: proxy_config.clone(),
|
||||
request_count: Default::default(),
|
||||
runtime_handle: runtime_handle.clone(),
|
||||
cancel_token: cancel_token.clone(),
|
||||
cancel_token: cancel_token.clone().unwrap_or_default(),
|
||||
cert_reloader_rx: cert_rx.clone(),
|
||||
|
||||
#[cfg(feature = "acme")]
|
||||
|
|
@ -130,7 +130,6 @@ pub async fn entrypoint(
|
|||
let connection_builder = proxy::connection_builder(&globals);
|
||||
|
||||
// spawn each proxy for a given socket with copied Arc-ed backend, message_handler and connection builder.
|
||||
let parent_cancel_token = globals.cancel_token.clone().unwrap_or_default();
|
||||
let addresses = globals.proxy_config.listen_sockets.clone();
|
||||
let join_handles = addresses.into_iter().map(|listening_on| {
|
||||
let mut tls_enabled = false;
|
||||
|
|
@ -145,8 +144,8 @@ pub async fn entrypoint(
|
|||
message_handler: message_handler.clone(),
|
||||
};
|
||||
|
||||
let cancel_token = parent_cancel_token.child_token();
|
||||
let parent_cancel_token_clone = parent_cancel_token.clone();
|
||||
let cancel_token = globals.cancel_token.child_token();
|
||||
let parent_cancel_token_clone = globals.cancel_token.clone();
|
||||
globals.runtime_handle.spawn(async move {
|
||||
info!("rpxy proxy service for {listening_on} started");
|
||||
tokio::select! {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue