diff --git a/Cargo.toml b/Cargo.toml index 72c4e8f54..1a8c46c82 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -113,7 +113,7 @@ take_mut = "0.2.2" thiserror = "1.0.24" tokio-openssl = { version = "0.6.3", optional = true } tracing = { version = "0.1.36", optional = true } -typed-builder = "0.10.0" +typed-builder = "0.20.0" webpki-roots = "0.26" zstd = { version = "0.11.2", optional = true } macro_magic = "0.5.1" diff --git a/src/selection_criteria.rs b/src/selection_criteria.rs index 4fce8125c..174c6b223 100644 --- a/src/selection_criteria.rs +++ b/src/selection_criteria.rs @@ -140,6 +140,7 @@ impl std::fmt::Display for ReadPreference { if let Some(ref max_staleness) = options.max_staleness { write!(f, ", Max Staleness: {:?}", max_staleness)?; } + #[allow(deprecated)] if let Some(ref hedge) = options.hedge { write!(f, ", Hedge: {}", hedge.enabled)?; } @@ -215,6 +216,7 @@ impl Serialize for ReadPreference { } /// Specifies read preference options for non-primary read preferences. +#[allow(deprecated)] #[serde_with::skip_serializing_none] #[derive(Clone, Debug, Default, Serialize, Deserialize, PartialEq, TypedBuilder)] #[builder(field_defaults(default, setter(into)))] @@ -241,15 +243,21 @@ pub struct ReadPreferenceOptions { /// Specifies hedging behavior for reads. These options only apply to sharded clusters on /// servers that are at least version 4.4. Note that hedged reads are automatically enabled for - /// read preference mode "nearest". + /// read preference mode "nearest" on server versions less than 8.0. /// /// See the [MongoDB docs](https://www.mongodb.com/docs/manual/core/read-preference-hedge-option/) for more details. + #[deprecated( + note = "hedged reads are deprecated as of MongoDB 8.0 and will be removed in a future \ + server version" + )] pub hedge: Option, } impl ReadPreferenceOptions { pub(crate) fn is_default(&self) -> bool { - self.hedge.is_none() + #[allow(deprecated)] + let hedge = self.hedge.is_some(); + !hedge && self.max_staleness.is_none() && self .tag_sets @@ -354,6 +362,7 @@ mod test { #[test] fn hedged_read_included_in_document() { + #[allow(deprecated)] let options = Some( ReadPreferenceOptions::builder() .hedge(HedgedReadOptions { enabled: true }) diff --git a/src/test/spec/trace.rs b/src/test/spec/trace.rs index ce2385de7..9f2820922 100644 --- a/src/test/spec/trace.rs +++ b/src/test/spec/trace.rs @@ -422,6 +422,7 @@ fn selection_criteria_tracing_representation() { "ReadPreference { Mode: PrimaryPreferred, Max Staleness: 200ms }" ); + #[allow(deprecated)] let opts_with_hedge = Some( ReadPreferenceOptions::builder() .hedge(HedgedReadOptions::builder().enabled(true).build()) diff --git a/src/test/spec/unified_runner/test_file.rs b/src/test/spec/unified_runner/test_file.rs index 8d68caf66..50c1a259f 100644 --- a/src/test/spec/unified_runner/test_file.rs +++ b/src/test/spec/unified_runner/test_file.rs @@ -639,8 +639,10 @@ fn deserialize_selection_criteria() { options: Some(options), } => { assert_eq!(options.max_staleness, Some(Duration::from_secs(100))); + #[allow(deprecated)] + let hedge = options.hedge; assert_eq!( - options.hedge, + hedge, Some(HedgedReadOptions::builder().enabled(true).build()) ); }