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]

Reply via email to