- CPU spike after some time running.
- Dependency updates.
- Dependency updates.
- Non-fatal errors closing connections.
- Sending envelopes now properly jumps to next node in query plan, if current one is unreachable.
InvalidProtocol
special error for a case when a node doesn't accept requested protocol during handshake.ConnectionPoolConfigBuilder
for building configuration easily.- Configurable heartbeat messages to keep connection alive in the pool.
- Due to an edge case with reconnecting to a seemingly downed node, internal reconnection handling mechanism has been improved.
- Hidden internal structures, which were public but not usable in any way.
- Removed
Ord, ParialOrd
fromQueryFlags
. - Using
rustls
types exported fromtokio-rustls
, rather than depending onrustls
directly.
- Fixed stack overflow when cannot determine field type during struct serialization.
- Properly supporting references during struct serialization.
- Many types are now
Debug
. - HTTP proxy support via the
http-proxy
feature.
- Made protocol enums non-exhaustive for future compatibility.
- Session builders are now async and wait for control connection to be ready before returning a session.
CBytes::new_empty()
->CBytes::new_null()
,CBytes::is_empty()
->CBytes::is_null_or_empty()
.
- Invalid Murmur3 hash for keys longer than 15 bytes.
- Fixed serialization of routing key with known indexes.
- Deprecated
query_with_param()
inPager
, in favor ofquery_with_params()
.
- Serializing single PK routing keys by index.
- Encoding envelopes with tracing/warning flags.
- Overflow when compressed envelope payload exceeds max payload size.
- Integer overflow when not received at least 8 header bytes.
Clone
implemented forBodyResReady
andBodyReqExecute
.
- Control connection errors are now logged as warnings, since they're recoverable.
- Exposed fields of
BodyReqAuthResponse
andBodyReqExecute
. - Replaced
CInet
type withSocketAddr
, since it was nothing more than a wrapper.
- Constant control connection re-establishing with legacy clusters.
ResponseBody::into_error
function.
ExponentialReconnectionSchedule
duration overflow.- Forgetting real error type in certain transport error situations.
- Not sending re-preparation statements to correct nodes.
- Infinite set keyspace notification loop.
- Protocol V5 support. Please look at official changelog for more information: https://github.com/apache/cassandra/blob/trunk/doc/native_protocol_v5.spec#L1419.
- Support for beta protocols - possibility to connect to beta clusters.
From<Decimal>
forBigInt
.check_envelope_size
forEvelope
.Error
is nowClone
.FrameEncoder
,FrameDecoder
andFrameEncodingFactory
responsible for encoding/decoding frames on the wire.with_frame_encoder_factory
Session build option.Error
impl forCheckEnvelopeSizeError
andParseEnvelopeError
.- New
Error
variants for more granular error handling. - Node address in
Error::Server
variant.
- Due to naming changes in V5, frame have been renamed to message,
Frame
toEnvelope
and a frame now corresponds to wrapped envelopes, as defined by the protocol. Serialize
andFromCursor
traits now pass protocol version to implementations.Row::from_frame_body
renamed tofrom_body
.ClusterMetadataManager::find_node
renamed tofind_node_by_rpc_address
for consistency.QueryFlags
got extended for V5 and now supportsSerialize
andFromCursor
.- Session builders now validate given configuration and return a
Result
. - Transport startup now fails gracefully on unexpected server response.
CdrsTransport
now requires explicit information if messages are a part of initial handshake.ResResultBody::as_rows_metadata
andResponseBody::as_rows_metadata
now return a reference to the data.Hash
,PartialEq
andPartialOrd
forPreparedQuery
only takeid
andresult_metadata_id
into account, since those define equivalence.- Updated
chrono
dependency to work around found CVE.
derive
feature built into the main crate - no need to explicitlyuse cdrs_tokio_helpers_derive::*
anymore.
#[must_use]
on some functions.
- Fixed parsing
NetworkTopologyStrategy
.
This version is a departure from legacy API design, stemming from the sync version migration. Due to large performance issues and lack of dynamic topology handling in earlier versions, a decision has been made to cut the ties and focus on delivering the best functionality without legacy burden. The API surface changes are quite large, but everyone is encouraged to update - the performance improvements and new features cannot be understated.
- Topology-aware load balancing:
TopologyAwareNodeDistanceEvaluator
andTopologyAwareLoadBalancingStrategy
. - New
ReconnectionPolicy
used when trying to re-establish connections to downed nodes. Error
now implements standardError
.SessionBuilder
introduced as the preferred way to create a session.- Added missing traits for
BatchType
andQueryFlags
. ToString
implementation forSimpleServerEvent
.- Standard trait implementations for event frames.
contains_column
,is_empty_by_name
andis_empty
functions forRow
.Display
implementation for public enums.- Missing traits for
PreparedMetadata
,Value
,Consistency
andColType
. - New
PreparedMetadataFlags
. - New
ClusterMetadata
representing information about a cluster. - Extracted protocol functionality to separate
cassandra-protocol
crate. - Passing final auth data from the server to
SaslAuthenticator
. SpeculativeExecutionPolicy
for speculative execution control.
- All
with_name
fields or args in the query API are nowbool
instead ofOption<bool>
flags
field removed fromQueryParams
(flags are now derived from the other fields at serialization time)- Rewritten transport layer for massive performance improvements (including
removing
bb8
). This involves changing a large portion of public API related to transport and server events. - Rewritten event mechanism - now you can subscribe to server events
via
create_event_receiver()
inSession
. - Replaced
RowsMetadataFlag
,QueryFlags
andframe::Flags
vectors with bitflags. - Changed
Target
andChangeType
enums toSchemaChangeTarget
andSchemaChangeType
. - The
varint
type now usesnum::BigInt
representation (this impliesDecimal
also uses "big" types). - Removed
unstable-dynamic-cluster
feature, since it wasn't working as expected and introduced performance
penalty. Dynamic topology handling is now built-in. - Removed
AsBytes
in favor of newSerialize
trait due to performance penalty. - Removed
FromSingleByte
andAsByte
in favor ofFrom
/TryFrom
. - Removed traits along with
async-trait
dependency:BatchExecutor
,ExecExecutor
,PrepareExecutor
,QueryExecutor
,GetConnection
andCdrsSession
. Everything is now embedded directly inSession
. - Load balancing strategy now returns query plans, rather than individual nodes, and operates on cluster metadata.
- Removed
SingleNode
load balancing strategy. - Removed empty
SimpleError
. - Renamed
connect_generic_static
toconnect_generic
. - Removed
GetRetryPolicy
. - Renamed
ChangeSchemeOptions
toSchemaChangeOptions
. - Protocol version can now be selected at run time.
Value
now directly contains the value in theSome
variant instead of a separate body field.- Consistent naming convention in all builders.
- Split protocol-level parameters from high-level statement
parameters (
QueryParams
vsStatementParams
) and simplified API. add_query_prepared
for batch queries now takesPreparedQuery
by reference.
- Support for stateful SASL authenticators.
- Using up-to-date lz4 crate (no more unmaintained dependency alerts).
- Build problems with Rustls.
- TLS connections sometimes not flushing all data.
- Not setting current namespace when not using an authenticator.
- New
connect_generic_*
functions allowing custom connection configurations ( seegeneric_connection.rs
for example usage). - Possibility to use custom error types which implement
FromCdrsError
throughout the crate. Consistency
now implementsFromStr
.- Pagers can be converted into
PagerState
. - Support for v4 marshaled types.
Copy
,Clone
,Ord
,PartialOrd
,Eq
,Hash
forOpcode
.- Customizable query retry policies with built-in
FallthroughRetrySession
andDefaultRetryPolicy
.
- TCP configuration now owns contained data - no need to keep it alive while the config is alive.
ExecPager
is now public.Bytes
now implementsFrom
for supported types, instead ofInto
.- Moved some generic types to associated types, thus removing a lot of type passing.
SessionPager
no longer needs mutable session.- A lot of names have been migrated to idiomatic Rust (mainly upper camel case abbreviations).
- Remembering
USE
d keyspaces across connections. - Race condition on query id overflow.
- Removed deprecated
PasswordAuthenticator
. - Removed unused
Compressor
trait. - Large API cleanup.
- Renamed
IntoBytes
toAsBytes
. Authenticator
can now be created at runtime - removed static type parameter.- Removed unneeded memory allocations when parsing data.
- Recreation of forgotten prepared statements.
rustls
sessions constructors.
- Updated
tokio
to 1.1.
- Support for
NonZero*
types. - Support for
chrono
NaiveDateTime
andDateTime<Utc>
. - Update
tokio
to 1.0. Pager
supportingQueryValues
and consistency.
- Initial release.