Skip to content

Commit 6cf974a

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 ee7064f commit 6cf974a

File tree

3 files changed

+44
-1
lines changed

3 files changed

+44
-1
lines changed

include/cassandra.h

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3097,6 +3097,27 @@ CASS_EXPORT void
30973097
cass_cluster_set_compression(CassCluster* cluster,
30983098
CassCompressionType compression_type);
30993099

3100+
/**
3101+
* Sets the server-side timeout for metadata queries.
3102+
*
3103+
* It means that all metadata queries will be set the given timeout
3104+
* no matter what timeout is set as a cluster default.
3105+
* This prevents timeouts of schema queries when the schema is large
3106+
* and the default timeout is configured as tight.
3107+
*
3108+
* <b>Default:</b> 2 seconds.
3109+
*
3110+
* @public @memberof CassCluster
3111+
*
3112+
* @param[in] cluster
3113+
* @param[in] timeout_ms Request timeout in milliseconds. Pass 0 to use cluster default timeout.
3114+
*/
3115+
CASS_EXPORT void
3116+
cass_cluster_set_metadata_request_serverside_timeout(CassCluster* cluster,
3117+
cass_duration_t timeout_ms);
3118+
3119+
3120+
31003121
/***********************************************************************************
31013122
*
31023123
* 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: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1531,6 +1531,27 @@ pub unsafe extern "C" fn cass_cluster_set_execution_profile_n(
15311531
CassError::CASS_OK
15321532
}
15331533

1534+
#[unsafe(no_mangle)]
1535+
pub unsafe extern "C" fn cass_cluster_set_metadata_request_serverside_timeout(
1536+
cluster: CassBorrowedExclusivePtr<CassCluster, CMut>,
1537+
timeout_ms: cass_duration_t,
1538+
) {
1539+
let Some(cluster_from_raw) = BoxFFI::as_mut_ref(cluster) else {
1540+
tracing::error!(
1541+
"Provided null cluster pointer to cass_cluster_set_metadata_request_serverside_timeout!"
1542+
);
1543+
return;
1544+
};
1545+
1546+
let metadata_request_timeout =
1547+
(timeout_ms > 0).then(|| Duration::from_millis(timeout_ms as u64));
1548+
1549+
cluster_from_raw
1550+
.session_builder
1551+
.config
1552+
.metadata_request_serverside_timeout = metadata_request_timeout;
1553+
}
1554+
15341555
#[cfg(test)]
15351556
mod tests {
15361557
use crate::testing::{assert_cass_error_eq, setup_tracing};

0 commit comments

Comments
 (0)