This is an automated email from the ASF dual-hosted git repository.
jlewandowski pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra-dtest.git
The following commit(s) were added to refs/heads/trunk by this push:
new bb5e2335 Remove incompatible versions in upgrade manifest
bb5e2335 is described below
commit bb5e2335ecdfa15fc2d8d6c21b1cf7933c9b5002
Author: Jacek Lewandowski <[email protected]>
AuthorDate: Fri Jul 28 11:23:17 2023 +0200
Remove incompatible versions in upgrade manifest
---
upgrade_tests/upgrade_manifest.py | 48 +++++++++++++++++++++-----
upgrade_tests/upgrade_through_versions_test.py | 38 ++++----------------
2 files changed, 45 insertions(+), 41 deletions(-)
diff --git a/upgrade_tests/upgrade_manifest.py
b/upgrade_tests/upgrade_manifest.py
index 5ae106d4..f7838cb5 100644
--- a/upgrade_tests/upgrade_manifest.py
+++ b/upgrade_tests/upgrade_manifest.py
@@ -5,7 +5,7 @@ import os
from collections import namedtuple
import ccmlib.repository
-from ccmlib.common import get_version_from_build
+from ccmlib.common import get_version_from_build, get_jdk_version_int
from enum import Enum
@@ -206,6 +206,35 @@ def _have_common_proto(origin_meta, destination_meta):
"""
return origin_meta.max_proto_v >= destination_meta.min_proto_v
+def current_env_java_version():
+ # $JAVA_HOME/bin/java takes precedence over any java found in $PATH
+ if 'JAVA_HOME' in os.environ:
+ java_command = os.path.join(os.environ['JAVA_HOME'], 'bin', 'java')
+ else:
+ java_command = 'java'
+
+ return get_jdk_version_int(java_command)
+
+CURRENT_JAVA_VERSION = current_env_java_version()
+
+def jdk_compatible_steps(version_metas):
+ metas = []
+ for version_meta in version_metas:
+ # if you want multi-step upgrades to work with versions that require
different jdks
+ # then define the JAVA<jdk_version>_HOME vars (e.g. JAVA8_HOME)
+ # ccm detects these variables and changes the jdk when
starting/upgrading the node
+ # otherwise the default behaviour is to only do upgrade steps that
work with the current jdk
+ javan_home_defined = False
+ for meta_java_version in version_meta.java_versions:
+ javan_home_defined |= 'JAVA{}_HOME'.format(meta_java_version) in
os.environ
+ if CURRENT_JAVA_VERSION in version_meta.java_versions or
javan_home_defined:
+ metas.append(version_meta)
+ else:
+ logger.info("Skipping version {} because it requires JDK {}.
Current JDK is {} and none of {} env variables are defined."
+ .format(version_meta.version,
version_meta.java_versions, CURRENT_JAVA_VERSION, ["JAVA{}_HOME".format(v) for
v in version_meta.java_versions]))
+
+ return metas
+
def build_upgrade_pairs():
"""
Using the manifest (above), builds a set of valid upgrades, according to
current testing practices.
@@ -248,14 +277,15 @@ def build_upgrade_pairs():
logger.debug("{} appears applicable to current env.
Overriding final test version from {} to {}".format(path_name, oldmeta.version,
newmeta.version))
destination_meta = newmeta
- valid_upgrade_pairs.append(
- UpgradePath(
- name=path_name,
- starting_version=origin_meta.version,
- upgrade_version=destination_meta.version,
- starting_meta=origin_meta,
- upgrade_meta=destination_meta
+ if len(jdk_compatible_steps([origin_meta, destination_meta])) > 1:
+ valid_upgrade_pairs.append(
+ UpgradePath(
+ name=path_name,
+ starting_version=origin_meta.version,
+ upgrade_version=destination_meta.version,
+ starting_meta=origin_meta,
+ upgrade_meta=destination_meta
+ )
)
- )
return valid_upgrade_pairs
diff --git a/upgrade_tests/upgrade_through_versions_test.py
b/upgrade_tests/upgrade_through_versions_test.py
index 79e8acf0..33972104 100644
--- a/upgrade_tests/upgrade_through_versions_test.py
+++ b/upgrade_tests/upgrade_through_versions_test.py
@@ -11,7 +11,6 @@ import signal
import time
import uuid
-from ccmlib.common import get_jdk_version_int
from collections import defaultdict, namedtuple
from multiprocessing import Process, Queue
from queue import Empty, Full
@@ -21,13 +20,12 @@ from cassandra.query import SimpleStatement
from dtest import Tester
from tools.misc import generate_ssl_stores, new_node
-from .upgrade_manifest import (build_upgrade_pairs,
- current_2_2_x,
+from .upgrade_manifest import (build_upgrade_pairs, jdk_compatible_steps,
current_2_2_x,
current_3_0_x, current_3_11_x,
current_4_0_x, current_4_1_x,
indev_trunk,
CASSANDRA_4_0, CASSANDRA_5_0,
- RUN_STATIC_UPGRADE_MATRIX)
+ RUN_STATIC_UPGRADE_MATRIX, CURRENT_JAVA_VERSION)
logger = logging.getLogger(__name__)
@@ -327,6 +325,10 @@ class TestUpgrade(Tester):
def prepare(self):
if type(self).__name__ == "TestUpgrade":
pytest.skip("Skip base class, only generated classes run the
tests")
+
+ if len(self.test_version_metas) < 2: # need at least two versions to
upgrade through - if it is less, it means that we cannot find needed JDKs for
running all versions
+ pytest.skip("Skipping upgrade test, not enough versions to upgrade
through: {} - see the previous messages for more information".format(metas))
+
logger.debug("Upgrade test beginning, setting CASSANDRA_VERSION to {},
and jdk to {}. (Prior values will be restored after test)."
.format(self.test_version_metas[0].version,
self.test_version_metas[0].java_version))
cluster = self.cluster
@@ -886,34 +888,6 @@ def create_upgrade_class(clsname, version_metas,
protocol_version,
return newcls
-def jdk_compatible_steps(version_metas):
- metas = []
- for version_meta in version_metas:
- # if you want multi-step upgrades to work with versions that require
different jdks
- # then define the JAVA<jdk_version>_HOME vars (e.g. JAVA8_HOME)
- # ccm detects these variables and changes the jdk when
starting/upgrading the node
- # otherwise the default behaviour is to only do upgrade steps that
work with the current jdk
- javan_home_defined = False
- for meta_java_version in version_meta.java_versions:
- javan_home_defined |= 'JAVA{}_HOME'.format(meta_java_version) in
os.environ
- if CURRENT_JAVA_VERSION in version_meta.java_versions or
javan_home_defined:
- metas.append(version_meta)
-
- return metas
-
-
-def current_env_java_version():
- # $JAVA_HOME/bin/java takes precedence over any java found in $PATH
- if 'JAVA_HOME' in os.environ:
- java_command = os.path.join(os.environ['JAVA_HOME'], 'bin', 'java')
- else:
- java_command = 'java'
-
- return get_jdk_version_int(java_command)
-
-
-CURRENT_JAVA_VERSION = current_env_java_version()
-
MultiUpgrade = namedtuple('MultiUpgrade', ('name', 'version_metas',
'protocol_version', 'extra_config'))
MULTI_UPGRADES = (
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]