-
Notifications
You must be signed in to change notification settings - Fork 110
feature(rolling-upgrades): update the base versions rules #11959
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
feature(rolling-upgrades): update the base versions rules #11959
Conversation
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.
Pull Request Overview
This PR updates the rolling upgrade base version rules to support upgrades from any Short Term Support (STS) version up to the last Long Term Support (LTS) version, accommodating the increased release frequency of 4+ STS versions per year.
Key changes:
- Modified upgrade logic for STS versions to include all STS versions since the last LTS plus the LTS version itself
- Updated master branch upgrade logic to only upgrade from the last LTS version
- Added comprehensive test coverage for the new upgrade scenarios
Reviewed Changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| utils/get_supported_scylla_base_versions.py | Implements new upgrade matrix logic for STS and LTS versions with more comprehensive version support |
| unit_tests/test_base_version.py | Adds test cases to verify the new upgrade behavior for 2025.3 and 2025.4 releases |
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
|
@mykaul FYI, it means that for 2025.3, we have extra test for each rolling upgrade case, and for 2025.4, 2 extra tests for each case. |
| if lts_version.search(_version)), None)) | ||
| else: | ||
| LOGGER.warning('version format not the default - %s', version) | ||
| lts_version = re.compile(r'\d{4}\.1') # lts = long term support |
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.
General Q for the code below? Isn't it easier to just build the matrix - initial source, all the way to the latest?
Something like (in the future, showing 2026.1):
2024.1, 2025.1, 2025.2, 2025.3, 2025.4, 2026.1
2024.1, 2025.1, 2026.1
Where the matrix is going over every 'run' above and starts from each slot - all the way to the end?
For example with the above:
2024.1, 2025.1, 2025.2, 2025.3, 2025.4, 2026.1
2025.1, 2025.2, 2025.3, 2025.4, 2026.1
2025.2, 2025.3, 2025.4, 2026.1
2025.3, 2025.4, 2026.1
2025.4, 2026.1
2024.1, 2025.1, 2026.1
2025.1, 2026.1
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.
I'm not sure I'm following what is the suggestion, the end result is that we should support one last LTS version and all the versions in between.
In 2026.1 we still would want to update from the 4 versions before it ? That would mean 5 variants once the first release is out ...
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.
@mykaul you are missing how the tests are working, it's 1 to 1 upgrades, we are not doing continues upgrades like you are assuming...
target_version=2026.1
bases_vesrions=2025.1,2025.4
means we upgrade from 2025.1 to 2026.1, and in different run from 2025.4 to 2026.1
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.
What could be easier is to just list the LTS versions instead of assuming them from their suffix.
Right now we don’t have a way to mark a version to be LTS or test it like LTS.
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.
how can we list them not based on their suffix ?
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.
Anyhow giving 2026.1 as example, but are the base version we should test for it
"2025.1", "2025.4", "2026.1" (if current is LTS, last LTS and last STS)
"2025.1", "2025.2", "2025.3", "2025.4", "2026.1" (Last LTS and All STS since)
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.
Having somewhere a list of versions, like:
LTS = {"2023.1", "2024.1",...}
Or we can have a list of dictionaries with all supported versions and each if it's STS or LTS.
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.
And then we need to keep those update all the time,
it worked so great in dtest, so we should repeat it here ?
ffad66e to
18c868e
Compare
| elif version == "master": | ||
| # add 2 last enterprise versions, since one of them might be only rc version, and we'll need to filter it out | ||
| source_available_base_version.extend(source_available_release_list[-2:]) | ||
| # For master branch, upgrade only from last LTS version |
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.
Don’t we test also last source available version (e.g last STS if it’s not LTS)?
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.
in master we always test only one version, which one it should be, is a good question
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.
we did agreed that if we enable so many base version for release, we should do last version and last LTS for master runs
18c868e to
ceb95de
Compare
a8ee8b8 to
b9f9f6e
Compare
|
@roydahan any luck with changing this requirement ? (since 2025.4 is branched, and we don't have it in yet...) |
|
Discussion is on the test plan. |
b9f9f6e to
c940be3
Compare
e455fb9 to
d8d38c8
Compare
d8d38c8 to
3179153
Compare
now that we have at least 4 short terms versions a year, we should now support upgrade from any of the STS version up to the last LTS version. this gonna make the matrix more complex as we have more version between every LTS version
3179153 to
a24db5e
Compare
|
to sum it up
we gonna enable new flag on two test:
so now we'll be cover one of our SMI (debian based), and one centos/rhel style I think that would be enough for initial support, later we can extend it. |
|
Sounds good to me. |
now that we have at least 4 short terms versions a year, we should now support upgrade from any of the STS version up to the last LTS version.
this gonna make the matrix more complex as we have more version between every LTS version
Testing
PR pre-checks (self review)
backportlabelsReminders
sdcm/sct_config.py)unit-test/folder)