pgdog.git / summary / log / commit / refs
commit f429215273d1ea1fcfbdac3de104f10e67d670ca
Author: Lev Kokotov <levkk@users.noreply.github.com>
Commit: GitHub <noreply@github.com>
Date: Thu Mar 26 04:45:03 2026 +0000
feat: invalid keep-alive settings are a warning now (#856)
Instead of crashing, invalid TCP keep-alive settings produce a warning
now.
pgdog-config/src/networking.rs | 2 +-
pgdog/src/backend/server.rs | 22 ++++++++++++++--------
pgdog/src/frontend/listener.rs | 10 +++++++++-
pgdog/src/net/tweaks.rs | 8 ++------
4 files changed, 26 insertions(+), 16 deletions(-)
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<Self, Error> {
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)?;
[parent: bad1471c7966]