Skip to content
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

🔷 [ProjectTracking] Sequential protocol upgrades in one release #10911

Closed
posvyatokum opened this issue Apr 2, 2024 · 2 comments
Closed
Assignees

Comments

@posvyatokum
Copy link
Member

Goal

Have several protocol upgrades in one release.

Background

We performed two resharding on mainnet via making targeted 1.38 release. And although this feature would not have helped a lot in that situation (as we only decided to do the second resharding after the testnet already has been resharded once), the flow of releasing one binary that has two protocol upgrades separated by two days is easier than trying to release two binaries on one week and make sure that all of the community is adopting both changes in time.

Context

We have exactly one protocol upgrade per release (it can be empty, but we still agree that we want to bump protocol version every release). As a result, this upgrade can include roll-out of several features at once. Bundling features is dangerous, and for some features it is even impossible. This creates a situation, where features developers have to be aware of each others release dates and make sure that their feature is stabilised only in the next release.

Why should NEAR One work on this

  1. Separating feature adoptions make debugging incidents easier.
  2. We can add new protocol feature in 1.x.1 release instead of creating 1.x+1.0 release (this part is not that important), and make the release of 1.x.1 before adoption of 1.x.0 protocol version, while giving validators ability to upgrade either before or after the first voting date (this is extremely useful).
  3. We can massive upgrades in per-shard upgrades or separate steps. For example, moving shard boundaries without changing a number of shards in one release requires a complex development and testing of a new feature. Changing it in two steps -- split "traveling" range of accounts into separate shard, and the merge "traveling" range with "destination" range -- requires developing and testing only one new flow, that is merging of two shards.

What needs to be accomplished

From technical point of view, we need to support a vector of voting dates, and refactor

pub(crate) fn get_protocol_version_internal(
.

Main use case

  1. Dependant feature stabilisations
  2. Multi-feature releases

Links to external documentation and discussion

TODO: add link to how voting works

Estimated effort

TODO: precise estimation
This project is quite short. One engineer should be done in two weeks.

Assumptions

TODO

Pre-requisites

TODO

Out of scope

TODO

Task list

TODO

@posvyatokum posvyatokum self-assigned this Apr 2, 2024
@wacban
Copy link
Contributor

wacban commented Apr 3, 2024

We should absolutely do this and it conveniently seems like a relatively easy task. Once it's done we should also establish some good practices around having separate versions and dates for different features within one release. The only drawback that I see is that the latter features within a release will get a little less time in testnet but that is easily fixable.

@wacban
Copy link
Contributor

wacban commented May 21, 2024

I'm going to look into it. We may want to do it in 1.41 to separate congestion control and stateless validation.

github-merge-queue bot pushed a commit that referenced this issue May 29, 2024
…es in one release (#11368)

Implemented the feature described in #10911. 

It may or may not be needed for the congestion control and stateless
validation release but it should be useful in general and I just want to
take this variable out of the equation.
@wacban wacban self-assigned this Jul 10, 2024
@wacban wacban closed this as completed Jul 10, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Development

No branches or pull requests

2 participants