Skip to content

Commit

Permalink
adds keep-alive-interval to repair QUIC transport config (solana-labs…
Browse files Browse the repository at this point in the history
…#33866)

QUIC connections may timeout due to infrequent repair requests. The commit
configures keep_alive_interval and max_idle_timeout to avoid timeouts.
  • Loading branch information
behzadnouri authored Nov 8, 2023
1 parent 7cb83bc commit 3ac2507
Showing 1 changed file with 13 additions and 3 deletions.
16 changes: 13 additions & 3 deletions core/src/repair/quic_endpoint.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ use {
log::error,
quinn::{
ClientConfig, ConnectError, Connecting, Connection, ConnectionError, Endpoint,
EndpointConfig, ReadError, ReadToEndError, RecvStream, SendStream, ServerConfig,
TokioRuntime, TransportConfig, VarInt, WriteError,
EndpointConfig, IdleTimeout, ReadError, ReadToEndError, RecvStream, SendStream,
ServerConfig, TokioRuntime, TransportConfig, VarInt, WriteError,
},
rcgen::RcgenError,
rustls::{Certificate, PrivateKey},
Expand Down Expand Up @@ -46,7 +46,13 @@ const CONNECT_SERVER_NAME: &str = "solana-repair";
const CLIENT_CHANNEL_BUFFER: usize = 1 << 14;
const ROUTER_CHANNEL_BUFFER: usize = 64;
const CONNECTION_CACHE_CAPACITY: usize = 3072;

// Transport config.
// Repair randomly samples peers, uses bi-directional streams and generally has
// low to moderate load and so is configured separately from other protocols.
const KEEP_ALIVE_INTERVAL: Duration = Duration::from_secs(4);
const MAX_CONCURRENT_BIDI_STREAMS: VarInt = VarInt::from_u32(512);
const MAX_IDLE_TIMEOUT: Duration = Duration::from_secs(10);

const CONNECTION_CLOSE_ERROR_CODE_SHUTDOWN: VarInt = VarInt::from_u32(1);
const CONNECTION_CLOSE_ERROR_CODE_DROPPED: VarInt = VarInt::from_u32(2);
Expand Down Expand Up @@ -195,11 +201,15 @@ fn new_client_config(cert: Certificate, key: PrivateKey) -> Result<ClientConfig,
}

fn new_transport_config() -> TransportConfig {
let max_idle_timeout = IdleTimeout::try_from(MAX_IDLE_TIMEOUT).unwrap();
let mut config = TransportConfig::default();
// Disable datagrams and uni streams.
config
.datagram_receive_buffer_size(None)
.keep_alive_interval(Some(KEEP_ALIVE_INTERVAL))
.max_concurrent_bidi_streams(MAX_CONCURRENT_BIDI_STREAMS)
.max_concurrent_uni_streams(VarInt::from(0u8))
.datagram_receive_buffer_size(None);
.max_idle_timeout(Some(max_idle_timeout));
config
}

Expand Down

0 comments on commit 3ac2507

Please sign in to comment.