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.")