Skip to content

Commit 3bec867

Browse files
cleanup constants
1 parent 8cf7dc5 commit 3bec867

File tree

2 files changed

+22
-9
lines changed

2 files changed

+22
-9
lines changed

iroh-relay/src/protos/relay.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,17 @@ const MAX_FRAME_SIZE: usize = 1024 * 1024;
4141
/// The Relay magic number, sent in the FrameType::ClientInfo frame upon initial connection.
4242
const MAGIC: &str = "RELAY🔑";
4343

44+
/// Maximum time for a relay server to respond to a relay protocol ping.
4445
#[cfg(feature = "server")]
45-
pub(crate) const KEEP_ALIVE: Duration = Duration::from_secs(60);
46+
pub(crate) const PING_TIMEOUT: Duration = Duration::from_secs(5);
47+
48+
/// Interval in which we ping the relay server to ensure the connection is alive.
49+
///
50+
/// The default QUIC max_idle_timeout is 30s, so setting that to half this time gives some
51+
/// chance of recovering.
52+
#[cfg(feature = "server")]
53+
pub(crate) const PING_INTERVAL: Duration = Duration::from_secs(15);
54+
4655
/// The number of packets buffered for sending per client
4756
#[cfg(feature = "server")]
4857
pub(crate) const PER_CLIENT_SEND_QUEUE_DEPTH: usize = 512; //32;

iroh-relay/src/server/client.rs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,17 @@ use futures_util::{SinkExt, Stream, StreamExt};
1010
use iroh_base::NodeId;
1111
use iroh_metrics::{inc, inc_by};
1212
use rand::Rng;
13-
use tokio::sync::mpsc::{self, error::TrySendError};
13+
use tokio::{
14+
sync::mpsc::{self, error::TrySendError},
15+
time::MissedTickBehavior,
16+
};
1417
use tokio_util::{sync::CancellationToken, task::AbortOnDropHandle};
1518
use tracing::{debug, error, instrument, trace, warn, Instrument};
1619

1720
use crate::{
1821
protos::{
1922
disco,
20-
relay::{write_frame, Frame, KEEP_ALIVE},
23+
relay::{write_frame, Frame, PING_INTERVAL, PING_TIMEOUT},
2124
},
2225
server::{clients::Clients, metrics::Metrics, streams::RelayedStream, ClientRateLimit},
2326
PingTracker,
@@ -104,7 +107,7 @@ impl Client {
104107
node_id,
105108
connection_id,
106109
clients: clients.clone(),
107-
ping_tracker: PingTracker::new(Duration::from_secs(5)),
110+
ping_tracker: PingTracker::new(PING_TIMEOUT),
108111
};
109112

110113
// start io loop
@@ -227,12 +230,13 @@ impl Actor {
227230
// Add some jitter to ping pong interactions, to avoid all pings being sent at the same time
228231
let next_interval = || {
229232
let random_secs = rand::rngs::OsRng.gen_range(1..=5);
230-
Duration::from_secs(random_secs) + KEEP_ALIVE
233+
Duration::from_secs(random_secs) + PING_INTERVAL
231234
};
232235

233-
let mut keep_alive = tokio::time::interval(next_interval());
236+
let mut ping_interval = tokio::time::interval(next_interval());
234237
// ticks immediately
235-
keep_alive.tick().await;
238+
ping_interval.set_missed_tick_behavior(MissedTickBehavior::Delay);
239+
ping_interval.tick().await;
236240

237241
loop {
238242
tokio::select! {
@@ -267,10 +271,10 @@ impl Actor {
267271
trace!("pong timed out");
268272
break;
269273
}
270-
_ = keep_alive.tick() => {
274+
_ = ping_interval.tick() => {
271275
trace!("keep alive ping");
272276
// new interval
273-
keep_alive.reset_after(next_interval());
277+
ping_interval.reset_after(next_interval());
274278
let data = self.ping_tracker.new_ping();
275279
self.write_frame(Frame::Ping { data }).await?;
276280
}

0 commit comments

Comments
 (0)