Skip to content

Commit 720fdad

Browse files
authored
Merge pull request #151 from muzarski/default_client_request_timeout
cluster: global request client timeout
2 parents c7bb334 + 2376852 commit 720fdad

File tree

2 files changed

+22
-8
lines changed

2 files changed

+22
-8
lines changed

scylla-rust-wrapper/src/cluster.rs

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@ use std::time::Duration;
2626

2727
include!(concat!(env!("OUT_DIR"), "/cppdriver_compression_types.rs"));
2828

29+
// According to `cassandra.h` the default CPP driver's
30+
// - consistency for statements is LOCAL_ONE,
31+
// - request client timeout is 12000 millis.
32+
const DEFAULT_CONSISTENCY: Consistency = Consistency::LocalOne;
33+
const DEFAULT_REQUEST_TIMEOUT_MILLIS: u64 = 12000;
34+
2935
#[derive(Clone, Debug)]
3036
pub(crate) struct LoadBalancingConfig {
3137
pub(crate) token_awareness_enabled: bool,
@@ -115,9 +121,9 @@ pub fn build_session_builder(
115121

116122
#[no_mangle]
117123
pub unsafe extern "C" fn cass_cluster_new() -> *mut CassCluster {
118-
// According to `cassandra.h` the default CPP driver's consistency for statements is LOCAL_ONE.
119-
let default_execution_profile_builder =
120-
ExecutionProfileBuilder::default().consistency(Consistency::LocalOne);
124+
let default_execution_profile_builder = ExecutionProfileBuilder::default()
125+
.consistency(DEFAULT_CONSISTENCY)
126+
.request_timeout(Some(Duration::from_millis(DEFAULT_REQUEST_TIMEOUT_MILLIS)));
121127

122128
Box::into_raw(Box::new(CassCluster {
123129
session_builder: SessionBuilder::new(),
@@ -224,6 +230,19 @@ pub unsafe extern "C" fn cass_cluster_set_connect_timeout(
224230
cluster.session_builder.config.connect_timeout = Duration::from_millis(timeout_ms.into());
225231
}
226232

233+
#[no_mangle]
234+
pub unsafe extern "C" fn cass_cluster_set_request_timeout(
235+
cluster_raw: *mut CassCluster,
236+
timeout_ms: c_uint,
237+
) {
238+
let cluster = ptr_to_ref_mut(cluster_raw);
239+
240+
exec_profile_builder_modify(&mut cluster.default_execution_profile_builder, |builder| {
241+
// 0 -> no timeout
242+
builder.request_timeout((timeout_ms > 0).then(|| Duration::from_millis(timeout_ms.into())))
243+
})
244+
}
245+
227246
#[no_mangle]
228247
pub unsafe extern "C" fn cass_cluster_set_port(
229248
cluster_raw: *mut CassCluster,

src/testing_unimplemented.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -131,11 +131,6 @@ cass_cluster_set_prepare_on_up_or_add_host(CassCluster* cluster,
131131
throw std::runtime_error("UNIMPLEMENTED cass_cluster_set_prepare_on_up_or_add_host\n");
132132
}
133133
CASS_EXPORT void
134-
cass_cluster_set_request_timeout(CassCluster* cluster,
135-
unsigned timeout_ms){
136-
throw std::runtime_error("UNIMPLEMENTED cass_cluster_set_request_timeout\n");
137-
}
138-
CASS_EXPORT void
139134
cass_cluster_set_retry_policy(CassCluster* cluster,
140135
CassRetryPolicy* retry_policy){
141136
throw std::runtime_error("UNIMPLEMENTED cass_cluster_set_retry_policy\n");

0 commit comments

Comments
 (0)