Skip to content

Commit 0cffbee

Browse files
committed
sbuilder: add hostname_resolution_timeout option
This option is responsible for setting the DNS hostname resolution timeout. The default timeout is set to 5 seconds.
1 parent 7710af0 commit 0cffbee

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

scylla/src/transport/session.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,10 @@ pub struct SessionConfig {
300300
/// It is true by default but can be disabled if successive schema-altering statements should be performed.
301301
pub refresh_metadata_on_auto_schema_agreement: bool,
302302

303+
/// DNS hostname resolution timeout.
304+
/// If `None`, the driver will wait for hostname resolution indefinitely.
305+
pub hostname_resolution_timeout: Option<Duration>,
306+
303307
/// The address translator is used to translate addresses received from ScyllaDB nodes
304308
/// (either with cluster metadata or with an event) to addresses that can be used to
305309
/// actually connect to those nodes. This may be needed e.g. when there is NAT
@@ -380,6 +384,7 @@ impl SessionConfig {
380384
ssl_context: None,
381385
authenticator: None,
382386
connect_timeout: Duration::from_secs(5),
387+
hostname_resolution_timeout: Some(Duration::from_secs(5)),
383388
connection_pool_size: Default::default(),
384389
disallow_shard_aware_port: false,
385390
keyspaces_to_fetch: Vec::new(),

scylla/src/transport/session_builder.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -806,6 +806,27 @@ impl<K: SessionBuilderKind> GenericSessionBuilder<K> {
806806
self
807807
}
808808

809+
/// Changes DNS hostname resolution timeout.
810+
/// The default is 5 seconds.
811+
///
812+
/// # Example
813+
/// ```
814+
/// # use scylla::{Session, SessionBuilder};
815+
/// # use std::time::Duration;
816+
/// # async fn example() -> Result<(), Box<dyn std::error::Error>> {
817+
/// let session: Session = SessionBuilder::new()
818+
/// .known_node("127.0.0.1:9042")
819+
/// .hostname_resolution_timeout(Duration::from_secs(10))
820+
/// .build() // Turns SessionBuilder into Session
821+
/// .await?;
822+
/// # Ok(())
823+
/// # }
824+
/// ```
825+
pub fn hostname_resolution_timeout(mut self, duration: Duration) -> Self {
826+
self.config.hostname_resolution_timeout = Some(duration);
827+
self
828+
}
829+
809830
/// Sets the host filter. The host filter decides whether any connections
810831
/// should be opened to the node or not. The driver will also avoid
811832
/// those nodes when re-establishing the control connection.

0 commit comments

Comments
 (0)