@@ -28,11 +28,21 @@ use std::time::Duration;
28
28
29
29
use crate :: cass_compression_types:: CassCompressionType ;
30
30
31
- // According to `cassandra.h` the default CPP driver's
31
+ // According to `cassandra.h` the defaults for
32
32
// - consistency for statements is LOCAL_ONE,
33
- // - request client timeout is 12000 millis.
34
33
const DEFAULT_CONSISTENCY : Consistency = Consistency :: LocalOne ;
35
- const DEFAULT_REQUEST_TIMEOUT_MILLIS : u64 = 12000 ;
34
+ // - request client timeout is 12000 millis,
35
+ const DEFAULT_REQUEST_TIMEOUT : Duration = Duration :: from_millis ( 12000 ) ;
36
+ // - fetching schema metadata is true
37
+ const DEFAULT_DO_FETCH_SCHEMA_METADATA : bool = true ;
38
+ // - setting TCP_NODELAY is true
39
+ const DEFAULT_SET_TCP_NO_DELAY : bool = true ;
40
+ // - connect timeout is 5000 millis
41
+ const DEFAULT_CONNECT_TIMEOUT : Duration = Duration :: from_millis ( 5000 ) ;
42
+ // - keepalive interval is 30 secs
43
+ const DEFAULT_KEEPALIVE_INTERVAL : Duration = Duration :: from_secs ( 30 ) ;
44
+ // - keepalive timeout is 60 secs
45
+ const DEFAULT_KEEPALIVE_TIMEOUT : Duration = Duration :: from_secs ( 60 ) ;
36
46
37
47
const DRIVER_NAME : & str = "ScyllaDB Cpp-Rust Driver" ;
38
48
const DRIVER_VERSION : & str = env ! ( "CARGO_PKG_VERSION" ) ;
@@ -157,15 +167,26 @@ pub fn build_session_builder(
157
167
pub unsafe extern "C" fn cass_cluster_new ( ) -> * mut CassCluster {
158
168
let default_execution_profile_builder = ExecutionProfileBuilder :: default ( )
159
169
. consistency ( DEFAULT_CONSISTENCY )
160
- . request_timeout ( Some ( Duration :: from_millis ( DEFAULT_REQUEST_TIMEOUT_MILLIS ) ) ) ;
161
-
162
- // Set DRIVER_NAME and DRIVER_VERSION of cpp-rust driver.
163
- let custom_identity = SelfIdentity :: new ( )
164
- . with_custom_driver_name ( DRIVER_NAME )
165
- . with_custom_driver_version ( DRIVER_VERSION ) ;
170
+ . request_timeout ( Some ( DEFAULT_REQUEST_TIMEOUT ) ) ;
171
+
172
+ // Default config options - according to cassandra.h
173
+ let default_session_builder = {
174
+ // Set DRIVER_NAME and DRIVER_VERSION of cpp-rust driver.
175
+ let custom_identity = SelfIdentity :: new ( )
176
+ . with_custom_driver_name ( DRIVER_NAME )
177
+ . with_custom_driver_version ( DRIVER_VERSION ) ;
178
+
179
+ SessionBuilder :: new ( )
180
+ . custom_identity ( custom_identity)
181
+ . fetch_schema_metadata ( DEFAULT_DO_FETCH_SCHEMA_METADATA )
182
+ . tcp_nodelay ( DEFAULT_SET_TCP_NO_DELAY )
183
+ . connection_timeout ( DEFAULT_CONNECT_TIMEOUT )
184
+ . keepalive_interval ( DEFAULT_KEEPALIVE_INTERVAL )
185
+ . keepalive_timeout ( DEFAULT_KEEPALIVE_TIMEOUT )
186
+ } ;
166
187
167
188
Box :: into_raw ( Box :: new ( CassCluster {
168
- session_builder : SessionBuilder :: new ( ) . custom_identity ( custom_identity ) ,
189
+ session_builder : default_session_builder ,
169
190
port : 9042 ,
170
191
contact_points : Vec :: new ( ) ,
171
192
// Per DataStax documentation: Without additional configuration the C/C++ driver
@@ -343,6 +364,28 @@ pub unsafe extern "C" fn cass_cluster_set_tcp_keepalive(
343
364
cluster. session_builder . config . tcp_keepalive_interval = tcp_keepalive_interval;
344
365
}
345
366
367
+ #[ no_mangle]
368
+ pub unsafe extern "C" fn cass_cluster_set_connection_heartbeat_interval (
369
+ cluster_raw : * mut CassCluster ,
370
+ interval_secs : c_uint ,
371
+ ) {
372
+ let cluster = ptr_to_ref_mut ( cluster_raw) ;
373
+ let keepalive_interval = ( interval_secs > 0 ) . then ( || Duration :: from_secs ( interval_secs as u64 ) ) ;
374
+
375
+ cluster. session_builder . config . keepalive_interval = keepalive_interval;
376
+ }
377
+
378
+ #[ no_mangle]
379
+ pub unsafe extern "C" fn cass_cluster_set_connection_idle_timeout (
380
+ cluster_raw : * mut CassCluster ,
381
+ timeout_secs : c_uint ,
382
+ ) {
383
+ let cluster = ptr_to_ref_mut ( cluster_raw) ;
384
+ let keepalive_timeout = ( timeout_secs > 0 ) . then ( || Duration :: from_secs ( timeout_secs as u64 ) ) ;
385
+
386
+ cluster. session_builder . config . keepalive_timeout = keepalive_timeout;
387
+ }
388
+
346
389
#[ no_mangle]
347
390
pub unsafe extern "C" fn cass_cluster_set_connect_timeout (
348
391
cluster_raw : * mut CassCluster ,
0 commit comments