This is an automated email from the ASF dual-hosted git repository.
pifta pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/master by this push:
new 650e306c83 HDDS-6633. Refactor upgrade acceptance tests to reduce code
duplication. (#4456)
650e306c83 is described below
commit 650e306c83bc7fb96f6ccc635a72ad00051cfc0c
Author: Ethan Rose <[email protected]>
AuthorDate: Tue Mar 28 15:37:55 2023 -0700
HDDS-6633. Refactor upgrade acceptance tests to reduce code duplication.
(#4456)
---
.../dist/src/main/compose/upgrade/README.md | 93 +++++++++-----
.../compose/upgrade/compose/ha/docker-compose.yaml | 76 +++++++----
.../main/compose/upgrade/compose/ha/docker-config | 15 ++-
.../src/main/compose/upgrade/compose/ha/load.sh | 4 +-
.../upgrade/compose/non-ha/docker-compose.yaml | 16 +--
.../main/compose/upgrade/compose/non-ha/load.sh | 2 +
.../upgrade/compose/{non-ha/load.sh => om-ha/.env} | 22 ++--
.../compose/{ha => om-ha}/docker-compose.yaml | 16 +--
.../upgrade/compose/{ha => om-ha}/docker-config | 0
.../compose/upgrade/compose/{ha => om-ha}/load.sh | 4 +-
hadoop-ozone/dist/src/main/compose/upgrade/test.sh | 12 +-
.../dist/src/main/compose/upgrade/testlib.sh | 139 ++++++++-------------
.../upgrade/upgrades/manual-upgrade/driver.sh | 4 +-
.../non-rolling-upgrade/1.2.1-1.3.0/callback.sh | 84 -------------
.../callbacks/1.3.0/callback.sh} | 19 +--
.../{1.1.0-1.2.0 => callbacks/common}/callback.sh | 48 ++++---
.../upgrade/upgrades/non-rolling-upgrade/driver.sh | 34 ++---
.../smoketest/upgrade/check-finalization.robot | 50 ++++++++
.../src/main/smoketest/upgrade/check-mlv.robot | 41 ------
.../dist/src/main/smoketest/upgrade/finalize.robot | 6 +-
.../dist/src/main/smoketest/upgrade/prepare.robot | 1 +
21 files changed, 323 insertions(+), 363 deletions(-)
diff --git a/hadoop-ozone/dist/src/main/compose/upgrade/README.md
b/hadoop-ozone/dist/src/main/compose/upgrade/README.md
index 27d6afa26e..78a5b0e670 100644
--- a/hadoop-ozone/dist/src/main/compose/upgrade/README.md
+++ b/hadoop-ozone/dist/src/main/compose/upgrade/README.md
@@ -18,39 +18,60 @@ This directory contains cluster definitions and scripts for
testing upgrades fro
previous version, or to the local build of the code. It is designed to catch
backwards incompatible changes made between
an older release of Ozone and a later release (which may be the local build).
-## IMPORTANT NOTES
+## Quick Guide For Release Managers
-1. Backwards Incompatibility
- - These tests will not catch backwards incompatible changes against
commits in between releases.
- - Example:
- 1. After 1.0.0, a change *c1* is made that is backwards compatible
with 1.0.0.
- 2. After *c1*, a new change *c2* is made that is also backwards
compatible with 1.0.0 but backwards *incompatible* with *c1*.
+- The whole test matrix of upgrading and downgrading to/from previous releases
to the current code is too time consuming to do on every CI run. Instead we
recommend release managers manually test the full matrix before each release,
and let only the tests from the previous release to the current code be run in
CI.
- - This test suite will not raise an error for *c2*, because it
only tests against the last release
- (1.0.0), and not the last commit (*c1*).
+1. Before the release, test the whole matrix of upgrades from the previous
version to the version you are releasing.
+ - This is important manual verification that the release does not break
backwards compatibility, and the results can be included in the release vote
mailing thread.
+ - To do this, uncomment all lines that contain `run_test` in the *test.sh*
file, and execute *test.sh* either locally or on GitHub actions.
+
+2. After the release is finished and its docker image is published, add the
new version to the test matrix.
+ 1. Change the `OZONE_CURRENT_VERSION` variable to
`OZONE_CURRENT_VERSION=<newly-released-version>`.
+ 2. Comment out all `run_test` lines in *test.sh*.
+ 3. Add a new line: `run_test ha non-rolling-upgrade
<newly-released-version> "$OZONE_CURRENT_VERSION"` before the commented out
lines.
+
+## Important Notes on Test Scope
+
+- These tests will not catch backwards incompatible changes against commits in
between releases.
+ - Example:
+ 1. After 1.2.0, a change *c1* is made that is backwards compatible
with 1.2.0.
+ 2. After *c1*, a new change *c2* is made that is also backwards
compatible with 1.0.0 but backwards *incompatible* with *c1*.
+
+ - This test suite will not raise an error for *c2*, because it only
tests against the last release
+ (1.2.0), and not the last commit (*c1*).
+
+## Supported Versions
+
+Non-rolling upgrades and downgrades are supported from 1.1.0 to any later
version. Note that 1.1.0 did not have the non-rolling upgrade framework, so
things like preparing the OMs for upgrade and checking finalization status are
not present in that version. Manual upgrade is the only supported upgrade
option from 1.0.0 to 1.1.0.
## Directory Layout
### upgrades
-Each type of upgrade has a subdirectory under the *upgrades* directory. Each
upgrade's steps are controlled by a *driver.sh* script in its
*upgrades/\<upgrade-type>* directory. Callbacks to execute throughout the
upgrade are called by this script and should be placed in a file called
*callback.sh* in the *upgrades/\<upgrade-type>/\<upgrade-from>-\<upgrade-to>*
directory. After the test is run, results and docker volume data for the
upgrade for these versions will also be placed in this d [...]
+Each type of upgrade has a subdirectory under the *upgrades* directory.
+
+- Each upgrade's steps are controlled by a *driver.sh* script in its
*upgrades/\<upgrade-type>* directory. Callbacks to execute throughout the
upgrade are called by this script and should be placed in a file called
*callback.sh* in the *upgrades/\<upgrade-type>/\<upgrade-to>* directory.
+
+- As the test is run, result logs and docker volume data for the upgrade for
these versions will be placed in
*upgrades/\<upgrade-type>/execution/\<upgrade-from>-\<upgrade-to>*. This allows
a suite of upgrades to be run without conflicting directory names.
+
+- The result logs of all upgrades run as part of the tests will be copied to a
*result* directory in the top level upgrade directory.
#### non-rolling-upgrade
- Any necessary conversion of on disk structures from the old version to the
new version are handled by Ozone's non-rolling upgrade framework.
+- The name of each subdirectory in *non-rolling-upgrade* is a version to start
the upgrade test from, with a *callback.sh* file whose callbacks will be
invoked for any upgrade starting in that version.
+
+- The *common* directory contains callbacks used for all upgrade tests
regardless of the version.
+
- Supported Callbacks:
- 1. `setup`: Run before ozone is started in the old version.
- 3. `with_old_version`: Run while ozone is running in the old version.
- 3. `with_new_version_pre_finalized`: Run after ozone is stopped in the old
version, and brought back up and running in the new version pre-finalized.
- 4. `with_old_version_downgraded`: Run after ozone is stopped in the new
version pre-finalized, and restarted in the old version again.
- 5. `with_new_version_finalized`: Run after ozone is stopped in the old
version after donwgrade, started again in the new version pre-finalized, and
then finalized.
+ 1. `with_old_version`: Run while ozone is in the original version to start
the upgrade from, before any upgrade steps have been done.
+ 2. `with_this_version_pre_finalized`: Run after ozone is stopped in the
old version, and brought back up and running in the new version pre-finalized.
+ 3. `with_old_version_downgraded`: Run after ozone is stopped in the new
version pre-finalized, and restarted in the old version again.
+ 4. `with_this_version_finalized`: Run after ozone is stopped in the old
version after donwgrade, started again in the new version pre-finalized, and
then finalized.
- The upgrade is complete when this callback runs.
-- Note that on the first upgrade after the non-rolling upgrade framework is
added, the old version does not have the non-rolling upgrade framework, but the
new version does.
- - The non-rolling upgrade framework can still be used, the only difference
is that OMs cannot be prepared before moving from the old version to the new
version.
- - Set the variable `OZONE_PREPARE_OMS` to `false` in `callback.sh` setup
function to disable OM preparation as part of the upgrade.
-
#### manual-upgrade
- This is a legacy option that was used before the upgrade framework was
introduced in 1.2.0. This option is left as an example in case it needs to be
used for some reason in the future.
@@ -60,22 +81,22 @@ Each type of upgrade has a subdirectory under the
*upgrades* directory. Each upg
- This is primarily for testing upgrades from versions before the non-rolling
upgrade framework was introduced.
- Supported Callbacks:
- 1. `setup_with_old_version`: Run before ozone is started in the old
version.
+ 1. `setup_old_version`: Run before ozone is started in the old version.
3. `with_old_version`: Run while ozone is running in the old version.
- 3. `setup_with_new_version`: Run after ozone is stopped in the old
version, but before it is restarted in the new version.
- 4. `with_new_version`: Run while ozone is running in the new version.
+ 3. `setup_this_version`: Run after ozone is stopped in the old version,
but before it is restarted in the new version.
+ 4. `with_this_version`: Run while ozone is running in the new version.
### compose
-Docker compose cluster definitions to be used in upgrade testing are defined
in the *compose* directory. A compose cluster can be selected by sourcing the
*load.sh* script in the compose cluster's directory on the setup callback for
the upgrade test.
+Docker compose cluster definitions to be used in upgrade testing are defined
in the *compose* directory. A compose cluster can be selected by specifying the
name of its subdirectory as the first argument to `run_test`. `run_test` will
then source the `load.sh` script in the cluster's directory so it is used
during the test. For manual testing, docker compose can be used normally from
the compose cluster directory. Note that some clusters may not work with older
versions. Ozone 1.1.0, for [...]
## Persisting Data
- Data for each container is persisted in a mounted volume.
-- By default it's `data` under the *compose/upgrade/\<versions>* directory,
but can be overridden with the `OZONE_VOLUME` environment variable.
+- By default it's *data* under the
*upgrades/\<upgrade-type>/execution/\<from-version>-\<to-version>* directory,
but can be overridden with the `OZONE_VOLUME` environment variable.
-- This allows data to be persisted in the cluster throughout container
restarts, meaning that tests can check that data written in older versions is
still readable in newer versions.
+- Mounting volumes allows data to be persisted in the cluster throughout
container restarts, meaning that tests can check that data written in older
versions is still readable in newer versions.
- Data will be available after the tests finish for debugging purposes. It
will be erased on a following run of the test.
@@ -83,17 +104,23 @@ Docker compose cluster definitions to be used in upgrade
testing are defined in
### Adding New Tests
-- To add tests to an existing upgrade type, edit its
*compose/upgrade/\<upgrade-type>/\<versions>/callback.sh* file and add commands
in the callback function when they should be run.
+- Tests that should run for all upgrades, regardless of the version being
tested, can be added to *compose/upgrade/\<upgrade-type>/common/callback.sh*.
+
+- Tests that should run only for an upgrade to a specific version can be added
to *compose/upgrade/\<upgrade-type>/\<ending-upgrade-version>/callback.sh*.
-- Each callback file will have access to the following environment variables:
- - `OZONE_UPGRADE_FROM`: The version of ozone being upgraded from.
- - `OZONE_UPGRADE_TO`: The version of ozone being upgraded to.
- - `TEST_DIR`: The top level *upgrade* directory containing all files for
upgrade testing.
+- Add commands in the callback function when they should be run. Each callback
file will have access to the following environment variables:
+ - `OZONE_UPGRADE_FROM`: The version of ozone being upgraded from.
+ - `OZONE_UPGRADE_TO`: The version of ozone being upgraded to.
+ - `TEST_DIR`: The top level *upgrade* directory containing all files for
upgrade testing.
+ - `SCM`: The name of the SCM container to run robot tests from.
+ - This can be passed as the first argument to `execute_robot_test`.
+ - This allows the same tests to work with and without SCM HA.
### Testing New Versions
-- To test upgrade between different versions, add a line `run_test
<upgrade-type> <old-version> <new-version>` to the top level *test.sh* file.
- - The `run_test` function will execute *\<upgrade-type>/test.sh* with the
callbacks defined in
*\<upgrade-type>/\<old-version>-\<new-version>/callback.sh*.
+- To test upgrade between different versions, add a line `run_test
<compose-cluster-directory> <upgrade-type> <old-version> <new-version>` to the
top level *test.sh* file.
+ - The `run_test` function will execute
*upgrades/\<upgrade-type>/driver.sh* with the callbacks defined in
*upgrades/\<upgrade-type>/common/callback.sh* and
*upgrades/\<upgrade-type>/\<new-version>/callback.sh*.
+
+- The variable `OZONE_CURRENT_VERSION` is used to define the version
corresponding to the locally built source code in the `apache/ozone-runner`
image.
+ - All other versions will be treated as tags specifying a released version
of the `apache/ozone` docker image to use.
-- If one of the specified versions does not match the current version defined
by `OZONE_CURRENT_VERSION`, it will be pulled from the corresponding
*apache/ozone* docker image.
- - Else, the current version will be used, which will run the locally built
source code in the `apache/ozone-runner` image.
diff --git
a/hadoop-ozone/dist/src/main/compose/upgrade/compose/ha/docker-compose.yaml
b/hadoop-ozone/dist/src/main/compose/upgrade/compose/ha/docker-compose.yaml
index 7f52d73a8e..af0566aac8 100644
--- a/hadoop-ozone/dist/src/main/compose/upgrade/compose/ha/docker-compose.yaml
+++ b/hadoop-ozone/dist/src/main/compose/upgrade/compose/ha/docker-compose.yaml
@@ -23,27 +23,37 @@ x-common-config:
- docker-config
image: ${OZONE_IMAGE}
-x-replication:
- &replication
+x-environment:
+ &environment
OZONE-SITE.XML_ozone.replication: ${OZONE_REPLICATION_FACTOR:-3}
+ OZONE_UPGRADE_TO: ${OZONE_UPGRADE_TO:-0}
+ OZONE_UPGRADE_FROM: ${OZONE_UPGRADE_FROM:-0}
+ OZONE-SITE.XML_hdds.scm.safemode.min.datanode:
${OZONE_SAFEMODE_MIN_DATANODES:-1}
x-datanode:
&datanode
command: ["ozone","datanode"]
<<: *common-config
environment:
- <<: *replication
+ <<: *environment
ports:
- 9864
- 9882
+x-scm:
+ &scm
+ command: ["ozone","scm"]
+ <<: *common-config
+ ports:
+ - 9876
+
x-om:
&om
command: ["ozone","om","${OM_HA_ARGS}"]
<<: *common-config
environment:
ENSURE_OM_INITIALIZED: /data/metadata/om/current/VERSION
- <<: *replication
+ <<: *environment
ports:
- 9862
- 9872
@@ -81,27 +91,50 @@ services:
- *ozone-dir
- *transformation
- scm:
- command: ["ozone","scm"]
- <<: *common-config
+ scm1:
+ <<: *scm
environment:
ENSURE_SCM_INITIALIZED: /data/metadata/scm/current/VERSION
- OZONE-SITE.XML_hdds.scm.safemode.min.datanode:
${OZONE_SAFEMODE_MIN_DATANODES:-1}
- <<: *replication
+ <<: *environment
networks:
net:
ipv4_address: 10.9.0.14
- ports:
- - 9876:9876
volumes:
- - ${OZONE_VOLUME}/scm:/data
+ - ${OZONE_VOLUME}/scm1:/data
- *ozone-dir
- *transformation
+ scm2:
+ <<: *scm
+ environment:
+ WAITFOR: scm1:9894
+ ENSURE_SCM_BOOTSTRAPPED: /data/metadata/scm/current/VERSION
+ <<: *environment
+ networks:
+ net:
+ ipv4_address: 10.9.0.15
+ volumes:
+ - ${OZONE_VOLUME}/scm2:/data
+ - *ozone-dir
+ - *transformation
+ scm3:
+ <<: *scm
+ environment:
+ WAITFOR: scm2:9894
+ ENSURE_SCM_BOOTSTRAPPED: /data/metadata/scm/current/VERSION
+ <<: *environment
+ networks:
+ net:
+ ipv4_address: 10.9.0.16
+ volumes:
+ - ${OZONE_VOLUME}/scm3:/data
+ - *ozone-dir
+ - *transformation
+
dn1:
<<: *datanode
networks:
net:
- ipv4_address: 10.9.0.15
+ ipv4_address: 10.9.0.17
volumes:
- ${OZONE_VOLUME}/dn1:/data
- *ozone-dir
@@ -110,7 +143,7 @@ services:
<<: *datanode
networks:
net:
- ipv4_address: 10.9.0.16
+ ipv4_address: 10.9.0.18
volumes:
- ${OZONE_VOLUME}/dn2:/data
- *ozone-dir
@@ -119,7 +152,7 @@ services:
<<: *datanode
networks:
net:
- ipv4_address: 10.9.0.17
+ ipv4_address: 10.9.0.19
volumes:
- ${OZONE_VOLUME}/dn3:/data
- *ozone-dir
@@ -128,7 +161,7 @@ services:
<<: *datanode
networks:
net:
- ipv4_address: 10.9.0.18
+ ipv4_address: 10.9.0.20
volumes:
- ${OZONE_VOLUME}/dn4:/data
- *ozone-dir
@@ -137,7 +170,7 @@ services:
<<: *datanode
networks:
net:
- ipv4_address: 10.9.0.19
+ ipv4_address: 10.9.0.21
volumes:
- ${OZONE_VOLUME}/dn5:/data
- *ozone-dir
@@ -146,10 +179,10 @@ services:
command: ["ozone","recon"]
<<: *common-config
environment:
- <<: *replication
+ <<: *environment
networks:
net:
- ipv4_address: 10.9.0.20
+ ipv4_address: 10.9.0.22
ports:
- 9888:9888
volumes:
@@ -160,16 +193,17 @@ services:
command: ["ozone","s3g"]
<<: *common-config
environment:
- <<: *replication
+ <<: *environment
networks:
net:
- ipv4_address: 10.9.0.21
+ ipv4_address: 10.9.0.23
ports:
- 9878:9878
volumes:
- ${OZONE_VOLUME}/s3g:/data
- *ozone-dir
- *transformation
+
networks:
net:
driver: bridge
diff --git
a/hadoop-ozone/dist/src/main/compose/upgrade/compose/ha/docker-config
b/hadoop-ozone/dist/src/main/compose/upgrade/compose/ha/docker-config
index e2540baaa4..e241b69be5 100644
--- a/hadoop-ozone/dist/src/main/compose/upgrade/compose/ha/docker-config
+++ b/hadoop-ozone/dist/src/main/compose/upgrade/compose/ha/docker-config
@@ -24,14 +24,19 @@ OZONE-SITE.XML_ozone.om.address.omservice.om1=om1
OZONE-SITE.XML_ozone.om.address.omservice.om2=om2
OZONE-SITE.XML_ozone.om.address.omservice.om3=om3
OZONE-SITE.XML_ozone.om.ratis.enable=true
+
+OZONE-SITE.XML_ozone.scm.service.ids=scmservice
+OZONE-SITE.XML_ozone.scm.nodes.scmservice=scm1,scm2,scm3
+OZONE-SITE.XML_ozone.scm.address.scmservice.scm1=scm1
+OZONE-SITE.XML_ozone.scm.address.scmservice.scm2=scm2
+OZONE-SITE.XML_ozone.scm.address.scmservice.scm3=scm3
+OZONE-SITE.XML_ozone.scm.ratis.enable=true
+OZONE-SITE.XML_ozone.scm.primordial.node.id=scm1
+
OZONE-SITE.XML_ozone.scm.pipeline.creation.interval=30s
OZONE-SITE.XML_ozone.scm.pipeline.owner.container.count=1
-OZONE-SITE.XML_ozone.scm.names=scm
OZONE-SITE.XML_ozone.scm.datanode.id.dir=/data
-OZONE-SITE.XML_ozone.scm.block.client.address=scm
OZONE-SITE.XML_ozone.scm.container.size=1GB
-OZONE-SITE.XML_ozone.scm.client.address=scm
-
OZONE-SITE.XML_hdds.datanode.dir=/data/hdds
# If SCM sends container close commands as part of upgrade finalization while
@@ -53,6 +58,6 @@ OZONE-SITE.XML_ozone.recon.db.dir=/data/metadata/recon
OZONE-SITE.XML_ozone.recon.om.snapshot.task.interval.delay=1m
OZONE-SITE.XML_ozone.recon.address=recon:9891
-no_proxy=om1,om2,om3,scm,s3g,kdc,localhost,127.0.0.1
+no_proxy=om1,om2,om3,scm1,scm2,scm3,s3g,kdc,localhost,127.0.0.1
OM_SERVICE_ID=omservice
diff --git a/hadoop-ozone/dist/src/main/compose/upgrade/compose/ha/load.sh
b/hadoop-ozone/dist/src/main/compose/upgrade/compose/ha/load.sh
index 43c668804b..59ec12f4c6 100755
--- a/hadoop-ozone/dist/src/main/compose/upgrade/compose/ha/load.sh
+++ b/hadoop-ozone/dist/src/main/compose/upgrade/compose/ha/load.sh
@@ -25,4 +25,6 @@ source "$TEST_DIR/testlib.sh"
export COMPOSE_FILE="$TEST_DIR/compose/ha/docker-compose.yaml"
export OM_SERVICE_ID=omservice
-create_data_dirs
"${OZONE_VOLUME}"/{om1,om2,om3,dn1,dn2,dn3,dn4,dn5,recon,s3g,scm}
+create_data_dirs
"${OZONE_VOLUME}"/{om1,om2,om3,dn1,dn2,dn3,dn4,dn5,recon,s3g,scm1,scm2,scm3}
+
+echo "Using docker cluster defined in $COMPOSE_FILE"
diff --git
a/hadoop-ozone/dist/src/main/compose/upgrade/compose/non-ha/docker-compose.yaml
b/hadoop-ozone/dist/src/main/compose/upgrade/compose/non-ha/docker-compose.yaml
index 14617ccef5..7f35733dc2 100644
---
a/hadoop-ozone/dist/src/main/compose/upgrade/compose/non-ha/docker-compose.yaml
+++
b/hadoop-ozone/dist/src/main/compose/upgrade/compose/non-ha/docker-compose.yaml
@@ -23,16 +23,18 @@ x-common-config:
- docker-config
image: ${OZONE_IMAGE}
-x-replication:
- &replication
+x-environment:
+ &environment
OZONE-SITE.XML_ozone.replication: ${OZONE_REPLICATION_FACTOR:-1}
+ OZONE_UPGRADE_TO: ${OZONE_UPGRADE_TO:-0}
+ OZONE_UPGRADE_FROM: ${OZONE_UPGRADE_FROM:-0}
x-datanode:
&datanode
command: ["ozone","datanode"]
<<: *common-config
environment:
- <<: *replication
+ <<: *environment
ports:
- 9864
- 9882
@@ -47,7 +49,7 @@ services:
<<: *common-config
environment:
ENSURE_OM_INITIALIZED: /data/metadata/om/current/VERSION
- <<: *replication
+ <<: *environment
ports:
- 9862
- 9874
@@ -64,7 +66,7 @@ services:
environment:
ENSURE_SCM_INITIALIZED: /data/metadata/scm/current/VERSION
OZONE-SITE.XML_hdds.scm.safemode.min.datanode:
${OZONE_SAFEMODE_MIN_DATANODES:-1}
- <<: *replication
+ <<: *environment
networks:
net:
ipv4_address: 10.9.0.12
@@ -123,7 +125,7 @@ services:
command: ["ozone","recon"]
<<: *common-config
environment:
- <<: *replication
+ <<: *environment
networks:
net:
ipv4_address: 10.9.0.18
@@ -137,7 +139,7 @@ services:
command: ["ozone","s3g"]
<<: *common-config
environment:
- <<: *replication
+ <<: *environment
networks:
net:
ipv4_address: 10.9.0.19
diff --git a/hadoop-ozone/dist/src/main/compose/upgrade/compose/non-ha/load.sh
b/hadoop-ozone/dist/src/main/compose/upgrade/compose/non-ha/load.sh
index 0e8fc0567f..c1bd0d3724 100755
--- a/hadoop-ozone/dist/src/main/compose/upgrade/compose/non-ha/load.sh
+++ b/hadoop-ozone/dist/src/main/compose/upgrade/compose/non-ha/load.sh
@@ -25,3 +25,5 @@ source "$TEST_DIR/testlib.sh"
export COMPOSE_FILE="$TEST_DIR/compose/non-ha/docker-compose.yaml"
create_data_dirs "${OZONE_VOLUME}"/{om,dn1,dn2,dn3,dn4,dn5,recon,s3g,scm}
+
+echo "Using docker cluster defined in $COMPOSE_FILE"
diff --git a/hadoop-ozone/dist/src/main/compose/upgrade/compose/non-ha/load.sh
b/hadoop-ozone/dist/src/main/compose/upgrade/compose/om-ha/.env
old mode 100755
new mode 100644
similarity index 63%
copy from hadoop-ozone/dist/src/main/compose/upgrade/compose/non-ha/load.sh
copy to hadoop-ozone/dist/src/main/compose/upgrade/compose/om-ha/.env
index 0e8fc0567f..4d1c35c3b2
--- a/hadoop-ozone/dist/src/main/compose/upgrade/compose/non-ha/load.sh
+++ b/hadoop-ozone/dist/src/main/compose/upgrade/compose/om-ha/.env
@@ -1,4 +1,3 @@
-#!/usr/bin/env bash
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
@@ -15,13 +14,14 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-# Fail if required variables are not set.
-set -u
-: "${OZONE_VOLUME}"
-: "${TEST_DIR}"
-set +u
-
-source "$TEST_DIR/testlib.sh"
-
-export COMPOSE_FILE="$TEST_DIR/compose/non-ha/docker-compose.yaml"
-create_data_dirs "${OZONE_VOLUME}"/{om,dn1,dn2,dn3,dn4,dn5,recon,s3g,scm}
+HDDS_VERSION=${hdds.version}
+OZONE_RUNNER_VERSION=${docker.ozone-runner.version}
+OZONE_RUNNER_IMAGE=apache/ozone-runner
+OZONE_IMAGE=apache/ozone-runner:${docker.ozone-runner.version}
+OZONE_DIR=/opt/hadoop
+OZONE_VOLUME=./data
+OM_SERVICE_ID=omservice
+# Indicates no arguments to the OM.
+# This variable must be set to some non-empty value, or docker compose will
+# expand it to an empty string and pass that to the OM as an argument.
+OM_HA_ARGS=--
diff --git
a/hadoop-ozone/dist/src/main/compose/upgrade/compose/ha/docker-compose.yaml
b/hadoop-ozone/dist/src/main/compose/upgrade/compose/om-ha/docker-compose.yaml
similarity index 94%
copy from
hadoop-ozone/dist/src/main/compose/upgrade/compose/ha/docker-compose.yaml
copy to
hadoop-ozone/dist/src/main/compose/upgrade/compose/om-ha/docker-compose.yaml
index 7f52d73a8e..d4f97885aa 100644
--- a/hadoop-ozone/dist/src/main/compose/upgrade/compose/ha/docker-compose.yaml
+++
b/hadoop-ozone/dist/src/main/compose/upgrade/compose/om-ha/docker-compose.yaml
@@ -23,16 +23,18 @@ x-common-config:
- docker-config
image: ${OZONE_IMAGE}
-x-replication:
- &replication
+x-environment:
+ &environment
OZONE-SITE.XML_ozone.replication: ${OZONE_REPLICATION_FACTOR:-3}
+ OZONE_UPGRADE_TO: ${OZONE_UPGRADE_TO:-0}
+ OZONE_UPGRADE_FROM: ${OZONE_UPGRADE_FROM:-0}
x-datanode:
&datanode
command: ["ozone","datanode"]
<<: *common-config
environment:
- <<: *replication
+ <<: *environment
ports:
- 9864
- 9882
@@ -43,7 +45,7 @@ x-om:
<<: *common-config
environment:
ENSURE_OM_INITIALIZED: /data/metadata/om/current/VERSION
- <<: *replication
+ <<: *environment
ports:
- 9862
- 9872
@@ -87,7 +89,7 @@ services:
environment:
ENSURE_SCM_INITIALIZED: /data/metadata/scm/current/VERSION
OZONE-SITE.XML_hdds.scm.safemode.min.datanode:
${OZONE_SAFEMODE_MIN_DATANODES:-1}
- <<: *replication
+ <<: *environment
networks:
net:
ipv4_address: 10.9.0.14
@@ -146,7 +148,7 @@ services:
command: ["ozone","recon"]
<<: *common-config
environment:
- <<: *replication
+ <<: *environment
networks:
net:
ipv4_address: 10.9.0.20
@@ -160,7 +162,7 @@ services:
command: ["ozone","s3g"]
<<: *common-config
environment:
- <<: *replication
+ <<: *environment
networks:
net:
ipv4_address: 10.9.0.21
diff --git
a/hadoop-ozone/dist/src/main/compose/upgrade/compose/ha/docker-config
b/hadoop-ozone/dist/src/main/compose/upgrade/compose/om-ha/docker-config
similarity index 100%
copy from hadoop-ozone/dist/src/main/compose/upgrade/compose/ha/docker-config
copy to hadoop-ozone/dist/src/main/compose/upgrade/compose/om-ha/docker-config
diff --git a/hadoop-ozone/dist/src/main/compose/upgrade/compose/ha/load.sh
b/hadoop-ozone/dist/src/main/compose/upgrade/compose/om-ha/load.sh
similarity index 89%
copy from hadoop-ozone/dist/src/main/compose/upgrade/compose/ha/load.sh
copy to hadoop-ozone/dist/src/main/compose/upgrade/compose/om-ha/load.sh
index 43c668804b..a2f2603414 100755
--- a/hadoop-ozone/dist/src/main/compose/upgrade/compose/ha/load.sh
+++ b/hadoop-ozone/dist/src/main/compose/upgrade/compose/om-ha/load.sh
@@ -23,6 +23,8 @@ set +u
source "$TEST_DIR/testlib.sh"
-export COMPOSE_FILE="$TEST_DIR/compose/ha/docker-compose.yaml"
+export COMPOSE_FILE="$TEST_DIR/compose/om-ha/docker-compose.yaml"
export OM_SERVICE_ID=omservice
create_data_dirs
"${OZONE_VOLUME}"/{om1,om2,om3,dn1,dn2,dn3,dn4,dn5,recon,s3g,scm}
+
+echo "Using docker cluster defined in $COMPOSE_FILE"
diff --git a/hadoop-ozone/dist/src/main/compose/upgrade/test.sh
b/hadoop-ozone/dist/src/main/compose/upgrade/test.sh
index b0cdf877e6..a267080bb1 100755
--- a/hadoop-ozone/dist/src/main/compose/upgrade/test.sh
+++ b/hadoop-ozone/dist/src/main/compose/upgrade/test.sh
@@ -17,9 +17,6 @@
#suite:compat
-# Version that will be run using the local build.
-: "${OZONE_CURRENT_VERSION:=1.3.0}"
-export OZONE_CURRENT_VERSION
TEST_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )
source "$TEST_DIR/testlib.sh"
@@ -35,8 +32,13 @@ RESULT_DIR="$ALL_RESULT_DIR" create_results_dir
# Upgrade tests to be run. In CI we want to run just one set, but for a release
# we might advise the release manager to run the full matrix.
-#run_test non-rolling-upgrade 1.1.0 1.3.0
-run_test non-rolling-upgrade 1.2.1 1.3.0
+
+# This is the version of Ozone that should use the runner image to run the
+# code that was built. Other versions will pull images from docker hub.
+export OZONE_CURRENT_VERSION=1.4.0
+run_test ha non-rolling-upgrade 1.3.0 "$OZONE_CURRENT_VERSION"
+# run_test ha non-rolling-upgrade 1.2.1 "$OZONE_CURRENT_VERSION"
+# run_test om-ha non-rolling-upgrade 1.1.0 "$OZONE_CURRENT_VERSION"
generate_report "upgrade" "$ALL_RESULT_DIR"
diff --git a/hadoop-ozone/dist/src/main/compose/upgrade/testlib.sh
b/hadoop-ozone/dist/src/main/compose/upgrade/testlib.sh
index b3fa1df3bc..099134e938 100755
--- a/hadoop-ozone/dist/src/main/compose/upgrade/testlib.sh
+++ b/hadoop-ozone/dist/src/main/compose/upgrade/testlib.sh
@@ -17,11 +17,6 @@
set -e -o pipefail
-# Fail if required variables are not set.
-set -u
-: "${OZONE_CURRENT_VERSION}"
-set +u
-
_upgrade_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd
)"
# Cumulative result of all tests run with run_test function.
@@ -29,7 +24,6 @@ _upgrade_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )"
>/dev/null 2>&1 && pwd )"
: "${RESULT:=0}"
: "${OZONE_REPLICATION_FACTOR:=3}"
: "${OZONE_VOLUME_OWNER:=}"
-: "${OZONE_CURRENT_VERSION:=}"
: "${ALL_RESULT_DIR:="$_upgrade_dir"/result}"
# export for docker-compose
@@ -53,7 +47,8 @@ create_data_dirs() {
## @description Prepares to run an image with `start_docker_env`.
## @param the version of Ozone to be run.
-## If this is equal to `OZONE_CURRENT_VERSION`, then the ozone runner image
wil be used.
+## If this is equal to the string 'current', then the ozone runner image will
+# be used.
## Else, a binary image will be used.
prepare_for_image() {
local image_version="$1"
@@ -65,96 +60,70 @@ prepare_for_image() {
fi
}
-## @description Runs a callback function only if it exists.
+## @description Run the common callback function first, then the one specific
to
+## the upgrade being tested if one exists. If neither exists, print a
+## warning that nothing was tested.
## @param The name of the function to run.
callback() {
local func="$1"
- if [[ "$(type -t "$func")" = function ]]; then
- "$func"
- else
- echo "Skipping callback $func. No function implementation found."
- fi
+
+ set -u
+ : "${OZONE_UPGRADE_CALLBACK}"
+ : "${OZONE_COMMON_CALLBACK}"
+ set +u
+
+ (
+ # Common callback always exists.
+ source "$OZONE_COMMON_CALLBACK"
+ if [[ "$(type -t "$func")" = function ]]; then
+ "$func"
+ fi
+ )
+
+ (
+ # Version specific callback is optional.
+ if [[ -f "$OZONE_UPGRADE_CALLBACK" ]]; then
+ source "$OZONE_UPGRADE_CALLBACK"
+ if [[ "$(type -t "$func")" = function ]]; then
+ "$func"
+ fi
+ fi
+ )
}
-## @description Sets up and runs the test defined by "$1"/test.sh.
-## @param The directory for the upgrade type whose test.sh file will be run.
+## @description Sets up and runs the upgrade test using the provided ozone
+# versions and docker compose cluster.
+## @param The directory with a load.sh file that can be sourced to load the
+# docker compose cluster to run the test in.
+## @param The directory of the upgrade type to run.
## @param The version of Ozone to upgrade from.
## @param The version of Ozone to upgrade to.
run_test() {
+ local compose_cluster="$1"
+ local upgrade_type="$2"
+ export OZONE_UPGRADE_FROM="$3"
+ export OZONE_UPGRADE_TO="$4"
+
+ local test_dir="$_upgrade_dir/upgrades/$upgrade_type"
+ local callback_dir="$test_dir"/callbacks
+ local
execution_dir="$test_dir"/execution/"${OZONE_UPGRADE_FROM}-${OZONE_UPGRADE_TO}"
+ local compose_dir="$_upgrade_dir"/compose/"$compose_cluster"
# Export variables needed by test, since it is run in a subshell.
- local test_dir="$_upgrade_dir/upgrades/$1"
- export OZONE_UPGRADE_FROM="$2"
- export OZONE_UPGRADE_TO="$3"
- local test_subdir="$test_dir"/"$OZONE_UPGRADE_FROM"-"$OZONE_UPGRADE_TO"
- export OZONE_UPGRADE_CALLBACK="$test_subdir"/callback.sh
- export OZONE_VOLUME="$test_subdir"/data
- export RESULT_DIR="$test_subdir"/result
+ export OZONE_UPGRADE_CALLBACK="$callback_dir"/"$OZONE_UPGRADE_TO"/callback.sh
+ export OZONE_COMMON_CALLBACK="$callback_dir"/common/callback.sh
+ export OZONE_VOLUME="$execution_dir"/data
+ export RESULT_DIR="$execution_dir"/result
+
+ # Load docker compose setup.
+ source "$compose_dir"/load.sh
+
+ # The container to run test commands from. Use one of the SCM containers,
+ # but SCM HA may or may not be used.
+ export SCM="$(docker compose --project-directory="$compose_dir" config
--services | grep --max-count=1 scm)"
if ! run_test_script "$test_dir" ./driver.sh; then
RESULT=1
fi
- copy_results "$test_subdir" "$ALL_RESULT_DIR"
-}
-
-## @description Generates data on the cluster.
-## @param The prefix to use for data generated.
-## @param All parameters after the first one are passed directly to the robot
command,
-## see
https://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#all-command-line-options
-generate() {
- execute_robot_test scm -v PREFIX:"$1" ${@:2} upgrade/generate.robot
-}
-
-## @description Validates that data exists on the cluster.
-## @param The prefix of the data to be validated.
-## @param All parameters after the first one are passed directly to the robot
command,
-## see
https://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#all-command-line-options
-validate() {
- execute_robot_test scm -v PREFIX:"$1" ${@:2} upgrade/validate.robot
+ copy_results "$execution_dir" "$ALL_RESULT_DIR"
}
-
-## @description Checks that the metadata layout version of the provided node
matches what is expected.
-## @param The name of the docker-compose service to run the check on.
-## @param The path to the VERSION file in the container.
-## @param The metadata layout version expected for that service.
-check_mlv() {
- service="$1"
- container_id="$(docker container ps --quiet --filter "name=$service")"
-
- # If some containers go down during the test run due to resources issues,
- # just print a message instead of failing the test.
- if [[ -n "$container_id" ]]; then
- execute_robot_test "$service" -v VERSION_FILE:"$2" -v VERSION:"$3"
upgrade/check-mlv.robot
- else
- echo "No matching containers for docker-compose service $service found.
Skipping MLV check."
- fi
-}
-
-## @description Checks that the metadata layout version of a datanode matches
what is expected.
-## @param The name of the docker-compose service to run the check on.
-## @param The metadata layout version expected for that service.
-check_dn_mlv() {
- check_mlv "$1" /data/metadata/dnlayoutversion/VERSION "$2"
-}
-
-## @description Checks that the metadata layout version of an OM matches what
is expected.
-## @param The name of the docker-compose service to run the check on.
-## @param The metadata layout version expected for that service.
-check_om_mlv() {
- check_mlv "$1" /data/metadata/om/current/VERSION "$2"
-}
-
-## @description Checks that the metadata layout version of an SCM matches what
is expected.
-## @param The name of the docker-compose service to run the check on.
-## @param The metadata layout version expected for that service.
-check_scm_mlv() {
- check_mlv "$1" /data/metadata/scm/current/VERSION "$2"
-}
-
-check_ec_is_disabled() {
- execute_robot_test scm --include pre-finalized-ec-tests
ec/upgrade-ec-check.robot
-}
-
-check_ec_is_enabled() {
- execute_robot_test scm --include post-finalized-ec-tests
ec/upgrade-ec-check.robot
-}
\ No newline at end of file
diff --git
a/hadoop-ozone/dist/src/main/compose/upgrade/upgrades/manual-upgrade/driver.sh
b/hadoop-ozone/dist/src/main/compose/upgrade/upgrades/manual-upgrade/driver.sh
index de016bf10b..fe61887580 100755
---
a/hadoop-ozone/dist/src/main/compose/upgrade/upgrades/manual-upgrade/driver.sh
+++
b/hadoop-ozone/dist/src/main/compose/upgrade/upgrades/manual-upgrade/driver.sh
@@ -47,10 +47,10 @@ stop_docker_env
echo "--- SETTING UP NEW VERSION $OZONE_UPGRADE_TO ---"
OUTPUT_NAME="$OZONE_UPGRADE_TO"
prepare_for_image "$OZONE_UPGRADE_TO"
-callback setup_new_version
+callback setup_this_version
echo "--- RUNNING WITH NEW VERSION $OZONE_UPGRADE_TO ---"
OZONE_KEEP_RESULTS=true start_docker_env
-callback with_new_version
+callback with_this_version
stop_docker_env
diff --git
a/hadoop-ozone/dist/src/main/compose/upgrade/upgrades/non-rolling-upgrade/1.2.1-1.3.0/callback.sh
b/hadoop-ozone/dist/src/main/compose/upgrade/upgrades/non-rolling-upgrade/1.2.1-1.3.0/callback.sh
deleted file mode 100755
index 3666730085..0000000000
---
a/hadoop-ozone/dist/src/main/compose/upgrade/upgrades/non-rolling-upgrade/1.2.1-1.3.0/callback.sh
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/usr/bin/env bash
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-source "$TEST_DIR"/testlib.sh
-
-# Helper function, not a callback.
-_check_hdds_mlvs() {
- mlv="$1"
- check_scm_mlv scm "$mlv"
- check_dn_mlv dn1 "$mlv"
- check_dn_mlv dn2 "$mlv"
- check_dn_mlv dn3 "$mlv"
-}
-
-# Helper function, not a callback.
-_check_om_mlvs() {
- mlv="$1"
- check_om_mlv om1 "$mlv"
- check_om_mlv om2 "$mlv"
- check_om_mlv om3 "$mlv"
-}
-
-setup() {
- export OZONE_OM_PREPARE='true'
-}
-
-with_old_version() {
- generate old1
- validate old1
-}
-
-with_new_version_pre_finalized() {
- _check_hdds_mlvs 2
- _check_om_mlvs 0
-
- validate old1
-# HDDS-6261: overwrite the same keys intentionally
- generate old1 --exclude create-volume-and-bucket
-
- generate new1
- validate new1
-
- check_ec_is_disabled
-}
-
-with_old_version_downgraded() {
- validate old1
- validate new1
-
- generate old2
- validate old2
-
- # HDDS-6261: overwrite the same keys again to trigger the precondition check
- # that exists <= 1.1.0 OM
- generate old1 --exclude create-volume-and-bucket
-}
-
-with_new_version_finalized() {
- _check_hdds_mlvs 4
- _check_om_mlvs 3
-
- validate old1
- validate new1
- validate old2
-
- generate new2
- validate new2
-
- check_ec_is_enabled
-}
diff --git a/hadoop-ozone/dist/src/main/compose/upgrade/compose/non-ha/load.sh
b/hadoop-ozone/dist/src/main/compose/upgrade/upgrades/non-rolling-upgrade/callbacks/1.3.0/callback.sh
similarity index 61%
copy from hadoop-ozone/dist/src/main/compose/upgrade/compose/non-ha/load.sh
copy to
hadoop-ozone/dist/src/main/compose/upgrade/upgrades/non-rolling-upgrade/callbacks/1.3.0/callback.sh
index 0e8fc0567f..eb8f0ba6dc 100755
--- a/hadoop-ozone/dist/src/main/compose/upgrade/compose/non-ha/load.sh
+++
b/hadoop-ozone/dist/src/main/compose/upgrade/upgrades/non-rolling-upgrade/callbacks/1.3.0/callback.sh
@@ -15,13 +15,16 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-# Fail if required variables are not set.
-set -u
-: "${OZONE_VOLUME}"
-: "${TEST_DIR}"
-set +u
+source "$TEST_DIR"/testlib.sh
-source "$TEST_DIR/testlib.sh"
+with_this_version_pre_finalized() {
+ # New layout features were added in this version, so OM and SCM should be
+ # pre-finalized.
+ execute_robot_test "$SCM" --include pre-finalized
upgrade/check-finalization.robot
+ # Test that EC is disabled when pre-finalized.
+ execute_robot_test "$SCM" --include pre-finalized-ec-tests
ec/upgrade-ec-check.robot
+}
-export COMPOSE_FILE="$TEST_DIR/compose/non-ha/docker-compose.yaml"
-create_data_dirs "${OZONE_VOLUME}"/{om,dn1,dn2,dn3,dn4,dn5,recon,s3g,scm}
+with_this_version_finalized() {
+ execute_robot_test "$SCM" --include post-finalized-ec-tests
ec/upgrade-ec-check.robot
+}
diff --git
a/hadoop-ozone/dist/src/main/compose/upgrade/upgrades/non-rolling-upgrade/1.1.0-1.2.0/callback.sh
b/hadoop-ozone/dist/src/main/compose/upgrade/upgrades/non-rolling-upgrade/callbacks/common/callback.sh
similarity index 52%
rename from
hadoop-ozone/dist/src/main/compose/upgrade/upgrades/non-rolling-upgrade/1.1.0-1.2.0/callback.sh
rename to
hadoop-ozone/dist/src/main/compose/upgrade/upgrades/non-rolling-upgrade/callbacks/common/callback.sh
index 8bf5fd13fb..76d45deed7 100755
---
a/hadoop-ozone/dist/src/main/compose/upgrade/upgrades/non-rolling-upgrade/1.1.0-1.2.0/callback.sh
+++
b/hadoop-ozone/dist/src/main/compose/upgrade/upgrades/non-rolling-upgrade/callbacks/common/callback.sh
@@ -17,37 +17,35 @@
source "$TEST_DIR"/testlib.sh
-# Helper function, not a callback.
-_check_hdds_mlvs() {
- mlv="$1"
- check_scm_mlv scm "$mlv"
- check_dn_mlv dn1 "$mlv"
- check_dn_mlv dn2 "$mlv"
- check_dn_mlv dn3 "$mlv"
-}
+### HELPER METHODS ###
-# Helper function, not a callback.
-_check_om_mlvs() {
- mlv="$1"
- check_om_mlv om1 "$mlv"
- check_om_mlv om2 "$mlv"
- check_om_mlv om3 "$mlv"
+## @description Generates data on the cluster.
+## @param The prefix to use for data generated.
+## @param All parameters after the first one are passed directly to the robot
command,
+## see
https://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#all-command-line-options
+generate() {
+ execute_robot_test "$SCM" -v PREFIX:"$1" ${@:2} upgrade/generate.robot
}
-setup() {
- # OM preparation is not implemented until 1.2.0.
- export OZONE_OM_PREPARE='false'
+## @description Validates that data exists on the cluster.
+## @param The prefix of the data to be validated.
+## @param All parameters after the first one are passed directly to the robot
command,
+## see
https://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#all-command-line-options
+validate() {
+ execute_robot_test "$SCM" -v PREFIX:"$1" ${@:2} upgrade/validate.robot
}
+### CALLBACKS ###
+
with_old_version() {
+ execute_robot_test "$SCM" --include finalized
upgrade/check-finalization.robot
generate old1
validate old1
}
-with_new_version_pre_finalized() {
- _check_hdds_mlvs 0
- _check_om_mlvs 0
-
+with_this_version_pre_finalized() {
+ # No check for pre-finalized status here, because the release may not have
+ # added layout features to OM or HDDS.
validate old1
# HDDS-6261: overwrite the same keys intentionally
generate old1 --exclude create-volume-and-bucket
@@ -57,6 +55,7 @@ with_new_version_pre_finalized() {
}
with_old_version_downgraded() {
+ execute_robot_test "$SCM" --include finalized
upgrade/check-finalization.robot
validate old1
validate new1
@@ -68,11 +67,8 @@ with_old_version_downgraded() {
generate old1 --exclude create-volume-and-bucket
}
-with_new_version_finalized() {
- _check_hdds_mlvs 2
- # In Ozone 1.2.0, OM has only one layout version.
- _check_om_mlvs 0
-
+with_this_version_finalized() {
+ execute_robot_test "$SCM" --include finalized
upgrade/check-finalization.robot
validate old1
validate new1
validate old2
diff --git
a/hadoop-ozone/dist/src/main/compose/upgrade/upgrades/non-rolling-upgrade/driver.sh
b/hadoop-ozone/dist/src/main/compose/upgrade/upgrades/non-rolling-upgrade/driver.sh
index 7b95238bf1..0bb2c38967 100755
---
a/hadoop-ozone/dist/src/main/compose/upgrade/upgrades/non-rolling-upgrade/driver.sh
+++
b/hadoop-ozone/dist/src/main/compose/upgrade/upgrades/non-rolling-upgrade/driver.sh
@@ -26,27 +26,18 @@ set -u
: "${OZONE_UPGRADE_FROM}"
: "${OZONE_UPGRADE_TO}"
: "${TEST_DIR}"
-: "${OZONE_UPGRADE_CALLBACK}"
+: "${SCM}"
+: "${OZONE_CURRENT_VERSION}"
set +u
echo "--- RUNNING NON-ROLLING UPGRADE TEST FROM $OZONE_UPGRADE_FROM TO
$OZONE_UPGRADE_TO ---"
-# Prepare OMs before upgrade unless this variable is not 'true'.
-: "${OZONE_PREPARE_OMS:='true'}"
-
-# Default compose cluster to use. May be overridden by callback.sh.
-source "$TEST_DIR"/compose/ha/load.sh
source "$TEST_DIR"/testlib.sh
-[[ -f "$OZONE_UPGRADE_CALLBACK" ]] && source "$OZONE_UPGRADE_CALLBACK"
-
-prepare_oms() {
- if [[ "$OZONE_PREPARE_OMS" = 'true' ]]; then
- execute_robot_test scm upgrade/prepare.robot
- fi
-}
set_downgrade_om_args() {
- if [[ "$OZONE_PREPARE_OMS" = 'true' ]]; then
+ # 1.1.0 Is the earliest version we support upgrade/downgrade to, but it did
+ # not have OM prepare.
+ if [[ "$OZONE_UPGRADE_FROM" != '1.1.0' ]]; then
export OM_HA_ARGS='--downgrade'
else
export OM_HA_ARGS='--'
@@ -54,8 +45,7 @@ set_downgrade_om_args() {
}
echo "--- SETTING UP OLD VERSION $OZONE_UPGRADE_FROM ---"
-OUTPUT_NAME="$OZONE_UPGRADE_FROM"
-callback setup
+OUTPUT_NAME="$OZONE_UPGRADE_FROM"-original
export OM_HA_ARGS='--'
prepare_for_image "$OZONE_UPGRADE_FROM"
@@ -63,7 +53,7 @@ echo "--- RUNNING WITH OLD VERSION $OZONE_UPGRADE_FROM ---"
start_docker_env
callback with_old_version
-prepare_oms
+execute_robot_test "$SCM" upgrade/prepare.robot
stop_docker_env
prepare_for_image "$OZONE_UPGRADE_TO"
export OM_HA_ARGS='--upgrade'
@@ -71,8 +61,8 @@ export OM_HA_ARGS='--upgrade'
echo "--- RUNNING WITH NEW VERSION $OZONE_UPGRADE_TO PRE-FINALIZED ---"
OUTPUT_NAME="$OZONE_UPGRADE_TO"-pre-finalized
OZONE_KEEP_RESULTS=true start_docker_env
-callback with_new_version_pre_finalized
-prepare_oms
+callback with_this_version_pre_finalized
+execute_robot_test "$SCM" upgrade/prepare.robot
stop_docker_env
prepare_for_image "$OZONE_UPGRADE_FROM"
set_downgrade_om_args
@@ -82,7 +72,7 @@ OUTPUT_NAME="$OZONE_UPGRADE_FROM"-downgraded
OZONE_KEEP_RESULTS=true start_docker_env
callback with_old_version_downgraded
-prepare_oms
+execute_robot_test "$SCM" upgrade/prepare.robot
stop_docker_env
prepare_for_image "$OZONE_UPGRADE_TO"
export OM_HA_ARGS='--upgrade'
@@ -92,8 +82,8 @@ OUTPUT_NAME="$OZONE_UPGRADE_TO"-finalized
OZONE_KEEP_RESULTS=true start_docker_env
# Sends commands to finalize OM and SCM.
-execute_robot_test scm upgrade/finalize.robot
-callback with_new_version_finalized
+execute_robot_test "$SCM" upgrade/finalize.robot
+callback with_this_version_finalized
stop_docker_env
generate_report
diff --git
a/hadoop-ozone/dist/src/main/smoketest/upgrade/check-finalization.robot
b/hadoop-ozone/dist/src/main/smoketest/upgrade/check-finalization.robot
new file mode 100644
index 0000000000..0c73a777b5
--- /dev/null
+++ b/hadoop-ozone/dist/src/main/smoketest/upgrade/check-finalization.robot
@@ -0,0 +1,50 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+*** Settings ***
+Documentation Finalize Upgrade of the Ozone cluster
+Resource ../commonlib.robot
+Test Timeout 10 minutes
+Test Setup Run Keyword if '${SECURITY_ENABLED}' == 'true' Kinit
test user testuser testuser.keytab
+
+*** Test Cases ***
+Check OM Finalized
+ [Tags] om finalized
+ ${result} = Execute env
+ Log ${result}
+ Pass Execution If '%{OZONE_UPGRADE_FROM}' == '1.1.0' OM finalization
not supported in version %{OZONE_UPGRADE_FROM}
+ ${result} = Execute ozone admin om finalizationstatus
+ Log ${result}
+ Should Contain Any ${result} ALREADY_FINALIZED
FINALIZATION_DONE
+
+Check SCM Finalized
+ [Tags] scm finalized
+ Pass Execution If '%{OZONE_UPGRADE_FROM}' == '1.1.0' HDDS
finalization not supported in version %{OZONE_UPGRADE_FROM}
+ ${result} = Execute ozone admin scm finalizationstatus
+ Log ${result}
+ Should Contain Any ${result} ALREADY_FINALIZED
FINALIZATION_DONE
+
+Check OM Pre Finalized
+ [Tags] om pre-finalized
+ ${result} = Execute ozone admin om finalizationstatus
+ Log ${result}
+ Should Contain Any ${result} FINALIZATION_REQUIRED
+
+Check SCM Pre Finalized
+ [Tags] scm pre-finalized
+ ${result} = Execute ozone admin scm finalizationstatus
+ Log ${result}
+ Should Contain Any ${result} FINALIZATION_REQUIRED
+
diff --git a/hadoop-ozone/dist/src/main/smoketest/upgrade/check-mlv.robot
b/hadoop-ozone/dist/src/main/smoketest/upgrade/check-mlv.robot
deleted file mode 100644
index 271b6dd175..0000000000
--- a/hadoop-ozone/dist/src/main/smoketest/upgrade/check-mlv.robot
+++ /dev/null
@@ -1,41 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-*** Settings ***
-Documentation Check Metadata layout version present in a version file.
-Library OperatingSystem
-Library BuiltIn
-Resource ../commonlib.robot
-Test Timeout 5 minutes
-
-*** Variables ***
-${version_prefix} layoutVersion=
-
-*** Keywords ***
-Check version
- ${version_file_contents} = Get file ${VERSION_FILE}
- ${version_line} = Catenate SEPARATOR= ${version_prefix}
${VERSION}
- Should contain ${version_file_contents} ${version_line}
-
-*** Test Cases ***
-Check MLV
- # Fail if required variables are not set.
- Should not be empty ${VERSION_FILE}
- Should not be empty ${VERSION}
-
- File should exist ${VERSION_FILE}
- File should not be empty ${VERSION_FILE}
-
- Wait until keyword succeeds 3min 10sec Check version
diff --git a/hadoop-ozone/dist/src/main/smoketest/upgrade/finalize.robot
b/hadoop-ozone/dist/src/main/smoketest/upgrade/finalize.robot
index 521147ff6a..535b22b0a3 100644
--- a/hadoop-ozone/dist/src/main/smoketest/upgrade/finalize.robot
+++ b/hadoop-ozone/dist/src/main/smoketest/upgrade/finalize.robot
@@ -14,18 +14,16 @@
# limitations under the License.
*** Settings ***
-Documentation Finalize Upgrade of OMs and SCM
+Documentation Finalize Upgrade of the Ozone cluster
Resource ../commonlib.robot
Test Timeout 10 minutes
Test Setup Run Keyword if '${SECURITY_ENABLED}' == 'true' Kinit
test user testuser testuser.keytab
*** Test Cases ***
-Finalize SCM
+Finalize HDDS
${result} = Execute ozone admin scm finalizeupgrade
- #Wait Until Keyword Succeeds 3min 10sec
Should contain ${result} OM Preparation successful!
Log ${result}
Finalize OMs
${result} = Execute ozone admin om finalizeupgrade -id
%{OM_SERVICE_ID}
- #Wait Until Keyword Succeeds 3min 10sec
Should contain ${result} OM Preparation successful!
Log ${result}
diff --git a/hadoop-ozone/dist/src/main/smoketest/upgrade/prepare.robot
b/hadoop-ozone/dist/src/main/smoketest/upgrade/prepare.robot
index b1b4095d6e..b0cd8a5ba6 100644
--- a/hadoop-ozone/dist/src/main/smoketest/upgrade/prepare.robot
+++ b/hadoop-ozone/dist/src/main/smoketest/upgrade/prepare.robot
@@ -21,6 +21,7 @@ Test Setup Run Keyword if '${SECURITY_ENABLED}'
== 'true' Kinit t
*** Test Cases ***
Prepare Ozone Manager
+ Pass Execution If '%{OZONE_UPGRADE_FROM}' == '1.1.0' OM prepare is
skipped for version %{OZONE_UPGRADE_FROM}
${result} = Execute ozone admin om prepare -id %{OM_SERVICE_ID}
Wait Until Keyword Succeeds 3min 10sec
Should contain ${result} OM Preparation successful!
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]