diff --git a/pgdog-config/src/networking.rs b/pgdog-config/src/networking.rs index 6f2af9ba..5aeafd63 100644 --- a/pgdog-config/src/networking.rs +++ b/pgdog-config/src/networking.rs @@ -100,7 +100,7 @@ impl std::fmt::Display for Tcp { if let Some(ref c) = self.congestion_control { c.as_str() } else { - "" + "default" }, ) } diff --git a/pgdog/src/backend/server.rs b/pgdog/src/backend/server.rs index 09da2a81..ee5e03d0 100644 --- a/pgdog/src/backend/server.rs +++ b/pgdog/src/backend/server.rs @@ -90,12 +90,18 @@ impl Server { ) -> Result { debug!("=> {}", addr); let stream = TcpStream::connect(addr.addr().await?).await?; - tweak(&stream)?; - let cfg = config(); + let config = config(); - let mut stream = Stream::plain(stream, cfg.config.memory.net_buffer); + if let Err(err) = tweak(&stream, &config.config.tcp) { + warn!( + "keepalive settings ({}) are not supported on this system, ignoring, error: {} [{}]", + config.config.tcp, err, addr, + ); + } + + let mut stream = Stream::plain(stream, config.config.memory.net_buffer); - let tls_mode = cfg.config.general.tls_verify; + let tls_mode = config.config.general.tls_verify; // Only attempt TLS if not in Disabled mode if tls_mode != TlsVerifyMode::Disabled { @@ -117,7 +123,7 @@ impl Server { let connector = connector_with_verify_mode( tls_mode, - cfg.config.general.tls_server_ca_certificate.as_ref(), + config.config.general.tls_server_ca_certificate.as_ref(), )?; let plain = stream.take()?; @@ -128,7 +134,7 @@ impl Server { Ok(tls_stream) => { debug!("TLS handshake successful with {}", addr.host); let cipher = tokio_rustls::TlsStream::Client(tls_stream); - stream = Stream::tls(cipher, cfg.config.memory.net_buffer); + stream = Stream::tls(cipher, config.config.memory.net_buffer); } Err(e) => { error!("TLS handshake failed with {:?} [{}]", e, addr); @@ -260,7 +266,7 @@ impl Server { addr: addr.clone(), stream: Some(stream), id, - stats: Stats::connect(id, addr, ¶ms, &options, &cfg.config.memory), + stats: Stats::connect(id, addr, ¶ms, &options, &config.config.memory), replication_mode: options.replication_mode(), params, changed_params: Parameters::default(), @@ -275,7 +281,7 @@ impl Server { re_synced: false, sending_request: false, pooler_mode: PoolerMode::Transaction, - stream_buffer: MessageBuffer::new(cfg.config.memory.message_buffer), + stream_buffer: MessageBuffer::new(config.config.memory.message_buffer), disconnect_reason: None, }; diff --git a/pgdog/src/frontend/listener.rs b/pgdog/src/frontend/listener.rs index 250ec653..204059cd 100644 --- a/pgdog/src/frontend/listener.rs +++ b/pgdog/src/frontend/listener.rs @@ -154,9 +154,17 @@ impl Listener { } async fn handle_client(stream: TcpStream, addr: SocketAddr) -> Result<(), Error> { - tweak(&stream)?; let config = config(); + // Not the end of the world if the tweaks are + // not applied. + if let Err(err) = tweak(&stream, &config.config.tcp) { + warn!( + "keepalive settings ({}) are not supported on this system, ignoring, error: {} [{}]", + config.config.tcp, err, addr + ); + } + let mut stream = Stream::plain(stream, config.config.memory.net_buffer); let tls = acceptor(); diff --git a/pgdog/src/net/tweaks.rs b/pgdog/src/net/tweaks.rs index b63ec08b..3d0c6d9d 100644 --- a/pgdog/src/net/tweaks.rs +++ b/pgdog/src/net/tweaks.rs @@ -1,14 +1,10 @@ use std::io::Result; +use pgdog_config::Tcp; use socket2::{SockRef, TcpKeepalive}; use tokio::net::TcpStream; -use crate::config::config; - -pub fn tweak(socket: &TcpStream) -> Result<()> { - let config = config(); - let config = &config.config.tcp; - +pub fn tweak(socket: &TcpStream, config: &Tcp) -> Result<()> { // Disable the Nagle algorithm. socket.set_nodelay(true)?;