# \[RELEASE\] ScyllaDB Rust Driver 0.8.0

**URL:** <https://forum.scylladb.com/t/release-scylladb-rust-driver-0-8-0/415>\
**Category:** Release Notes\
**Tags:** drivers, rust-driver, rust, driver-release\
**Created:** [March 22, 2023, 7:14pm UTC](https://forum.scylladb.com/t/release-scylladb-rust-driver-0-8-0/415 "2023-03-22T19:14:05Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![piodul](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.scylladb.com/piodul/32/149_2.png) [@piodul](https://forum.scylladb.com/u/piodul)\
**Post date:** [March 22, 2023, 7:14pm UTC](https://forum.scylladb.com/t/release-scylladb-rust-driver-0-8-0/415/1 "2023-03-22T19:14:06Z")

</div>

The ScyllaDB team is pleased to announce ScyllaDB Rust Driver 0.8.0,  
an asynchronous CQL driver for Rust, optimized for Scylla, but also compatible with Apache Cassandra!

Some interesting statistics:

- over 145k downloads on crates;
- over 390 GitHub stars!

## Notable changes

**New features / enhancements** :

- Support for the serverless Scylla Cloud has been introduced. ([#614](https://github.com/scylladb/scylla-rust-driver/pull/614))
- The load balancing module was rewritten. The new API allowed for a more efficient implementation which does not allocate on the happy path when planning on which nodes to execute the query on. Existing load balancing policies have been unified into a single `DefaultPolicy`, which is configurable and offers the same functionality as the previous, composable policies. ([#612](https://github.com/scylladb/scylla-rust-driver/pull/612))
- Execution profiles have been introduced. An execution profile represents a group of options applicable to a query. It is possible to associate a single execution profile with multiple queries, as well as change the execution profile for multiple queries at once if they share the same _execution profile handle_. See the docs for more details. ([#592](https://github.com/scylladb/scylla-rust-driver/pull/592))
- Column types, UDT definitions etc. in the cluster metadata no longer refer to UDTs by name, instead they contain the whole definitions of the UDT. The driver topologically sorts the UDT definitions and resolves type dependencies after fetching metadata. ([#649](https://github.com/scylladb/scylla-rust-driver/pull/649))
- If token aware routing is enabled, the load balancing policy used to always choose a random replica. This behavior can now be disabled so that replicas are always chosen in a fixed order. This can have performance benefits for some workloads as it can lead to better caching. ([#667](https://github.com/scylladb/scylla-rust-driver/pull/667))
- The driver now uses nodes’ host id instead of IPs for identification. There are ongoing efforts to allow Scylla nodes to change their IPs after restart, so this change in the driver serves as a preparation which - fortunately - is backwards-compatible with existing Scylla versions. ([#617](https://github.com/scylladb/scylla-rust-driver/pull/617))
- Connection keepalives are now, by default, enabled and sent every 30 seconds. ([#654](https://github.com/scylladb/scylla-rust-driver/pull/654))
- Spans attached to requests now contain more information, including request/response size, partition key, token, replica IPs etc. ([#668](https://github.com/scylladb/scylla-rust-driver/pull/668))
- The `BatchValues` trait was simplified with the help of recently introduced Generic Associated Types (GATs). ([#596](https://github.com/scylladb/scylla-rust-driver/pull/596))
- The `impl FromCqlVal for CqlDuration`, which was previously missing, was added. ([#623](https://github.com/scylladb/scylla-rust-driver/pull/623))
- The `impl FromCqlVal for Date`, which was previously missing, was added. ([#638](https://github.com/scylladb/scylla-rust-driver/pull/638))
- Support for deserialization of types wrapped in `secrecy::Secret` was added. To enable it, you need to enable the `secret` feature. ([#619](https://github.com/scylladb/scylla-rust-driver/pull/619))
- Support for deserialization of DateTime was added. ([#619](https://github.com/scylladb/scylla-rust-driver/pull/619))
- It is now possible to get information about the name of the current keyspace. ([#663](https://github.com/scylladb/scylla-rust-driver/pull/663))
- The `Session::calculate_token` is now public. ([#658](https://github.com/scylladb/scylla-rust-driver/pull/658))
- Now, most of the error types in the crate implement the `Clone` trait. ([#669](https://github.com/scylladb/scylla-rust-driver/pull/669))
- The `deser_cql_value` function was made public. It is used by the `scylla-rust-udf` library. ([#630](https://github.com/scylladb/scylla-rust-driver/pull/630))
- Dropped dependency on `ahash` in tests. It wasn’t really needed and, in some cases, could trigger a bug in the cargo resolver with a cryptic error message, which could prevent the whole project from compiling. ([#625](https://github.com/scylladb/scylla-rust-driver/pull/625))
- Hygiene of the procedural macros has been increased. Moreover, it is now possible to use them with conjunction with just `scylla-cql` by using the `#[scylla_crate = "scylla_cql"]` attribute. ([#628](https://github.com/scylladb/scylla-rust-driver/pull/628))
- Address translation now happens just before a connection is established. Previously, it happened during metadata fetch. This allows the user-provided `AddressTranslator` to be more dynamic - for example, if a node’s IP changes and all connections are closed, if the `AddressTranslator` reacts to this quickly then the driver can re-establish connections to this node much more quickly. ([#641](https://github.com/scylladb/scylla-rust-driver/pull/641))

**Bug fixes** :

- The `Session::query_iter`/`execute_iter` methods will now correctly work when used to send a write request. ([#644](https://github.com/scylladb/scylla-rust-driver/pull/644))

**Performance improvements** :

- The internal method `Connection::query_all` that was used to fetch cluster metadata has been replaced with `Connection::query_iter`. The new method does not concatenate results from multiple pages into single one, but rather returns an iterator which allows processing the rows as they are fetched in the background. This should reduce memory usage during metadata fetch in some extreme cases. Moreover, the new method fits the upcoming “iterator-based deserialization” API rework better. ([#645](https://github.com/scylladb/scylla-rust-driver/pull/645))
- Calculation of some parameters passed to tracing used to allocate, which could lead to a significant performance impact. Now, they don’t need to allocate. ([#656](https://github.com/scylladb/scylla-rust-driver/pull/656))
- `PreparedStatement` is now cheaper to clone. Its internals that allocated on clone are now wrapped in an `Arc`. ([#653](https://github.com/scylladb/scylla-rust-driver/pull/653))

**CI / developer tool improvements** :

- Now, IP addresses for scylla-proxy nodes are assigned automatically. Developers no longer need to specify IPs manually and worry about IP conflicts between the tests. ([#621](https://github.com/scylladb/scylla-rust-driver/pull/621))
- The cluster that is set up both by CI and `Makefile` now boots Scylla nodes sequentially. This slows down the boot process, but the old method is technically incorrect and could result in a fail - the new method follows the best practices. ([#647](https://github.com/scylladb/scylla-rust-driver/pull/647))
- To aid in debugging cluster failures, now CI prints logs from the Scylla nodes at the end. ([#646](https://github.com/scylladb/scylla-rust-driver/pull/646))

**Other** :

- MSRV was bumped up from 1.59 to 1.65. It was mainly done to support GATs. ([#627](https://github.com/scylladb/scylla-rust-driver/pull/627))

Congrats to all contributors and thanks everyone for using our driver!

* * *

The source code of the driver can be found here:

- [GitHub - scylladb/scylla-rust-driver: Async CQL driver for Rust, optimized for ScyllaDB!](https://github.com/scylladb/scylla-rust-driver)  
Contributions are most welcome!

The official [crates.io](http://crates.io) registry entry is here:

- [crates.io: Rust Package Registry](https://crates.io/crates/scylla)

Thank you for your attention, please do not hesitate to contact us if you have any questions, issues, feature requests, or are simply interested in our driver!

Contributors since the last release:

| commits | author |
| --- | --- |
| 108 | Wojciech Przytuła |
| 66 | Piotr Dulikowski |
| 18 | Michał Sala |
| 5 | Jan Ciolek |
| 5 | Wojciech Mitros |
| 3 | Jan Ciołek |
| 3 | Thomas BESSOU |
| 1 | Gor Stepanyan |
| 1 | Sining (Stephen) Ma |
| 1 | Ten0 |
