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

zstan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new 827bf96c0c1 IGNITE-28746 Remove rolling upgrade ducktests (#13209)
827bf96c0c1 is described below

commit 827bf96c0c1ed3871dd21730f6e56eb785e7d87c
Author: Aleksandr Chesnokov <[email protected]>
AuthorDate: Thu Jun 11 10:18:22 2026 +0300

    IGNITE-28746 Remove rolling upgrade ducktests (#13209)
---
 .../ignitetest/services/utils/control_utility.py   |  27 ----
 .../ignitetest/tests/rolling_upgrade/__init__.py   |  18 ---
 .../add_remove_node_upgrade_test.py                |  80 ------------
 .../rolling_upgrade/in_place_node_upgrade_test.py  |  64 ----------
 .../tests/ignitetest/tests/rolling_upgrade/util.py | 140 ---------------------
 5 files changed, 329 deletions(-)

diff --git 
a/modules/ducktests/tests/ignitetest/services/utils/control_utility.py 
b/modules/ducktests/tests/ignitetest/services/utils/control_utility.py
index af80d77afc3..d95f97b0a13 100644
--- a/modules/ducktests/tests/ignitetest/services/utils/control_utility.py
+++ b/modules/ducktests/tests/ignitetest/services/utils/control_utility.py
@@ -231,33 +231,6 @@ class ControlUtility:
 
         return res
 
-    def enable_rolling_upgrade(self, target_version: str, force: bool = False):
-        """
-        Enable Rolling Upgrade with the target Ignite version.
-        :param target_version: Target Ignite version.
-        :param force: If {@code true}, skips target version compatibility 
checks and forcibly enables rolling upgrade.
-                    This flag does not override an already active upgrade 
configuration.
-        """
-
-        if force:
-            result = self.__run(f"--rolling-upgrade enable {target_version} 
--force --enable-experimental --yes")
-        else:
-            result = self.__run(f"--rolling-upgrade enable {target_version} 
--enable-experimental --yes")
-
-        assert "Rolling upgrade enabled" in result, f"Unexpected response: 
{result}"
-
-        return result
-
-    def disable_rolling_upgrade(self):
-        """
-        Disable Rolling Upgrade.
-        """
-        result = self.__run("--rolling-upgrade disable --enable-experimental 
--yes")
-
-        assert "Rolling upgrade disabled" in result, f"Unexpected response: 
{result}"
-
-        return result
-
     def start_performance_statistics(self):
         """
         Start performance statistics collecting in the cluster.
diff --git 
a/modules/ducktests/tests/ignitetest/tests/rolling_upgrade/__init__.py 
b/modules/ducktests/tests/ignitetest/tests/rolling_upgrade/__init__.py
deleted file mode 100644
index 299e16fd7d2..00000000000
--- a/modules/ducktests/tests/ignitetest/tests/rolling_upgrade/__init__.py
+++ /dev/null
@@ -1,18 +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.
-
-"""
-This package contains rolling upgrade tests.
-"""
diff --git 
a/modules/ducktests/tests/ignitetest/tests/rolling_upgrade/add_remove_node_upgrade_test.py
 
b/modules/ducktests/tests/ignitetest/tests/rolling_upgrade/add_remove_node_upgrade_test.py
deleted file mode 100644
index 4c2c61ea384..00000000000
--- 
a/modules/ducktests/tests/ignitetest/tests/rolling_upgrade/add_remove_node_upgrade_test.py
+++ /dev/null
@@ -1,80 +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.
-
-"""
-Module contains rolling upgrade tests with new nodes introduced into the 
topology and older nodes gracefully removed.
-"""
-from ducktape.mark import defaults, matrix
-
-from ignitetest.services.ignite import IgniteService
-from ignitetest.services.utils.control_utility import ControlUtility
-from ignitetest.services.utils.ignite_configuration.discovery import 
from_ignite_services
-from ignitetest.tests.rebalance.persistent_test import 
await_and_check_rebalance
-from ignitetest.tests.rolling_upgrade.util import BaseRollingUpgradeTest, 
PRELOADERS_COUNT, NUM_NODES
-from ignitetest.utils import cluster, ignite_versions
-from ignitetest.utils.version import LATEST, DEV_BRANCH, IgniteVersion
-
-
-class AddRemoveNodeUpgradeTest(BaseRollingUpgradeTest):
-
-    @cluster(num_nodes=2 * NUM_NODES + PRELOADERS_COUNT)
-    @ignite_versions(str(LATEST))
-    @matrix(with_persistence=[True, False])
-    @defaults(upgrade_version=[str(DEV_BRANCH)], force=[False], backups=[1], 
entry_count=[15_000])
-    def test_add_remove_rolling_upgrade(self, ignite_version, upgrade_version, 
force, with_persistence,
-                                        backups, entry_count):
-        node_count = (self.test_context.expected_num_nodes - PRELOADERS_COUNT) 
// 2
-
-        self.check_rolling_upgrade(ignite_version, upgrade_version, force, 
with_persistence,
-                                   backups, entry_count, 
self._upgrade_ignite_cluster, node_count)
-
-    def _upgrade_ignite_cluster(self, ignites, upgrade_version, force, 
with_persistence):
-        control_sh = ControlUtility(ignites)
-
-        
control_sh.enable_rolling_upgrade(IgniteVersion(upgrade_version).vstring, force)
-
-        self.logger.info("Starting rolling upgrade.")
-
-        upgraded_nodes = []
-
-        for ignite in ignites.nodes:
-            new_node_cfg = ignites.config._replace(
-                version=IgniteVersion(upgrade_version),
-                discovery_spi=from_ignite_services([ignites] + upgraded_nodes)
-            )
-
-            new_node = IgniteService(self.test_context, new_node_cfg, 
num_nodes=1)
-
-            new_node.start()
-
-            control_sh = ControlUtility(new_node)
-
-            if with_persistence:
-                control_sh.add_to_baseline(new_node.nodes)
-
-            await_and_check_rebalance(new_node)
-
-            upgraded_nodes.append(new_node)
-
-            ignites.stop_node(ignite)
-
-            if with_persistence:
-                control_sh.remove_from_baseline([ignite])
-
-        self.logger.info("Cluster upgrade is complete.")
-
-        control_sh.disable_rolling_upgrade()
-
-        return upgraded_nodes
diff --git 
a/modules/ducktests/tests/ignitetest/tests/rolling_upgrade/in_place_node_upgrade_test.py
 
b/modules/ducktests/tests/ignitetest/tests/rolling_upgrade/in_place_node_upgrade_test.py
deleted file mode 100644
index ee9e8bdb79c..00000000000
--- 
a/modules/ducktests/tests/ignitetest/tests/rolling_upgrade/in_place_node_upgrade_test.py
+++ /dev/null
@@ -1,64 +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.
-
-"""
-Module contains in-place rolling upgrade tests
-"""
-from ducktape.mark import matrix, defaults
-
-from ignitetest.services.utils.control_utility import ControlUtility
-from ignitetest.tests.rolling_upgrade.util import BaseRollingUpgradeTest, 
NUM_NODES
-from ignitetest.utils import cluster, ignite_versions
-from ignitetest.utils.version import IgniteVersion, LATEST, DEV_BRANCH
-
-
-class InPlaceNodeUpgradeTest(BaseRollingUpgradeTest):
-    @cluster(num_nodes=NUM_NODES)
-    @ignite_versions(str(LATEST))
-    @matrix(with_persistence=[True, False], upgrade_coordinator_first=[True, 
False])
-    @defaults(upgrade_version=[str(DEV_BRANCH)], force=[False], backups=[1], 
entry_count=[15_000])
-    def test_in_place_rolling_upgrade(self, ignite_version, upgrade_version, 
force, with_persistence,
-                                      backups, entry_count, 
upgrade_coordinator_first):
-        self.upgrade_coordinator_first = upgrade_coordinator_first
-
-        self.check_rolling_upgrade(ignite_version, upgrade_version, force, 
with_persistence,
-                                   backups, entry_count, 
self._upgrade_ignite_cluster)
-
-    def _upgrade_ignite_cluster(self, ignites, upgrade_version, force, 
with_persistence):
-        control_sh = ControlUtility(ignites)
-
-        
control_sh.enable_rolling_upgrade(IgniteVersion(upgrade_version).vstring, force)
-
-        self.logger.info(
-            f"Starting in-place rolling upgrade "
-            f"{'with coordinator going first' if 
self.upgrade_coordinator_first else 'from the last node in the ring'}"
-        )
-
-        ignites.config = 
ignites.config._replace(version=IgniteVersion(upgrade_version))
-
-        for ignite in ignites.nodes if self.upgrade_coordinator_first else 
reversed(ignites.nodes):
-            self.logger.debug(f"Upgrading {ignites.who_am_i(ignite)}")
-
-            ignites.stop_node(ignite)
-
-            ignites.start_node(ignite)
-
-            ignites.await_started([ignite])
-
-        self.logger.info("Cluster upgrade is complete.")
-
-        control_sh.disable_rolling_upgrade()
-
-        return [ignites]
diff --git a/modules/ducktests/tests/ignitetest/tests/rolling_upgrade/util.py 
b/modules/ducktests/tests/ignitetest/tests/rolling_upgrade/util.py
deleted file mode 100644
index 0801a76f34c..00000000000
--- a/modules/ducktests/tests/ignitetest/tests/rolling_upgrade/util.py
+++ /dev/null
@@ -1,140 +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.
-
-"""
-Utils for rolling upgrade tests.
-"""
-from typing import List
-
-from ignitetest.services.ignite import IgniteService
-from ignitetest.services.ignite_app import IgniteApplicationService
-from ignitetest.services.utils.control_utility import ControlUtility
-from ignitetest.services.utils.ignite_configuration import 
IgniteConfiguration, DataStorageConfiguration
-from ignitetest.services.utils.ignite_configuration.data_storage import 
DataRegionConfiguration
-from ignitetest.services.utils.ignite_configuration.discovery import 
from_ignite_cluster, from_ignite_services
-from ignitetest.utils.ignite_test import IgniteTest
-from ignitetest.utils.version import IgniteVersion
-
-NUM_NODES = 4
-PRELOADERS_COUNT = 1
-JAVA_CLASS_NAME = 
"org.apache.ignite.internal.ducktest.tests.persistence_upgrade_test.DataLoaderAndCheckerApplication"
-
-
-class BaseRollingUpgradeTest(IgniteTest):
-    """
-    Base class for rolling upgrade tests on an Ignite cluster.
-
-    This class provides a template method `test_rolling_upgrade` that performs 
the
-    following steps:
-        1. Start an Ignite cluster with the given version.
-        2. Preload data into the cluster.
-        3. Perform a rolling upgrade via a provided upgrade function.
-        4. Verify the data integrity after the upgrade.
-        5. Ensure all nodes are alive and stop the cluster.
-    """
-    def check_rolling_upgrade(self, ignite_version, upgrade_version, force, 
with_persistence, backups, entry_count,
-                              upgrade_func, init_cluster_size=None):
-        """
-        Template test for performing a rolling upgrade.
-
-        :param ignite_version: Version of Ignite to start the cluster with.
-        :param upgrade_version: Version to upgrade the cluster nodes to.
-        :param force: Whether to force the upgrade.
-        :param with_persistence: Enable persistence for the cluster nodes.
-        :param backups: Number of backup copies for each cache.
-        :param entry_count: Number of entries per cache.
-        :param upgrade_func: Function performing the rolling upgrade on the 
cluster.
-                             Must accept the following signature:
-                             `(cluster: IgniteService, upgrade_version, force, 
with_persistence) -> List[IgniteService]`
-        :param init_cluster_size: (optional) Initial cluster size
-        """
-        self.logger.info(
-            f"Initiating Rolling Upgrade test from {ignite_version} to 
{upgrade_version} "
-            f"with {'persistent' if with_persistence else 'in-memory'} mode"
-        )
-
-        if init_cluster_size is None:
-            node_count = self.test_context.expected_num_nodes - 
PRELOADERS_COUNT
-        else:
-            node_count = init_cluster_size
-
-        ignites = self._start_ignite_cluster(ignite_version, node_count, 
with_persistence)
-
-        app = self._configure_data_handler_app(ignites, backups, entry_count)
-
-        self._preload_data(app)
-
-        upgraded_ignites = upgrade_func(ignites, upgrade_version, force, 
with_persistence)
-
-        self._check_data(upgraded_ignites, app)
-
-        total_alive = sum(len(ignite.alive_nodes) for ignite in 
upgraded_ignites)
-
-        assert total_alive == node_count, f"All nodes should be alive 
[expected={node_count}, actual={total_alive}]"
-
-        for ignite in upgraded_ignites:
-            ignite.stop()
-
-    def _start_ignite_cluster(self, ignite_version, node_count, 
with_persistence):
-        ignite_cfg = IgniteConfiguration(
-            version=IgniteVersion(ignite_version),
-            
metric_exporters={"org.apache.ignite.spi.metric.jmx.JmxMetricExporterSpi"})
-
-        if with_persistence:
-            ignite_cfg = 
ignite_cfg._replace(data_storage=DataStorageConfiguration(
-                default=DataRegionConfiguration(persistence_enabled=True)))
-
-        ignites = IgniteService(self.test_context, ignite_cfg, 
num_nodes=node_count)
-
-        ignites.start()
-
-        self.logger.debug(f"Initial cluster is up 
[nodes={len(ignites.nodes)}].")
-
-        control_sh = ControlUtility(ignites)
-
-        if with_persistence:
-            control_sh.activate()
-
-        return ignites
-
-    def _configure_data_handler_app(self, ignites, backups, entry_count):
-        return IgniteApplicationService(
-            self.test_context,
-            config=ignites.config._replace(client_mode=True, 
discovery_spi=from_ignite_cluster(ignites)),
-            java_class_name=JAVA_CLASS_NAME,
-            params={
-                "backups": backups,
-                "entryCount": entry_count
-            })
-
-    def _preload_data(self, app: IgniteApplicationService):
-        app.params["check"] = False
-
-        app.start()
-        app.stop()
-
-        self.logger.debug("Data generation is done.")
-
-    def _check_data(self, upgraded_ignites: List[IgniteService], app: 
IgniteApplicationService):
-        assert len(upgraded_ignites) > 0, "Upgraded cluster is empty!"
-
-        app.config = 
app.config._replace(discovery_spi=from_ignite_services(upgraded_ignites))
-
-        app.params["check"] = True
-
-        app.start()
-        app.stop()
-
-        self.logger.debug("Data check is complete.")

Reply via email to