Skip to content

Commit 59a11f6

Browse files
committed
implement API to specify metadata request timeout
This commit adds a new API function to the driver: `cass_cluster_set_metadata_request_serverside_timeout`. This function allows users to set a server-side timeout for metadata queries, which is particularly useful for large schemas where the default timeout may be too tight. The default timeout is set to 2 seconds (as in Rust Driver), and users can pass 0 to use the cluster's default timeout. This simply exposes the existing Rust Driver's API. Fixes: #172
1 parent 96962f7 commit 59a11f6

File tree

3 files changed

+43
-1
lines changed

3 files changed

+43
-1
lines changed

include/cassandra.h

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3124,6 +3124,27 @@ CASS_EXPORT void
31243124
cass_cluster_set_compression(CassCluster* cluster,
31253125
CassCompressionType compression_type);
31263126

3127+
/**
3128+
* Sets the server-side timeout for metadata queries.
3129+
*
3130+
* It means that all metadata queries will be set the given timeout
3131+
* no matter what timeout is set as a cluster default.
3132+
* This prevents timeouts of schema queries when the schema is large
3133+
* and the default timeout is configured as tight.
3134+
*
3135+
* <b>Default:</b> 2 seconds.
3136+
*
3137+
* @public @memberof CassCluster
3138+
*
3139+
* @param[in] cluster
3140+
* @param[in] timeout_ms Request timeout in milliseconds. Pass 0 to use cluster default timeout.
3141+
*/
3142+
CASS_EXPORT void
3143+
cass_cluster_set_metadata_request_serverside_timeout(CassCluster* cluster,
3144+
cass_duration_t timeout_ms);
3145+
3146+
3147+
31273148
/***********************************************************************************
31283149
*
31293150
* Session

scylla-rust-wrapper/src/api.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,9 @@ pub mod cluster {
9898
// cass_cluster_set_max_connections_per_host, UNIMPLEMENTED
9999
// cass_cluster_set_max_requests_per_flush, UNIMPLEMENTED
100100
// cass_cluster_set_max_reusable_write_objects, UNIMPLEMENTED
101-
// cass_cluster_set_monitor_reporting_interval, UNIMPLEMENTED
102101
cass_cluster_set_max_schema_wait_time,
102+
cass_cluster_set_metadata_request_serverside_timeout,
103+
// cass_cluster_set_monitor_reporting_interval, UNIMPLEMENTED
103104
// cass_cluster_set_new_request_ratio, UNIMPLEMENTED
104105
// cass_cluster_set_no_compact, UNIMPLEMENTED
105106
cass_cluster_set_no_speculative_execution_policy,

scylla-rust-wrapper/src/cluster.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1570,6 +1570,26 @@ pub unsafe extern "C" fn cass_cluster_set_num_threads_io(
15701570
CassError::CASS_OK
15711571
}
15721572

1573+
#[unsafe(no_mangle)]
1574+
pub unsafe extern "C" fn cass_cluster_set_metadata_request_serverside_timeout(
1575+
cluster: CassBorrowedExclusivePtr<CassCluster, CMut>,
1576+
timeout_ms: cass_duration_t,
1577+
) {
1578+
let Some(cluster_from_raw) = BoxFFI::as_mut_ref(cluster) else {
1579+
tracing::error!(
1580+
"Provided null cluster pointer to cass_cluster_set_metadata_request_serverside_timeout!"
1581+
);
1582+
return;
1583+
};
1584+
1585+
let metadata_request_timeout = (timeout_ms > 0).then(|| Duration::from_millis(timeout_ms));
1586+
1587+
cluster_from_raw
1588+
.session_builder
1589+
.config
1590+
.metadata_request_serverside_timeout = metadata_request_timeout;
1591+
}
1592+
15731593
#[cfg(test)]
15741594
mod tests {
15751595
use crate::testing::{assert_cass_error_eq, setup_tracing};

0 commit comments

Comments
 (0)