This is an automated email from the ASF dual-hosted git repository.
wernerdv 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 04f29e65055 IGNITE-28982 Enable rolling upgrade in testcontainers
compatibility tests
04f29e65055 is described below
commit 04f29e650552b1627833542a4cd0951724ae1cff
Author: Aleksandr Chesnokov <[email protected]>
AuthorDate: Fri Aug 28 11:17:15 2026 +0300
IGNITE-28982 Enable rolling upgrade in testcontainers compatibility tests
---
modules/compatibility/DEVNOTES.md | 3 +-
.../plugins/TestCompatibilityPluginProvider.java | 32 +++++++++++----
.../testcontainers/IgniteContainer.java | 6 +++
.../{test-config.xml => common-test-config.xml} | 5 +--
.../test/resources/docker/target-test-config.xml | 28 ++++++++++++++
.../src/test/resources/docker/test-config.xml | 45 +++-------------------
6 files changed, 67 insertions(+), 52 deletions(-)
diff --git a/modules/compatibility/DEVNOTES.md
b/modules/compatibility/DEVNOTES.md
index 539080553a5..c24950f5918 100644
--- a/modules/compatibility/DEVNOTES.md
+++ b/modules/compatibility/DEVNOTES.md
@@ -88,7 +88,8 @@ Run `IgniteRebalanceOnUpgradeTest` from your IDE or via
Maven. The source versio
All nodes stay in Docker containers throughout the test. Each node is upgraded
in-place:
1. The container is gracefully stopped (`docker stop`).
2. Source jars in `/opt/ignite/apache-ignite/libs/` are replaced by target
jars from the host.
-3. The container is restarted (`docker start`).
+3. The source Spring entry config is replaced by the target config.
+4. The container is restarted (`docker start`).
The Docker image for the source cluster is the same as in LOCAL mode — only
one image is needed.
The target-version jars are provided from the host filesystem.
diff --git
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/plugins/TestCompatibilityPluginProvider.java
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/plugins/TestCompatibilityPluginProvider.java
index 3ea8a567491..60e0e1d24fb 100644
---
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/plugins/TestCompatibilityPluginProvider.java
+++
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/plugins/TestCompatibilityPluginProvider.java
@@ -23,8 +23,8 @@ import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.cluster.ClusterNode;
import org.apache.ignite.internal.GridKernalContext;
import org.apache.ignite.internal.IgniteKernal;
-import org.apache.ignite.internal.IgniteNodeAttributes;
import
org.apache.ignite.internal.processors.nodevalidation.DiscoveryNodeValidationProcessor;
+import
org.apache.ignite.internal.processors.rollingupgrade.RollingUpgradeProcessor;
import org.apache.ignite.plugin.CachePluginContext;
import org.apache.ignite.plugin.CachePluginProvider;
import org.apache.ignite.plugin.ExtensionRegistry;
@@ -34,14 +34,27 @@ import org.apache.ignite.plugin.PluginProvider;
import org.apache.ignite.plugin.PluginValidationException;
import org.jetbrains.annotations.Nullable;
-/**
- * Creates {@link DisabledValidationProcessor} to allow for nodes with
different
- * versions {@link IgniteNodeAttributes#ATTR_BUILD_VER} join to topology.
- */
+/** Provides node validation for compatibility tests. */
public class TestCompatibilityPluginProvider implements PluginProvider {
/** */
private GridKernalContext kCtx;
+ /** Rolling upgrade support flag. */
+ private boolean rollingUpgradeSupported;
+
+ /** Auto-enable rolling upgrade flag. */
+ private final boolean autoEnableRollingUpgrade;
+
+ /** */
+ public TestCompatibilityPluginProvider() {
+ this(false);
+ }
+
+ /** @param autoEnableRollingUpgrade Auto-enable rolling upgrade flag. */
+ public TestCompatibilityPluginProvider(boolean autoEnableRollingUpgrade) {
+ this.autoEnableRollingUpgrade = autoEnableRollingUpgrade;
+ }
+
/** {@inheritDoc} */
@Override public String name() {
return "TestCompatibilityPlugin";
@@ -79,7 +92,8 @@ public class TestCompatibilityPluginProvider implements
PluginProvider {
/** {@inheritDoc} */
@Override public void onIgniteStart() throws IgniteCheckedException {
- // No-op.
+ if (autoEnableRollingUpgrade && rollingUpgradeSupported)
+ kCtx.rollingUpgrade().enableVersionUpgrade();
}
/** {@inheritDoc} */
@@ -108,7 +122,11 @@ public class TestCompatibilityPluginProvider implements
PluginProvider {
try {
Class.forName("org.apache.ignite.internal.processors.rollingupgrade.RollingUpgradeProcessor");
- return new DisabledRollingUpgradeProcessor(kCtx);
+ rollingUpgradeSupported = true;
+
+ return autoEnableRollingUpgrade
+ ? new RollingUpgradeProcessor(kCtx)
+ : new DisabledRollingUpgradeProcessor(kCtx);
}
catch (ClassNotFoundException ignore) {
return new DisabledValidationProcessor(kCtx);
diff --git
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/testcontainers/IgniteContainer.java
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/testcontainers/IgniteContainer.java
index 1f08e917a09..c4de0cc88ae 100644
---
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/testcontainers/IgniteContainer.java
+++
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/testcontainers/IgniteContainer.java
@@ -101,6 +101,9 @@ public class IgniteContainer extends
GenericContainer<IgniteContainer> {
/** Config path in container. */
private static final String CFG_PATH = ROOT_DIR_PATH +
"config/test-config.xml";
+ /** Common config path in container. */
+ private static final String COMMON_CFG_PATH = ROOT_DIR_PATH +
"config/common-test-config.xml";
+
/** */
private static final Pattern CLUSTER_STATE_PATTERN =
Pattern.compile("Cluster state: (ACTIVE|INACTIVE)");
@@ -197,6 +200,7 @@ public class IgniteContainer extends
GenericContainer<IgniteContainer> {
withCreateContainerCmdModifier(cmd -> cmd.withUser(uidGid));
}
+
withCopyFileToContainer(forClasspathResource("docker/common-test-config.xml"),
COMMON_CFG_PATH);
withCopyFileToContainer(forClasspathResource("docker/test-config.xml"),
CFG_PATH);
withCopyFileToContainer(forHostPath(testClassesJar().getAbsolutePath()),
LIBS_DIR_PATH + "test-classes.jar");
@@ -261,6 +265,8 @@ public class IgniteContainer extends
GenericContainer<IgniteContainer> {
if (!Boolean.TRUE.equals(resp.isRunning()) && resp.getExitCodeLong()
!= null && resp.getExitCodeLong() != 0)
throw new IllegalStateException("Failed to clean and extract libs:
" + err);
+
copyFileToContainer(forClasspathResource("docker/target-test-config.xml"),
CFG_PATH);
+
stopGraceful();
LOGGER.info("Starting container {} with target libraries...",
hostname);
diff --git a/modules/compatibility/src/test/resources/docker/test-config.xml
b/modules/compatibility/src/test/resources/docker/common-test-config.xml
similarity index 92%
copy from modules/compatibility/src/test/resources/docker/test-config.xml
copy to modules/compatibility/src/test/resources/docker/common-test-config.xml
index 66d3ca00e44..5d6bbbd54d0 100644
--- a/modules/compatibility/src/test/resources/docker/test-config.xml
+++ b/modules/compatibility/src/test/resources/docker/common-test-config.xml
@@ -22,15 +22,12 @@
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
- <bean id="grid.cfg"
class="org.apache.ignite.configuration.IgniteConfiguration">
+ <bean id="grid.cfg.base"
class="org.apache.ignite.configuration.IgniteConfiguration" abstract="true">
<property name="consistentId"
value="#{systemProperties['node.consistent.id']}"/>
<property name="addressResolver">
<bean
class="org.apache.ignite.compatibility.testframework.testcontainers.ContainerAddressResolver"/>
</property>
<property name="failureDetectionTimeout" value="#{5000L}"/>
- <property name="pluginProviders">
- <bean
class="org.apache.ignite.compatibility.testframework.plugins.TestCompatibilityPluginProvider"/>
- </property>
<property name="dataStorageConfiguration">
<bean
class="org.apache.ignite.configuration.DataStorageConfiguration">
<property name="defaultDataRegionConfiguration">
diff --git
a/modules/compatibility/src/test/resources/docker/target-test-config.xml
b/modules/compatibility/src/test/resources/docker/target-test-config.xml
new file mode 100644
index 00000000000..01f55c4b1e4
--- /dev/null
+++ b/modules/compatibility/src/test/resources/docker/target-test-config.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ 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.
+-->
+
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="
+ http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans.xsd">
+ <import resource="common-test-config.xml"/>
+
+ <bean id="grid.cfg" parent="grid.cfg.base"/>
+</beans>
diff --git a/modules/compatibility/src/test/resources/docker/test-config.xml
b/modules/compatibility/src/test/resources/docker/test-config.xml
index 66d3ca00e44..6c9458e7f6c 100644
--- a/modules/compatibility/src/test/resources/docker/test-config.xml
+++ b/modules/compatibility/src/test/resources/docker/test-config.xml
@@ -22,47 +22,12 @@
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
- <bean id="grid.cfg"
class="org.apache.ignite.configuration.IgniteConfiguration">
- <property name="consistentId"
value="#{systemProperties['node.consistent.id']}"/>
- <property name="addressResolver">
- <bean
class="org.apache.ignite.compatibility.testframework.testcontainers.ContainerAddressResolver"/>
- </property>
- <property name="failureDetectionTimeout" value="#{5000L}"/>
+ <import resource="common-test-config.xml"/>
+
+ <bean id="grid.cfg" parent="grid.cfg.base">
<property name="pluginProviders">
- <bean
class="org.apache.ignite.compatibility.testframework.plugins.TestCompatibilityPluginProvider"/>
- </property>
- <property name="dataStorageConfiguration">
- <bean
class="org.apache.ignite.configuration.DataStorageConfiguration">
- <property name="defaultDataRegionConfiguration">
- <bean
class="org.apache.ignite.configuration.DataRegionConfiguration">
- <property name="name" value="testRegion"/>
- <property name="initialSize" value="#{1L * 1024 * 1024
* 1024}"/>
- <property name="maxSize" value="#{10L * 1024 * 1024 *
1024}"/>
- <property name="persistenceEnabled" value="true"/>
- </bean>
- </property>
- </bean>
- </property>
- <property name="discoverySpi">
- <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
- <property name="localPort" value="47500"/>
- <property name="socketTimeout" value="1000"/>
- <property name="ipFinder">
- <bean
class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
- <property name="addresses">
- <list>
- <value>node1:47500</value>
- <value>node2:47500</value>
- <value>node3:47500</value>
- </list>
- </property>
- </bean>
- </property>
- </bean>
- </property>
- <property name="communicationSpi">
- <bean
class="org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi">
- <property name="localPort" value="47100"/>
+ <bean
class="org.apache.ignite.compatibility.testframework.plugins.TestCompatibilityPluginProvider">
+ <constructor-arg value="true"/>
</bean>
</property>
</bean>