Skip to content

Commit f429215

Browse files
authored
feat: invalid keep-alive settings are a warning now (#856)
Instead of crashing, invalid TCP keep-alive settings produce a warning now.
1 parent bad1471 commit f429215

4 files changed

Lines changed: 26 additions & 16 deletions

File tree

pgdog-config/src/networking.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ impl std::fmt::Display for Tcp {
100100
if let Some(ref c) = self.congestion_control {
101101
c.as_str()
102102
} else {
103-
""
103+
"default"
104104
},
105105
)
106106
}

pgdog/src/backend/server.rs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -90,12 +90,18 @@ impl Server {
9090
) -> Result<Self, Error> {
9191
debug!("=> {}", addr);
9292
let stream = TcpStream::connect(addr.addr().await?).await?;
93-
tweak(&stream)?;
94-
let cfg = config();
93+
let config = config();
9594

96-
let mut stream = Stream::plain(stream, cfg.config.memory.net_buffer);
95+
if let Err(err) = tweak(&stream, &config.config.tcp) {
96+
warn!(
97+
"keepalive settings ({}) are not supported on this system, ignoring, error: {} [{}]",
98+
config.config.tcp, err, addr,
99+
);
100+
}
101+
102+
let mut stream = Stream::plain(stream, config.config.memory.net_buffer);
97103

98-
let tls_mode = cfg.config.general.tls_verify;
104+
let tls_mode = config.config.general.tls_verify;
99105

100106
// Only attempt TLS if not in Disabled mode
101107
if tls_mode != TlsVerifyMode::Disabled {
@@ -117,7 +123,7 @@ impl Server {
117123

118124
let connector = connector_with_verify_mode(
119125
tls_mode,
120-
cfg.config.general.tls_server_ca_certificate.as_ref(),
126+
config.config.general.tls_server_ca_certificate.as_ref(),
121127
)?;
122128
let plain = stream.take()?;
123129

@@ -128,7 +134,7 @@ impl Server {
128134
Ok(tls_stream) => {
129135
debug!("TLS handshake successful with {}", addr.host);
130136
let cipher = tokio_rustls::TlsStream::Client(tls_stream);
131-
stream = Stream::tls(cipher, cfg.config.memory.net_buffer);
137+
stream = Stream::tls(cipher, config.config.memory.net_buffer);
132138
}
133139
Err(e) => {
134140
error!("TLS handshake failed with {:?} [{}]", e, addr);
@@ -260,7 +266,7 @@ impl Server {
260266
addr: addr.clone(),
261267
stream: Some(stream),
262268
id,
263-
stats: Stats::connect(id, addr, &params, &options, &cfg.config.memory),
269+
stats: Stats::connect(id, addr, &params, &options, &config.config.memory),
264270
replication_mode: options.replication_mode(),
265271
params,
266272
changed_params: Parameters::default(),
@@ -275,7 +281,7 @@ impl Server {
275281
re_synced: false,
276282
sending_request: false,
277283
pooler_mode: PoolerMode::Transaction,
278-
stream_buffer: MessageBuffer::new(cfg.config.memory.message_buffer),
284+
stream_buffer: MessageBuffer::new(config.config.memory.message_buffer),
279285
disconnect_reason: None,
280286
};
281287

pgdog/src/frontend/listener.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,9 +154,17 @@ impl Listener {
154154
}
155155

156156
async fn handle_client(stream: TcpStream, addr: SocketAddr) -> Result<(), Error> {
157-
tweak(&stream)?;
158157
let config = config();
159158

159+
// Not the end of the world if the tweaks are
160+
// not applied.
161+
if let Err(err) = tweak(&stream, &config.config.tcp) {
162+
warn!(
163+
"keepalive settings ({}) are not supported on this system, ignoring, error: {} [{}]",
164+
config.config.tcp, err, addr
165+
);
166+
}
167+
160168
let mut stream = Stream::plain(stream, config.config.memory.net_buffer);
161169

162170
let tls = acceptor();

pgdog/src/net/tweaks.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
11
use std::io::Result;
22

3+
use pgdog_config::Tcp;
34
use socket2::{SockRef, TcpKeepalive};
45
use tokio::net::TcpStream;
56

6-
use crate::config::config;
7-
8-
pub fn tweak(socket: &TcpStream) -> Result<()> {
9-
let config = config();
10-
let config = &config.config.tcp;
11-
7+
pub fn tweak(socket: &TcpStream, config: &Tcp) -> Result<()> {
128
// Disable the Nagle algorithm.
139
socket.set_nodelay(true)?;
1410

0 commit comments

Comments
 (0)