Releases: mongodb/mongo-rust-driver
v3.1.0
The MongoDB Rust driver team is pleased to announce the v3.1.0 release of the mongodb
crate, now available for download from crates.io.
This release provides compatibility with MongoDB 8.0, including support for a number of new in-use encryption features.
Full Release Notes
Features
- RUST-1813 Support for more than one KMS provider per type (#1141)
- RUST-1843 Support for QE range protocol V2 (#1132)
- RUST-1845 Support search index type field (#1147)
- RUST-1926 Support range indexes as GA (#1184)
Improvements
- RUST-1994 Implement happy eyeballs for TCP connection (#1183)
- RUST-1791 Publish an event changing topology state to unknown before closing (#1160)
- RUST-1980 Bump dependencies (#1142) (thanks @attila-lin!)
Tasks
v3.0.1
The MongoDB Rust driver team is pleased to announce the v3.0.1 release of the mongodb
crate, now available for download from crates.io.
This release fixes two bugs:
- Aggregations with both explicit sessions and custom types wouldn't compile, and
Collection::watch
didn't use theCollection
's type parameter
Full Release Notes
Bugfixes
v3.0.0
The MongoDB Rust driver team is pleased to announce the v3.0.0 release of the mongodb
crate, now available for download from crates.io.
Highlighted Changes
Breaking Changes
3.0 introduces a wide variety of improvements that required backwards-incompatible API changes; in most cases these changes should require only minor updates in application code.
Most notably:
- Fluent API: Async methods that accepted options have been updated to allow the individual options to be given directly in line with the call to reduce required boilerplate.
- Events: 3.0 introduces the
EventHandler
type, which can be constructed from a callback, async callback, or an async channel sender. - Async Runtime: 3.0 only supports
tokio
; support forasync-std
has been discontinued.
For detailed information on breaking changes and examples of migrating from 2.x to 3.0, please see the migration guide.
Bulk Write
The Rust driver now implements the new Bulk Write specification, which supports performing mixed write operations against multiple namespaces in a minimized number of round-trips to the server. This feature is only available for early testing using MongoDB 8.0 release candidate binaries. This feature is not recommended for use in production until the stable release of MongoDB 8.0.
OIDC Authentication
The Rust driver can now authenticate using an OpenID Connect access token, including support for both the machine and human authentication flows, and automatic token acquisition for Azure and GCP.
Included Changes
Below are a selected list of other changes with user impact; for a full list of changes see this GitHub query.
Breaking Changes
- RUST-1810 Clean up concern helpers (#1011)
- RUST-1603 Support the authorized_collections option (#1033)
- RUST-1876 Require T: Send + Sync for Collection (#1043)
- RUST-1306 Move Compression enum behind compression feature flags (#1055)
- RUST-1563 Make ReadPreferenceOptions optional (#1059)
- RUST-1208 Future-proof features (#1062)
- RUST-1764 Drop human_readable options in favor of HumanReadable (#1064)
- RUST-1695 Use consistent defaults for TypedBuilder (#1072)
- RUST-1364 Collapse comment and comment_bson (#1070)
New Features
- RUST-1652 Add a find_one method to GridFsBucket (#1015)
- RUST-1856 expose Database::client (#1035) (thanks dgrijalva!)
- RUST-1830 Support KMIP delegated protocol (#1115)
Improvements
- chore: bump socket2 to 0.5 (#1020) (thanks attila-lin!)
- chore: move lazy_static to once_cell (#1022) (thanks attila-lin!)
- RUST-1631 Always use polling monitoring when running in a FaaS environment (#1030)
Bugfixes
v3.0.0-beta
The MongoDB Rust driver team is pleased to announce the v3.0.0-beta release of the mongodb
crate, now available for download from crates.io.
Highlighted Changes
Breaking Changes
3.0 introduces a wide variety of improvements that required backwards-incompatible API changes; in most cases these changes should require only minor updates in application code.
Most notably:
- Fluent API: Async methods that accepted options have been updated to allow the individual options to be given directly in line with the call to reduce required boilerplate.
- Events: 3.0 introduces the
EventHandler
type, which can be constructed from a callback, async callback, or an async channel sender. - Async Runtime: 3.0 only supports
tokio
; support forasync-std
has been discontinued.
For detailed information on breaking changes and examples of migrating from 2.x to 3.0, please see the migration guide.
Bulk Write
The Rust driver now implements the new Bulk Write specification, which supports performing mixed write operations against multiple namespaces in a minimized number of round-trips to the server. This feature is only available for early testing using MongoDB 8.0 release candidate binaries. This feature is not recommended for use in production until the stable release of MongoDB 8.0.
OIDC Authentication
The Rust driver can now authenticate using an OpenID Connect access token, including support for both the machine and human authentication flows, and automatic token acquisition for Azure and GCP.
Included Changes
Below are a selected list of other changes with user impact; for a full list of changes see this GitHub query.
Breaking Changes
- RUST-1810 Clean up concern helpers (#1011)
- RUST-1603 Support the authorized_collections option (#1033)
- RUST-1876 Require T: Send + Sync for Collection (#1043)
- RUST-1306 Move Compression enum behind compression feature flags (#1055)
- RUST-1563 Make ReadPreferenceOptions optional (#1059)
- RUST-1208 Future-proof features (#1062)
- RUST-1764 Drop human_readable options in favor of HumanReadable (#1064)
- RUST-1695 Use consistent defaults for TypedBuilder (#1072)
- RUST-1364 Collapse comment and comment_bson (#1070)
New Features
- RUST-1652 Add a find_one method to GridFsBucket (#1015)
- RUST-1856 expose Database::client (#1035) (thanks @dgrijalva!)
- RUST-1830 Support KMIP delegated protocol (#1115)
Improvements
- chore: bump socket2 to 0.5 (#1020) (thanks @attila-lin!)
- chore: move lazy_static to once_cell (#1022) (thanks @attila-lin!)
- RUST-1631 Always use polling monitoring when running in a FaaS environment (#1030)
Bugfixes
v2.8.2
The MongoDB Rust driver team is pleased to announce the v2.8.2 release of the mongodb
crate, now available for download from crates.io.
This release fixes a potential issue when serializing messages.
Full Release Notes
Improvements
Bugfixes
v2.8.1
The MongoDB Rust driver team is pleased to announce the v2.8.1 release of the mongodb
crate, now available for download from crates.io.
This release fixes two bugs:
- on-demand KMS credentials wouldn't work with automatic encryption, and
- initial connection responses from the server could fail to parse under certain circumstances.
Full Release Notes
Bugfixes
v2.8.0
The MongoDB Rust driver team is pleased to announce the v2.8.0 release of the mongodb
crate, now available for download from crates.io.
Highlighted Changes
Search Index Management Helpers
The Collection
type now has the create_search_index
, create_search_indexes
, update_search_index
, drop_search_index
, and list_search_indexes
methods, allowing comprehensive management of search indexes from client code.
Reliability Improvements
More error types will be automatically retried, and retries will avoid mongos backends with network connectivity issues. Also note that the documentation for with_transaction
has been updated to clarify error handling requirements to avoid a deadlock.
Included Changes
Below are a selected list of changes with user impact; for a full list of changes see this GitHub query.
New Features
- RUST-1703 Add docker and kubernetes metrics (#940)
- RUST-1701 Log when CosmosDB or DocumentDB are detected (#958)
- RUST-1707 Add durations to connection pool events (#976)
- RUST-933 Add support for the srvMaxHosts option (#977)
- RUST-1667 Add search index management helpers (#989)
Improvements
- RUST-877 Delay replacement document serialization until
Operation::build
(#942) - RUST-1763 deprecate CollectionOptions::human_readable_serialization (#957)
- RUST-1414 disable causal consistency for implicit sessions (#969)
- RUST-935 direct retries to different mongos (#968)
- docs: remove pointless recommendation (#973) (thanks @cailloumajor!)
- RUST-1780 Bump MSRV to 1.61.0, upgrade ahash to 0.8.5 in
MSRV-Cargo.lock
(#981) (thanks @stIncMale!) - RUST-1676 Simplify GenericCursor by refactoring the
GetMoreProvider
trait into a generic struct (#983) (thanks @stIncMale!) - RUST-1804 Replace async_once with tokio::sync::OnceCell (#992) (thanks @Expyron!)
- RUST-1786 Make ReadConcernMajorityNotAvailableYet a retryable read error (#996)
- RUST-1785 Make ExceededTimeLimit a read-retryable error (#997)
- RUST-1788 Update docs for with_transaction to avoid infinite loop (#998)
Bugfixes
v2.7.1
v2.7.0
The MongoDB Rust driver team is pleased to announce the v2.7.0 release of the mongodb
crate, now available for download from crates.io.
The Rust driver documentation is now hosted at https://www.mongodb.com/docs/drivers/rust/current/. This documentation includes detailed content about features, runnable examples, troubleshooting resources, and more.
Highlighted Changes
Serialization Behavior Change
When serializing values via serde, the serializer can indicate whether or not the target format is human-readable, allowing types to change behavior based on that. The Rust driver had inadvertently been serializing values given to find_one_and_replace
and replace_one
as human-readible when all other methods serialize as non-human-readible; this bug is fixed in 2.7.0, with those methods also serializing as non-human-readible.
However, it is potentially possible (if unlikely) that user code may rely on this bug. If your code does rely on human-readable serialization, you can specify that via the new human_readable_serialization
field in CollectionOptions
.
run_cursor_command
The Rust driver provides the run_command
method as a way for users to directly send bson commands to the server; this is particularly useful when the driver does not yet have support for a newly-added server command. However, using this with commands that return a cursor requires re-implementing the logic for cursor iteration, which can be tedious and error-prone. The new run_cursor_command
method avoids those problems, directly returning a Cursor
using the same iteration logic as other methods.
SDAM Logging
The Rust driver will now log SDAM events when using the tracing-unstable
feature.
Client Management
The Client
type now provides three additional ways to shape behavior to fit your workload:
ClientOptions.max_connecting
lets you specify how many "in flight" connections can be established in parallel. This was previously fixed at 2 and defaults to the same value.Client::warm_connection_pool
will create new connections to bring the connection pool up tomin_pool_size
, which can provide more predictable performance in some circumstances.Client::shutdown
will cleanly stop background tasks and wait for outstanding handles to be dropped. This is particularly useful when using event handlers that reference external resources, as otherwise those handlers may be invoked in a background task even after theClient
has been dropped.
Included Changes
Below are a selected list of changes with user impact; for a full list of changes see this GitHub query.
New Features
- RUST-1420 Cache AWS credentials received from endpoints (#905)
- RUST-1604 Add custom bucketing fields to timeseries options (#907)
- RUST-1588: Add RunCursorCommand (#912)
- RUST-802 Support Unix Domain Sockets (#908) (thanks @PureWhiteWu!)
- RUST-1509 SDAM Logging (#918)
- RUST-1608 Clean shutdown for Client (#920)
- RUST-1712 Provide a connection pool warmup method (#932)
- RUST-1712 Support User Configuration for max_connecting (#923) (thanks @LuisOsta!)
- RUST-1687 Add human_readable_serialization option to Collection (#902) (thanks @maiconpavi!)
Improvements
- RUST-1433 Propagate original error for some labeled retry errors (#903)
- minor: improve README.md (#934)
- upgrade webpki (#935) (thanks @fuchsnj!)
- RUST-1763 deprecate CollectionOptions::human_readable_serialization (#957) (#959)
Bugfixes
- Force non-human readable serialization in collections (#919) (#924) (thanks @kodemartin!)
- RUST-1699 / RUST-1718 AWS authentication fixes (#926)
- RUST-1719 Fix panic after SessionCursor::with_type is called (#928) (thanks @mlokr!)
- RUST-1743 Fix gridfs numeric type serialization (#941)
- RUST-1757 Fix final cursor batch handling (#951) (#954)
- fixing the find or delete serde inconsistency (#948) (#955) (thanks @mlokr!)
- minor: pin async-executor (#964) (#965)
v2.7.0-beta.1
The MongoDB Rust driver team is pleased to announce the v2.7.0-beta.1 release of the mongodb
crate, now available for download from crates.io.