From de70c92a1605c5a84ca88f7fc9143344157e88e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Uzarski?= Date: Thu, 24 Oct 2024 13:16:15 +0200 Subject: [PATCH 1/2] cluster: cass_cluster_set_max_schema_wait_time Set the default value for schema agreement timeout (10k millis), and implemented `cass_cluster_set_max_schema_wait_time`. --- scylla-rust-wrapper/src/cluster.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/scylla-rust-wrapper/src/cluster.rs b/scylla-rust-wrapper/src/cluster.rs index d11a3d44..232cce2a 100644 --- a/scylla-rust-wrapper/src/cluster.rs +++ b/scylla-rust-wrapper/src/cluster.rs @@ -35,6 +35,8 @@ const DEFAULT_CONSISTENCY: Consistency = Consistency::LocalOne; const DEFAULT_REQUEST_TIMEOUT: Duration = Duration::from_millis(12000); // - fetching schema metadata is true const DEFAULT_DO_FETCH_SCHEMA_METADATA: bool = true; +// - schema agreement timeout is 10000 millis, +const DEFAULT_MAX_SCHEMA_WAIT_TIME: Duration = Duration::from_millis(10000); // - setting TCP_NODELAY is true const DEFAULT_SET_TCP_NO_DELAY: bool = true; // - connect timeout is 5000 millis @@ -179,6 +181,7 @@ pub unsafe extern "C" fn cass_cluster_new() -> *mut CassCluster { SessionBuilder::new() .custom_identity(custom_identity) .fetch_schema_metadata(DEFAULT_DO_FETCH_SCHEMA_METADATA) + .schema_agreement_timeout(DEFAULT_MAX_SCHEMA_WAIT_TIME) .tcp_nodelay(DEFAULT_SET_TCP_NO_DELAY) .connection_timeout(DEFAULT_CONNECT_TIMEOUT) .keepalive_interval(DEFAULT_KEEPALIVE_INTERVAL) @@ -408,6 +411,17 @@ pub unsafe extern "C" fn cass_cluster_set_request_timeout( }) } +#[no_mangle] +pub unsafe extern "C" fn cass_cluster_set_max_schema_wait_time( + cluster_raw: *mut CassCluster, + wait_time_ms: c_uint, +) { + let cluster = ptr_to_ref_mut(cluster_raw); + + cluster.session_builder.config.schema_agreement_timeout = + Duration::from_millis(wait_time_ms.into()); +} + #[no_mangle] pub unsafe extern "C" fn cass_cluster_set_port( cluster_raw: *mut CassCluster, From 7cb9de38d84f75cfe40eb553adcdb228da3696ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Uzarski?= Date: Thu, 24 Oct 2024 13:23:32 +0200 Subject: [PATCH 2/2] cluster: schema agreement interval This is an extension. Since, rust-driver exposes such config option, nothing stops us from exposing it in cpp-rust-driver as well. The default (200ms) is taken directly from rust-driver. Defined and implemented `cass_cluster_set_schema_agreement_interval`. --- include/cassandra.h | 14 ++++++++++++++ scylla-rust-wrapper/src/cluster.rs | 15 +++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/include/cassandra.h b/include/cassandra.h index 3eaaded2..c43d5b2e 100644 --- a/include/cassandra.h +++ b/include/cassandra.h @@ -2068,6 +2068,20 @@ CASS_EXPORT void cass_cluster_set_max_schema_wait_time(CassCluster* cluster, unsigned wait_time_ms); +/** + * Set the delay for schema agreement check after a schema change. + * How often driver should ask if schema is in agreement. + * + * Default: 200 milliseconds + * + * @public @memberof CassCluster + * + * @param[in] cluster + * @param[in] interval_ms Interval in milliseconds + */ +CASS_EXPORT void +cass_cluster_set_schema_agreement_interval(CassCluster* cluster, + unsigned interval_ms); /** * Sets the maximum time to wait for tracing data to become available. diff --git a/scylla-rust-wrapper/src/cluster.rs b/scylla-rust-wrapper/src/cluster.rs index 232cce2a..97d2ad2c 100644 --- a/scylla-rust-wrapper/src/cluster.rs +++ b/scylla-rust-wrapper/src/cluster.rs @@ -37,6 +37,9 @@ const DEFAULT_REQUEST_TIMEOUT: Duration = Duration::from_millis(12000); const DEFAULT_DO_FETCH_SCHEMA_METADATA: bool = true; // - schema agreement timeout is 10000 millis, const DEFAULT_MAX_SCHEMA_WAIT_TIME: Duration = Duration::from_millis(10000); +// - schema agreement interval is 200 millis. +// This default is taken from rust-driver, since this option is an extension to cpp-rust-driver. +const DEFAULT_SCHEMA_AGREEMENT_INTERVAL: Duration = Duration::from_millis(200); // - setting TCP_NODELAY is true const DEFAULT_SET_TCP_NO_DELAY: bool = true; // - connect timeout is 5000 millis @@ -182,6 +185,7 @@ pub unsafe extern "C" fn cass_cluster_new() -> *mut CassCluster { .custom_identity(custom_identity) .fetch_schema_metadata(DEFAULT_DO_FETCH_SCHEMA_METADATA) .schema_agreement_timeout(DEFAULT_MAX_SCHEMA_WAIT_TIME) + .schema_agreement_interval(DEFAULT_SCHEMA_AGREEMENT_INTERVAL) .tcp_nodelay(DEFAULT_SET_TCP_NO_DELAY) .connection_timeout(DEFAULT_CONNECT_TIMEOUT) .keepalive_interval(DEFAULT_KEEPALIVE_INTERVAL) @@ -422,6 +426,17 @@ pub unsafe extern "C" fn cass_cluster_set_max_schema_wait_time( Duration::from_millis(wait_time_ms.into()); } +#[no_mangle] +pub unsafe extern "C" fn cass_cluster_set_schema_agreement_interval( + cluster_raw: *mut CassCluster, + interval_ms: c_uint, +) { + let cluster = ptr_to_ref_mut(cluster_raw); + + cluster.session_builder.config.schema_agreement_interval = + Duration::from_millis(interval_ms.into()); +} + #[no_mangle] pub unsafe extern "C" fn cass_cluster_set_port( cluster_raw: *mut CassCluster,