Skip to content

Commit 4e1969c

Browse files
RUST-2167 Deprecate hedged reads (#1330)
1 parent 3315a74 commit 4e1969c

File tree

4 files changed

+16
-4
lines changed

4 files changed

+16
-4
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ take_mut = "0.2.2"
113113
thiserror = "1.0.24"
114114
tokio-openssl = { version = "0.6.3", optional = true }
115115
tracing = { version = "0.1.36", optional = true }
116-
typed-builder = "0.10.0"
116+
typed-builder = "0.20.0"
117117
webpki-roots = "0.26"
118118
zstd = { version = "0.11.2", optional = true }
119119
macro_magic = "0.5.1"

src/selection_criteria.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ impl std::fmt::Display for ReadPreference {
140140
if let Some(ref max_staleness) = options.max_staleness {
141141
write!(f, ", Max Staleness: {:?}", max_staleness)?;
142142
}
143+
#[allow(deprecated)]
143144
if let Some(ref hedge) = options.hedge {
144145
write!(f, ", Hedge: {}", hedge.enabled)?;
145146
}
@@ -215,6 +216,7 @@ impl Serialize for ReadPreference {
215216
}
216217

217218
/// Specifies read preference options for non-primary read preferences.
219+
#[allow(deprecated)]
218220
#[serde_with::skip_serializing_none]
219221
#[derive(Clone, Debug, Default, Serialize, Deserialize, PartialEq, TypedBuilder)]
220222
#[builder(field_defaults(default, setter(into)))]
@@ -241,15 +243,21 @@ pub struct ReadPreferenceOptions {
241243

242244
/// Specifies hedging behavior for reads. These options only apply to sharded clusters on
243245
/// servers that are at least version 4.4. Note that hedged reads are automatically enabled for
244-
/// read preference mode "nearest".
246+
/// read preference mode "nearest" on server versions less than 8.0.
245247
///
246248
/// See the [MongoDB docs](https://www.mongodb.com/docs/manual/core/read-preference-hedge-option/) for more details.
249+
#[deprecated(
250+
note = "hedged reads are deprecated as of MongoDB 8.0 and will be removed in a future \
251+
server version"
252+
)]
247253
pub hedge: Option<HedgedReadOptions>,
248254
}
249255

250256
impl ReadPreferenceOptions {
251257
pub(crate) fn is_default(&self) -> bool {
252-
self.hedge.is_none()
258+
#[allow(deprecated)]
259+
let hedge = self.hedge.is_some();
260+
!hedge
253261
&& self.max_staleness.is_none()
254262
&& self
255263
.tag_sets
@@ -354,6 +362,7 @@ mod test {
354362

355363
#[test]
356364
fn hedged_read_included_in_document() {
365+
#[allow(deprecated)]
357366
let options = Some(
358367
ReadPreferenceOptions::builder()
359368
.hedge(HedgedReadOptions { enabled: true })

src/test/spec/trace.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,7 @@ fn selection_criteria_tracing_representation() {
422422
"ReadPreference { Mode: PrimaryPreferred, Max Staleness: 200ms }"
423423
);
424424

425+
#[allow(deprecated)]
425426
let opts_with_hedge = Some(
426427
ReadPreferenceOptions::builder()
427428
.hedge(HedgedReadOptions::builder().enabled(true).build())

src/test/spec/unified_runner/test_file.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -639,8 +639,10 @@ fn deserialize_selection_criteria() {
639639
options: Some(options),
640640
} => {
641641
assert_eq!(options.max_staleness, Some(Duration::from_secs(100)));
642+
#[allow(deprecated)]
643+
let hedge = options.hedge;
642644
assert_eq!(
643-
options.hedge,
645+
hedge,
644646
Some(HedgedReadOptions::builder().enabled(true).build())
645647
);
646648
}

0 commit comments

Comments
 (0)