@@ -12,7 +12,7 @@ use openssl::ssl::SslContextBuilder;
1212use openssl_sys:: SSL_CTX_up_ref ;
1313use scylla:: client:: execution_profile:: ExecutionProfileBuilder ;
1414use scylla:: client:: session_builder:: SessionBuilder ;
15- use scylla:: client:: { SelfIdentity , WriteCoalescingDelay } ;
15+ use scylla:: client:: { PoolSize , SelfIdentity , WriteCoalescingDelay } ;
1616use scylla:: frame:: Compression ;
1717use scylla:: policies:: load_balancing:: {
1818 DefaultPolicyBuilder , LatencyAwarenessBuilder , LoadBalancingPolicy ,
@@ -25,7 +25,7 @@ use std::collections::HashMap;
2525use std:: convert:: TryInto ;
2626use std:: future:: Future ;
2727use std:: net:: IpAddr ;
28- use std:: num:: NonZero ;
28+ use std:: num:: { NonZero , NonZeroUsize } ;
2929use std:: os:: raw:: { c_char, c_int, c_uint} ;
3030use std:: str:: FromStr ;
3131use std:: sync:: Arc ;
@@ -47,6 +47,8 @@ const DEFAULT_MAX_SCHEMA_WAIT_TIME: Duration = Duration::from_millis(10000);
4747const DEFAULT_SCHEMA_AGREEMENT_INTERVAL : Duration = Duration :: from_millis ( 200 ) ;
4848// - setting TCP_NODELAY is true
4949const DEFAULT_SET_TCP_NO_DELAY : bool = true ;
50+ // - connection pool size is 1 per shard
51+ const DEFAULT_CONNECTION_POOL_SIZE : PoolSize = PoolSize :: PerShard ( NonZeroUsize :: new ( 1 ) . unwrap ( ) ) ;
5052// - enabling write coalescing
5153const DEFAULT_ENABLE_WRITE_COALESCING : bool = true ;
5254// - write coalescing delay
@@ -234,6 +236,7 @@ pub unsafe extern "C" fn cass_cluster_new() -> CassOwnedExclusivePtr<CassCluster
234236 . schema_agreement_interval ( DEFAULT_SCHEMA_AGREEMENT_INTERVAL )
235237 . tcp_nodelay ( DEFAULT_SET_TCP_NO_DELAY )
236238 . connection_timeout ( DEFAULT_CONNECT_TIMEOUT )
239+ . pool_size ( DEFAULT_CONNECTION_POOL_SIZE )
237240 . write_coalescing ( DEFAULT_ENABLE_WRITE_COALESCING )
238241 . write_coalescing_delay ( DEFAULT_WRITE_COALESCING_DELAY )
239242 . keepalive_interval ( DEFAULT_KEEPALIVE_INTERVAL )
@@ -454,6 +457,59 @@ pub unsafe extern "C" fn cass_cluster_set_connect_timeout(
454457 cluster. session_builder . config . connect_timeout = Duration :: from_millis ( timeout_ms. into ( ) ) ;
455458}
456459
460+ #[ unsafe( no_mangle) ]
461+ pub unsafe extern "C" fn cass_cluster_set_core_connections_per_host (
462+ cluster_raw : CassBorrowedExclusivePtr < CassCluster , CMut > ,
463+ num_connections : c_uint ,
464+ ) -> CassError {
465+ let Some ( cluster) = BoxFFI :: as_mut_ref ( cluster_raw) else {
466+ tracing:: error!(
467+ "Provided null cluster pointer to cass_cluster_set_core_connections_per_host!"
468+ ) ;
469+ return CassError :: CASS_ERROR_LIB_BAD_PARAMS ;
470+ } ;
471+
472+ match NonZeroUsize :: new ( num_connections as usize ) {
473+ Some ( non_zero_conns) => {
474+ cluster. session_builder . config . connection_pool_size = PoolSize :: PerHost ( non_zero_conns) ;
475+ CassError :: CASS_OK
476+ }
477+ None => {
478+ tracing:: error!(
479+ "Provided zero connections to cass_cluster_set_core_connections_per_host!"
480+ ) ;
481+ CassError :: CASS_ERROR_LIB_BAD_PARAMS
482+ }
483+ }
484+ }
485+
486+ #[ unsafe( no_mangle) ]
487+ pub unsafe extern "C" fn cass_cluster_set_core_connections_per_shard (
488+ cluster_raw : CassBorrowedExclusivePtr < CassCluster , CMut > ,
489+ num_connections : c_uint ,
490+ ) -> CassError {
491+ let Some ( cluster) = BoxFFI :: as_mut_ref ( cluster_raw) else {
492+ tracing:: error!(
493+ "Provided null cluster pointer to cass_cluster_set_core_connections_per_shard!"
494+ ) ;
495+ return CassError :: CASS_ERROR_LIB_BAD_PARAMS ;
496+ } ;
497+
498+ match NonZeroUsize :: new ( num_connections as usize ) {
499+ Some ( non_zero_conns) => {
500+ cluster. session_builder . config . connection_pool_size =
501+ PoolSize :: PerShard ( non_zero_conns) ;
502+ CassError :: CASS_OK
503+ }
504+ None => {
505+ tracing:: error!(
506+ "Provided zero connections to cass_cluster_set_core_connections_per_shard!"
507+ ) ;
508+ CassError :: CASS_ERROR_LIB_BAD_PARAMS
509+ }
510+ }
511+ }
512+
457513#[ unsafe( no_mangle) ]
458514pub unsafe extern "C" fn cass_cluster_set_coalesce_delay (
459515 cluster_raw : CassBorrowedExclusivePtr < CassCluster , CMut > ,
0 commit comments