- 
                Notifications
    You must be signed in to change notification settings 
- Fork 138
Release 1.0.0 #1265
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
          
     Merged
      
      
    
                
     Merged
            
            Release 1.0.0 #1265
Conversation
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
    | 
 | 
ed63c98    to
    c3b6f6d      
    Compare
  
    | 
 Let's call it  | 
Having version prevents us from publishing to crates.
              
                    wprzytula
  
              
              approved these changes
              
                  
                    Mar 4, 2025 
                  
              
              
            
            
              
                    muzarski
  
              
              approved these changes
              
                  
                    Mar 4, 2025 
                  
              
              
            
            
              
                    piodul
  
              
              approved these changes
              
                  
                    Mar 4, 2025 
                  
              
              
            
            
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good job!
              
                    roydahan
  
              
              approved these changes
              
                  
                    Mar 4, 2025 
                  
              
              
            
            
  
    Sign up for free
    to join this conversation on GitHub.
    Already have an account?
    Sign in to comment
  
      
  Add this suggestion to a batch that can be applied as a single commit.
  This suggestion is invalid because no changes were made to the code.
  Suggestions cannot be applied while the pull request is closed.
  Suggestions cannot be applied while viewing a subset of changes.
  Only one suggestion per line can be applied in a batch.
  Add this suggestion to a batch that can be applied as a single commit.
  Applying suggestions on deleted lines is not supported.
  You must change the existing code in this line in order to create a valid suggestion.
  Outdated suggestions cannot be applied.
  This suggestion has been applied or marked resolved.
  Suggestions cannot be applied from pending reviews.
  Suggestions cannot be applied on multi-line comments.
  Suggestions cannot be applied while the pull request is queued to merge.
  Suggestion cannot be applied right now. Please check back later.
  
    
  
    
This is a PR with changes for release 1.0.0. Its purpose is to make it possible to review the release notes, and changes to README.md.
Fixes: #968
Fixes: #552
Current release notes
The ScyllaDB team is pleased to announce ScyllaDB Rust Driver 1.0.0,
an asynchronous CQL driver for Rust, optimized for Scylla, but also compatible with Apache Cassandra!
Some interesting statistics:
Stabilization
1.0 has a special meaning for Rust crates - it means that the crate is considered "API-stable" - however there is no specific definition of what it means to be "API-stable".
So what does it mean to us, and why did we release this version?
Up until now, we introduced breaking changes whenever we felt we could improve the API this way (sometimes we kept the old API for a bit, and provided a migration guide). This caused the vast majority of our releases to have to bump the major version number - we didn't reach minor version greater than "2" for a few years now. This is not a great situation for our users, because it means it is basically never possible to update the driver without adjusting their codebases.
At the same time we know that we can't (and don't want to) freeze the API forever - there are still many improvements we can make, and the databases (Scylla / Cassandra) are always changing, which sometimes requires breaking changes on our part (an example of this is Tablets feature in Scylla, which required us to change our load balancing APIs). This means we won't stay on 1.x forever.
We decided to stabilize the API by providing a guarantee regarding how long a breaking change won't occur, which will allows users to better allocate time for dealing with breakage. For the 1.0, we won't release 2.0 earlier than 9 months after 1.0 (but we may release it later). Until then we will release minor (1.x) versions. In 1.x versions we may of course introduce new APIs, and deprecate old ones, but there will be no breaking changes.
Two exceptions that may force us to release major versions quicker are:
After releasing new major version (e.g. 2.0) we will continue to provide bugfixes (but no new features) for the previous major version (e.g. 1.0). The exact duration of such bugfix support will be provided after the new major version is released.
Additionally, 1.0 release signifies that we view the driver as production ready. It has been for a long time now, but the 0.x version number may have been suggesting otherwise to some people, and we don't want to send mixed signals.
Changes
New features / enhancements:
Mutexinternally, causing performance problems because of contention. NowAtomicHistogramis used to avoid this problem. Additionally, metrics are now guarded bymetricsfeature, so that the users who don't need them don't have to pay the performance cost and introduce additional dependency. (#1263)CqlType::UserDefinedType. Now, in case of this (and some other errors) the metadata fetch for given keyspace will be aborted (and warning printed), returning previous version of this keyspace if possible. (#1162)Table::partition_keyandTable::clustering_keyare present inTable::columns. If this is not the case, fetch is failed only for this keyspace, as above. (#1252)Node::is_downwas made private, instead new methodNode::is_connectedwas introduced. The old method has very misleading semantics. The new one tells if there are currently any driver connections opened to given node. (#1196)Vectorsupport. Driver can now correctly fetch metadata of tables with vector columns. Serializing / deserializing vector values will be added after 1.0. (#1020)Displaywas implemented forCqlValue. (#1257)randdependency was updated to 0.9.0. This is a breaking change, because a trait fromrandappears inReplicaSet::choose_filteredmethod. (#1255)system.localtable useWHERE key='local'which should be a minor performance improvement. (#1245)DebugforMaybeUnset. (#1199)Bug fixes:
Debugimplementation onCachingSessionwas not usable due to unsatisfiable bounds. (#1161)scylla-cql, so the change is breaking - but it should not affect users. (#1176)API cleanups / better types:
authentication,client,cluster,network,observability,policies,response,routing,statement,utils. Some structs and method were also renamed as part of this effort. Unfortunately, this is a big change that will require users of our driver to update most of theirusestatements. (#1163, #1187)CqlTypewas removed, andColumnTypeis used in its place. To make this possible,ColumnTypewas heavily modified. (#1166)scylla-cqlhas a lot of problems. Many of them were addressed, which of course is a very breaking change. (#1198)Querywas renamed toStatement. (#1250)SerializedValuesfrom public API ofscyllacrate. Functions using it were either changed to using&dyn SerializeRowor deemed unnecessary and removed from the public API. Error types ofClusterStatetoken calculation APIs were changed as part of this. (#1252)ColumnSpecViewandTableSpecViewwere removed.ColumnSpecsreceived a second lifetime.PreparedStatement::get_variable_col_specsandPreparedStatement::get_result_set_col_specsnow returnColumnSpecsto make it consistent withQueryRowsResultandQueryPager. (#1249)PreparedStatement::get_partitioner_name()was madepub. (#1222)#[non_exhaustive]because we may want to add new variants to them in the future. (#1261, #1262, #1257, #1205, #1269)RetryPolicy-related APIs were adjusted to past naming changes in load balancing. (#1202)ClusterStatenow has getter and iterator for keyspaces, instead of exposingHashMap<String, Keyspace>. (#1266)The two changes below are formally API-breaking, but are extremely unlikely to cause any breakage, so we don't mark them as such.
PeerEndpoint, because it was not used in any public API. (#1261)RowSerializationContext::column_by_namebecause there is no probable use case that needs it. (#1252)Internal API cleanups/refactors:
Documentation:
queryvsstatementvsrequest. (#1250)scylla-macroscrate. (#1260)CI / developer tool improvements:
Others:
Congrats to all contributors and thanks everyone for using our driver!
The source code of the driver can be found here:
Contributions are most welcome!
The official crates.io registry entry is here:
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:
Pre-review checklist
I added relevant tests for new features and bug fixes.I have provided docstrings for the public items that I want to introduce../docs/source/.Fixes:annotations to PR description.