Skip to content

Commit 9d3e178

Browse files
committed
cluster: implement cass_cluster_set_timestamp_gen
1 parent ee4a9b9 commit 9d3e178

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed

scylla-rust-wrapper/src/cluster.rs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use crate::future::CassFuture;
66
use crate::retry_policy::CassRetryPolicy;
77
use crate::retry_policy::RetryPolicy::*;
88
use crate::ssl::CassSsl;
9+
use crate::timestamp_generator::CassTimestampGen;
910
use crate::types::*;
1011
use crate::uuid::CassUuid;
1112
use openssl::ssl::SslContextBuilder;
@@ -19,6 +20,7 @@ use scylla::policies::load_balancing::{
1920
};
2021
use scylla::policies::retry::RetryPolicy;
2122
use scylla::policies::speculative_execution::SimpleSpeculativeExecutionPolicy;
23+
use scylla::policies::timestamp_generator::TimestampGenerator;
2224
use scylla::routing::ShardAwarePortRange;
2325
use scylla::statement::{Consistency, SerialConsistency};
2426
use std::collections::HashMap;
@@ -466,6 +468,33 @@ pub unsafe extern "C" fn cass_cluster_set_tcp_keepalive(
466468
cluster.session_builder.config.tcp_keepalive_interval = tcp_keepalive_interval;
467469
}
468470

471+
#[unsafe(no_mangle)]
472+
pub unsafe extern "C" fn cass_cluster_set_timestamp_gen(
473+
cluster_raw: CassBorrowedExclusivePtr<CassCluster, CMut>,
474+
timestamp_gen_raw: CassBorrowedSharedPtr<CassTimestampGen, CMut>,
475+
) {
476+
let Some(cluster) = BoxFFI::as_mut_ref(cluster_raw) else {
477+
tracing::error!("Provided null cluster pointer to cass_cluster_set_timestamp_gen!");
478+
return;
479+
};
480+
let Some(timestamp_gen) = BoxFFI::as_ref(timestamp_gen_raw) else {
481+
tracing::error!(
482+
"Provided null timestamp generator pointer to cass_cluster_set_timestamp_gen!"
483+
);
484+
return;
485+
};
486+
487+
let rust_timestamp_gen: Option<Arc<dyn TimestampGenerator>> = match timestamp_gen {
488+
// In rust-driver, `None` is equivalent to using server-side timestamp generator.
489+
CassTimestampGen::ServerSide => None,
490+
CassTimestampGen::Monotonic(monotonic_timestamp_generator) => {
491+
Some(Arc::clone(monotonic_timestamp_generator) as _)
492+
}
493+
};
494+
495+
cluster.session_builder.config.timestamp_generator = rust_timestamp_gen;
496+
}
497+
469498
#[unsafe(no_mangle)]
470499
pub unsafe extern "C" fn cass_cluster_set_connection_heartbeat_interval(
471500
cluster_raw: CassBorrowedExclusivePtr<CassCluster, CMut>,

0 commit comments

Comments
 (0)