HDDS-3698: Non-Rolling Upgrade
1. stable builds/intermittent test failures
- The
HDDS-3698-nonrolling-upgradebranch has no intermittent test failures. - Most intermittent failures specific to the
HDDS-3698-nonrolling-upgradebranch were tracked and resolved in HDDS-4833. - Other intermittent failures have been resolved in HDDS-5109 and HDDS-5336.
2. documentation
-
hadoop-hdds/docs/feature/design/how-to-do-a-nonrolling-upgrade.mdcontains instructions for users to upgrade a cluster using the framework. -
Documentation will be refined in coming weeks, before it is needed in the 1.2.0 release.
3. design, attached the docs
Hadoop-hdds/docs/content/design/upgrade-dev-primer.mdcontains instructions for developers who need to add a feature using the upgrade framework.hadoop-hdds/docs/content/design/nonrolling-upgrade.mdcontains links to the main design document and presentation.hadoop-hdds/docs/content/design/omprepare.mdcontains links and summary for OM preparation design document.
4. S3 compatibility
- There are no S3 incompatibilities. This code was not changed.
5. Docker-compose / acceptance tests
- Upgrades can be done in Docker-compose to/from any Ozone version which has a Docker image, or to the current code.
- See
Hadoop-ozone/dist/src/main/compose/upgrade/README.mdfor more information.
6. support of containers / Kubernetes
- The upgrade framework will not effect Kubernetes deployments, since it does not require additional configuration for startup.
7. coverage/code quality
-
- Code coverage: 74.8%
-
- Code coverage: 73.3%
-
OM Prepare and general upgrade flow are tested through new acceptance tests which are not reflected in the code coverage.
8. build time
-
Recent passing runs from master:
-
Recent passing runs from upgrade branch:
-
Although lots of upgrade specific tests were added, the following are the most time consuming:
- New upgrade acceptance tests, which walk through a cluster upgrade from the last release's Docker image to the current build, in order to catch backwards incompatible changes.
- Although we previously had upgrade tests on master, the added tests use the upgrade framework which uses more commands and tests, and therefore takes longer to run.
- New upgrade integration tests in TestHDDSUpgrade, which test various failure combinations that could occur during the upgrade.
- Only a subset of these tests are currently being run to save time.
- New integration tests in TestOzoneManagerPrepare, which tests OM preparations under various failure and request combinations.
9. possible incompatible changes/used feature flag
There are no incompatible changes and no feature flags. The upgrade framework will only be used during an upgrade.
10. third party dependencies/license changes
-
The following dependencies have been added:
aspectjrt-1.8.9.jaraspectjweaver-1.8.9.jar- reflections-0.9.12.jar
-
All new libraries have compatible licenses. (License file update: HDDS-5137)
11. performance
-
The majority of the upgrade framework is not used when an upgrade is not being performed, so it is not expected to have a performance impact.
-
LayoutVersionInstanceFactorywas added to potentially handle client requests withinOzoneManagerRatisUtils, although this is not being used yet to accommodate HDDS-2939 (filesystem optimizations). -
Changes do not seem to affect performance based on simple freon testing (3 runs per branch):
ozone freon rk --num-of-keys=100 --num-of-buckets=10 --num-of-volumes=1 --replication-type=RATIS --factor=THREE
HDDS-3698-nonrolling-upgrade:
***************************************************
Status: Success
Git Base Revision: 7a3bc90b05f257c8ace2f76d74264906f0f7a932
Number of Volumes created: 1
Number of Buckets created: 10
Number of Keys added: 1000
Ratis replication factor: THREE
Ratis replication type: RATIS
Average Time spent in volume creation: 00:00:00,013
Average Time spent in bucket creation: 00:00:00,050
Average Time spent in key creation: 00:00:02,493
Average Time spent in key write: 00:00:01,163
Total bytes written: 10240000
Total Execution time: 00:00:20,679
***************************************************
***************************************************
Status: Success
Git Base Revision: 7a3bc90b05f257c8ace2f76d74264906f0f7a932
Number of Volumes created: 1
Number of Buckets created: 10
Number of Keys added: 1000
Ratis replication factor: THREE
Ratis replication type: RATIS
Average Time spent in volume creation: 00:00:00,007
Average Time spent in bucket creation: 00:00:00,065
Average Time spent in key creation: 00:00:02,014
Average Time spent in key write: 00:00:01,144
Total bytes written: 10240000
Total Execution time: 00:00:23,661
***************************************************
***************************************************
Status: Success
Git Base Revision: 7a3bc90b05f257c8ace2f76d74264906f0f7a932
Number of Volumes created: 1
Number of Buckets created: 10
Number of Keys added: 1000
Ratis replication factor: THREE
Ratis replication type: RATIS
Average Time spent in volume creation: 00:00:00,006
Average Time spent in bucket creation: 00:00:00,089
Average Time spent in key creation: 00:00:02,442
Average Time spent in key write: 00:00:01,076
Total bytes written: 10240000
Total Execution time: 00:00:23,655
***************************************************
master:
***************************************************
Status: Success
Git Base Revision: 7a3bc90b05f257c8ace2f76d74264906f0f7a932
Number of Volumes created: 1
Number of Buckets created: 10
Number of Keys added: 1000
Ratis replication factor: THREE
Ratis replication type: RATIS
Average Time spent in volume creation: 00:00:00,007
Average Time spent in bucket creation: 00:00:00,046
Average Time spent in key creation: 00:00:02,422
Average Time spent in key write: 00:00:01,411
Total bytes written: 10240000
Total Execution time: 00:00:25,699
***************************************************
***************************************************
Status: Success
Git Base Revision: 7a3bc90b05f257c8ace2f76d74264906f0f7a932
Number of Volumes created: 1
Number of Buckets created: 10
Number of Keys added: 1000
Ratis replication factor: THREE
Ratis replication type: RATIS
Average Time spent in volume creation: 00:00:00,006
Average Time spent in bucket creation: 00:00:00,039
Average Time spent in key creation: 00:00:02,762
Average Time spent in key write: 00:00:01,466
Total bytes written: 10240000
Total Execution time: 00:00:23,617
***************************************************
***************************************************
Status: Success
Git Base Revision: 7a3bc90b05f257c8ace2f76d74264906f0f7a932
Number of Volumes created: 1
Number of Buckets created: 10
Number of Keys added: 1000
Ratis replication factor: THREE
Ratis replication type: RATIS
Average Time spent in volume creation: 00:00:00,006
Average Time spent in bucket creation: 00:00:00,029
Average Time spent in key creation: 00:00:01,975
Average Time spent in key write: 00:00:01,040
Total bytes written: 10240000
Total Execution time: 00:00:23,677
***************************************************
12. security considerations
The branch introduced the RPC methods in the ScmAdminProtocol.proto to initialize (and finalize) the upgrade process. They are available only to the admins (HDDS-5138).