This is an automated email from the ASF dual-hosted git repository.

mck 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 4f6f06c6 For upgrade tests correctly use cassandra_version over 
version, and set protocol_version to highest source version supports
4f6f06c6 is described below

commit 4f6f06c66e4247072bda6587db52e4dc24dfb784
Author: mck <m...@apache.org>
AuthorDate: Wed Apr 9 09:35:51 2025 +0200

    For upgrade tests correctly use cassandra_version over version, and set 
protocol_version to highest source version supports
    
    Assumption is made that the source version on an upgrade path cannot 
support a higher protocol_version than the destination version.
    
    Also upgrade tests default to SimpleSnitch, regardless of cluster's default 
config, can be overridden by each test.
    
     patch by Mick Semb Wever; reviewed by Berenguer Blasi for CASSANDRA-20536
---
 dtest_setup.py                | 36 ++++++++++++++++++++++++------------
 upgrade_tests/upgrade_base.py | 32 ++++++++++++++++++++++++++------
 2 files changed, 50 insertions(+), 18 deletions(-)

diff --git a/dtest_setup.py b/dtest_setup.py
index 3980259b..f2f70d9a 100644
--- a/dtest_setup.py
+++ b/dtest_setup.py
@@ -17,7 +17,8 @@ from cassandra.cluster import NoHostAvailable
 from cassandra.cluster import EXEC_PROFILE_DEFAULT
 from cassandra.policies import WhiteListRoundRobinPolicy
 from ccmlib.common import is_win
-from ccmlib.cluster import Cluster
+from ccmlib.cluster import Cluster, NodeError
+from ccmlib.extension import get_cluster_class
 
 from dtest import (get_ip_from_node, make_execution_profile, 
get_auth_provider, get_port_from_node,
                    get_eager_protocol_version, hack_legacy_parsing)
@@ -94,12 +95,12 @@ class DTestSetup(object):
 
     def install_nodetool_legacy_parsing(self):
         """ Install nodetool legacy parsing on the cluster """
-        if self.cluster.version() < LooseVersion('3.11.13'):
-            logger.debug("hacking nodetool for legacy parsing on 
{}".format(self.cluster.version()))
+        if self.cluster.cassandra_version() < LooseVersion('3.11.13'):
+            logger.debug("hacking nodetool for legacy parsing on 
{}".format(self.cluster.cassandra_version()))
             for node in self.cluster.nodelist():
                 self.install_legacy_parsing(node)
         else:
-            logger.debug("not modifying nodetool on version 
{}".format(self.cluster.version()))
+            logger.debug("not modifying nodetool on version 
{}".format(self.cluster.cassandra_version()))
 
     def set_ignore_log_patterns(self, other):
         if self._ignore_log_patterns == None:
@@ -240,7 +241,7 @@ class DTestSetup(object):
             port = get_port_from_node(node)
 
         if protocol_version is None:
-            protocol_version = 
get_eager_protocol_version(node.cluster.version())
+            protocol_version = 
get_eager_protocol_version(node.cluster.cassandra_version())
 
         if user is not None:
             auth_provider = get_auth_provider(user=user, password=password)
@@ -439,7 +440,7 @@ class DTestSetup(object):
         phi_values = {'phi_convict_threshold': 5}
 
         # enable read time tracking of repaired data between replicas by 
default
-        if self.cluster.version() >= '4':
+        if self.cluster.cassandra_version() >= '4':
             repaired_data_tracking_values = 
{'repaired_data_tracking_for_partition_reads_enabled': 'true',
                                              
'repaired_data_tracking_for_range_reads_enabled': 'true',
                                              
'report_unconfirmed_repaired_data_mismatches': 'true'}
@@ -461,10 +462,10 @@ class DTestSetup(object):
         if self.setup_overrides is not None and 
len(self.setup_overrides.cluster_options) > 0:
             values = merge_dicts(values, self.setup_overrides.cluster_options)
 
-        # No more thrift in 4.0, and start_rpc doesn't exists anymore
-        if self.cluster.version() >= '4' and 'start_rpc' in values:
+        # No more thrift in 4.0, and start_rpc doesn't exist anymore
+        if self.cluster.cassandra_version() >= '4' and 'start_rpc' in values:
             del values['start_rpc']
-        if self.cluster.version() >= '4':
+        if self.cluster.cassandra_version() >= '4':
             values['corrupted_tombstone_strategy'] = 'exception'
 
         if self.dtest_config.use_vnodes:
@@ -480,6 +481,15 @@ class DTestSetup(object):
         self.cluster.set_configuration_options(values)
         logger.debug("Done setting configuration options:\n" + 
pprint.pformat(self.cluster._config_options, indent=4))
 
+    def prune_unsupported_config(self):
+        """Remove unsupported configuration options. Applicable for upgrade 
tests. """
+        if self.cluster.cassandra_version() < LooseVersion('4.0.1'):
+            if self.cluster._config_options is not None:
+                
self.cluster._config_options.pop('repaired_data_tracking_for_partition_reads_enabled',
 None)
+                
self.cluster._config_options.pop('repaired_data_tracking_for_range_reads_enabled',
 None)
+                
self.cluster._config_options.pop('report_unconfirmed_repaired_data_mismatches', 
None)
+                
self.cluster._config_options.pop('corrupted_tombstone_strategy', None)
+
     def maybe_setup_jacoco(self, cluster_name='test'):
         """Setup JaCoCo code coverage support"""
 
@@ -510,13 +520,14 @@ class DTestSetup(object):
 
     @staticmethod
     def create_ccm_cluster(dtest_setup):
-        logger.info("cluster ccm directory: " + dtest_setup.test_path)
         version = dtest_setup.dtest_config.cassandra_version
+        cluster_class = 
get_cluster_class(dtest_setup.dtest_config.cassandra_dir)
+        logger.info("cluster ccm directory: {} from {} type {} version 
{}".format(dtest_setup.test_path, dtest_setup.dtest_config.cassandra_dir, 
cluster_class, version))
 
         if version:
-            cluster = Cluster(dtest_setup.test_path, dtest_setup.cluster_name, 
cassandra_version=version)
+            cluster = cluster_class(dtest_setup.test_path, 
dtest_setup.cluster_name, version=version)
         else:
-            cluster = Cluster(dtest_setup.test_path, dtest_setup.cluster_name, 
cassandra_dir=dtest_setup.dtest_config.cassandra_dir)
+            cluster = cluster_class(dtest_setup.test_path, 
dtest_setup.cluster_name, install_dir=dtest_setup.dtest_config.cassandra_dir)
 
         cluster.set_datadir_count(dtest_setup.dtest_config.data_dir_count)
         cluster.set_environment_variable('CASSANDRA_LIBJEMALLOC', 
dtest_setup.dtest_config.jemalloc_path)
@@ -568,3 +579,4 @@ class DTestSetup(object):
         version that may not be compatible with the existing configuration 
options
         """
         self.init_default_config()
+        self.prune_unsupported_config()
diff --git a/upgrade_tests/upgrade_base.py b/upgrade_tests/upgrade_base.py
index 30f51b25..92e12b37 100644
--- a/upgrade_tests/upgrade_base.py
+++ b/upgrade_tests/upgrade_base.py
@@ -1,13 +1,15 @@
 from distutils.version import LooseVersion
 
+import logging
+import pytest
 import os
+import shutil
 import sys
 import time
-import pytest
-import logging
 
 from abc import ABCMeta
 
+from ccmlib import extension, repository
 from ccmlib.common import get_version_from_build, is_win
 
 from .upgrade_manifest import CASSANDRA_4_0
@@ -81,11 +83,18 @@ class UpgradeTester(Tester, metaclass=ABCMeta):
 
         assert nodes, 2 >= "backwards compatibility tests require at least two 
nodes"
 
-        self.protocol_version = protocol_version
+        self.protocol_version = protocol_version if protocol_version is not 
None else self.UPGRADE_PATH.starting_meta.max_proto_v
 
         cluster = self.cluster
 
         cluster.set_install_dir(version=self.UPGRADE_PATH.starting_version)
+
+        install_dir_class = 
extension.get_cluster_class(cluster.get_install_dir())
+        if cluster.__class__ != install_dir_class:
+            logger.info("changing cluster type to {} (from {} bc 
{})".format(install_dir_class, cluster.__class__, cluster.get_install_dir()))
+            cluster.__class__ = install_dir_class
+            cluster._cassandra_version = cluster.dse_username = 
cluster.dse_password = None
+
         self.install_nodetool_legacy_parsing()
         self.fixture_dtest_setup.reinitialize_cluster_for_different_version()
 
@@ -102,7 +111,7 @@ class UpgradeTester(Tester, metaclass=ABCMeta):
         if start_rpc:
             cluster.set_configuration_options(values={'start_rpc': True})
 
-        cluster.set_configuration_options(values={'internode_compression': 
'none'})
+        cluster.set_configuration_options(values={'internode_compression': 
'none', 'endpoint_snitch': 'SimpleSnitch'})
 
         if extra_config_options:
             cluster.set_configuration_options(values=extra_config_options)
@@ -113,10 +122,11 @@ class UpgradeTester(Tester, metaclass=ABCMeta):
         node1 = cluster.nodelist()[0]
         time.sleep(0.2)
 
+        logger.info("nodes started on {}, connecting with protocol_version: 
{}; cl: ".format(cluster.version(), self.protocol_version, cl))
         if cl:
-            session = self.patient_cql_connection(node1, 
protocol_version=protocol_version, consistency_level=cl, **kwargs)
+            session = self.patient_cql_connection(node1, 
protocol_version=self.protocol_version, consistency_level=cl, **kwargs)
         else:
-            session = self.patient_cql_connection(node1, 
protocol_version=protocol_version, **kwargs)
+            session = self.patient_cql_connection(node1, 
protocol_version=self.protocol_version, **kwargs)
         if create_keyspace:
             create_ks(session, 'ks', rf)
 
@@ -150,6 +160,15 @@ class UpgradeTester(Tester, metaclass=ABCMeta):
             node1.mark_log_for_errors()
 
         logger.debug('upgrading node1 to 
{}'.format(self.UPGRADE_PATH.upgrade_version))
+        (install_dir, _) = repository.setup(self.UPGRADE_PATH.upgrade_version)
+        install_dir_class = extension.get_cluster_class(install_dir)
+        if self.cluster.__class__ != install_dir_class:
+            logger.info("changing cluster type to {} (from {} bc 
{})".format(install_dir_class, self.cluster.__class__, install_dir))
+            self.cluster.__class__ = install_dir_class
+            self.cluster._cassandra_version = self.cluster.dse_username = 
self.cluster.dse_password = None
+            old_conf = node1.get_conf_dir()
+            node1.__class__ = install_dir_class.getNodeClass()
+            shutil.copytree(old_conf, node1.get_conf_dir())
 
         node1.set_install_dir(version=self.UPGRADE_PATH.upgrade_version)
         self.install_legacy_parsing(node1)
@@ -175,6 +194,7 @@ class UpgradeTester(Tester, metaclass=ABCMeta):
 
         node1.start(wait_for_binary_proto=True)
 
+        logger.info("node1 started on {}, connecting with protocol_version: 
{}; cl: ".format(new_version_from_build, self.protocol_version, self.CL))
         sessions_and_meta = []
         if self.CL:
             session = self.patient_exclusive_cql_connection(node1, 
protocol_version=self.protocol_version, consistency_level=self.CL, **kwargs)


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to