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

petrov-mg 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 834acdaa45f IGNITE-28909 Added test for node join with the same 
features but smaller version (#13385)
834acdaa45f is described below

commit 834acdaa45fe83b0ae5a1121ba332e5958f7e9ad
Author: Mikhail Petrov <[email protected]>
AuthorDate: Tue Jul 21 00:21:42 2026 +0300

    IGNITE-28909 Added test for node join with the same features but smaller 
version (#13385)
---
 .../feature/IgniteComponentFeatureSet.java         |  4 ++-
 .../rollingupgrade/AbstractRollingUpgradeTest.java |  8 ++---
 .../CoreVersionRollingUpgradeTest.java             | 34 +++++++++++++++-------
 .../feature/TestIgniteReleaseFeatures_2_19_1.java  |  3 --
 .../feature/TestIgniteReleaseFeatures_2_19_2.java  |  2 +-
 5 files changed, 31 insertions(+), 20 deletions(-)

diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/rollingupgrade/feature/IgniteComponentFeatureSet.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/rollingupgrade/feature/IgniteComponentFeatureSet.java
index d76a5b6e8fa..b51bd6e1851 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/rollingupgrade/feature/IgniteComponentFeatureSet.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/rollingupgrade/feature/IgniteComponentFeatureSet.java
@@ -69,7 +69,9 @@ public abstract class IgniteComponentFeatureSet implements 
Message, Externalizab
 
     /** */
     public boolean isUpgradableTo(IgniteComponentFeatureSet target) {
-        return Objects.equals(componentName(), target.componentName()) && 
features.isUpgradableTo(target.features);
+        return Objects.equals(componentName(), target.componentName())
+            && ver.compareTo(target.ver) <= 0
+            && features.isUpgradableTo(target.features);
     }
 
     /** {@inheritDoc} */
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/AbstractRollingUpgradeTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/AbstractRollingUpgradeTest.java
index c54675151a7..84532bef8ec 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/AbstractRollingUpgradeTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/AbstractRollingUpgradeTest.java
@@ -98,7 +98,7 @@ import static 
org.apache.ignite.internal.IgniteVersionUtils.semanticVersion;
  *   </tr>
  *   <tr>
  *     <td>2.19.1</td>
- *     <td>{@code IgniteFeatureSet [0, 1]}</td>
+ *     <td>{@code IgniteFeatureSet [0]}</td>
  *   </tr>
  *   <tr>
  *     <td>2.19.2</td>
@@ -474,7 +474,7 @@ public abstract class AbstractRollingUpgradeTest extends 
GridCommonAbstractTest
 
     /** */
     protected void restartNode(int nodeIdx) throws Exception {
-        String ver = resolveNodeCompoundVersion(nodeIdx);
+        String ver = resolveNodeCompoundVersions(nodeIdx);
         boolean isClient = grid(nodeIdx).context().clientNode();
 
         stopGrid(nodeIdx);
@@ -489,7 +489,7 @@ public abstract class AbstractRollingUpgradeTest extends 
GridCommonAbstractTest
 
     /** */
     protected void checkUpgradeFailed(int nodeIdx, String targetVer, String 
errMsg) throws Exception {
-        String srcVer = resolveNodeCompoundVersion(nodeIdx);
+        String srcVer = resolveNodeCompoundVersions(nodeIdx);
         boolean isClient = grid(nodeIdx).context().clientNode();
 
         stopGrid(nodeIdx);
@@ -500,7 +500,7 @@ public abstract class AbstractRollingUpgradeTest extends 
GridCommonAbstractTest
     }
 
     /** */
-    String resolveNodeCompoundVersion(int nodeIdx) {
+    String resolveNodeCompoundVersions(int nodeIdx) {
         return 
Arrays.stream(ru(nodeIdx).features().localVersionFeatures().values())
             
.sorted(Comparator.comparing(IgniteComponentFeatureSet::componentName))
             .map(f -> semanticVersion(f.version()))
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/CoreVersionRollingUpgradeTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/CoreVersionRollingUpgradeTest.java
index c773ce73956..b2ab378725d 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/CoreVersionRollingUpgradeTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/CoreVersionRollingUpgradeTest.java
@@ -79,7 +79,7 @@ public class CoreVersionRollingUpgradeTest extends 
AbstractRollingUpgradeTest {
 
     /** */
     @Test
-    public void testVersionsFinalizationNoVersionUpgrade() throws Exception {
+    public void testVersionFinalizationNoVersionUpgrade() throws Exception {
         startCluster();
 
         ru(1).enableVersionUpgrade();
@@ -94,6 +94,18 @@ public class CoreVersionRollingUpgradeTest extends 
AbstractRollingUpgradeTest {
         restartNode(2);
     }
 
+    /** */
+    @Test
+    public void testSmallerVersionsWithSameFeaturesAreNotCompatible() throws 
Exception {
+        startCluster("2.19.1");
+
+        ru(1).enableVersionUpgrade();
+
+        checkUpgradeFailed(1, "2.19.0", VER_INCOMPATIBLE_ERR);
+
+        finalizeClusterVersion(1, "2.19.1");
+    }
+
     /** */
     @Test
     public void testVersionUpgradeCommandsIdempotency() throws Exception {
@@ -129,12 +141,12 @@ public class CoreVersionRollingUpgradeTest extends 
AbstractRollingUpgradeTest {
 
         checkJoinFailed(5, "2.18.0", VER_INCOMPATIBLE_ERR);
 
-        upgradeNodeVersion(0, "2.19.1");
-        upgradeNodeVersion(2, "2.19.1");
+        upgradeNodeVersion(0, "2.19.2");
+        upgradeNodeVersion(2, "2.19.2");
 
-        checkVersionUpgradeInProgress(TEST_DEFAULT_VER, "2.19.1");
+        checkVersionUpgradeInProgress(TEST_DEFAULT_VER, "2.19.2");
 
-        checkJoinFailed(5, "2.19.2", VER_INCOMPATIBLE_ERR);
+        checkJoinFailed(5, "2.19.3", VER_INCOMPATIBLE_ERR);
 
         restartNode(3);
         restartNode(4);
@@ -142,11 +154,11 @@ public class CoreVersionRollingUpgradeTest extends 
AbstractRollingUpgradeTest {
         restartNode(0);
         restartNode(2);
 
-        upgradeNodeVersion(1, "2.19.1");
-        upgradeNodeVersion(3, "2.19.1");
-        upgradeNodeVersion(4, "2.19.1");
+        upgradeNodeVersion(1, "2.19.2");
+        upgradeNodeVersion(3, "2.19.2");
+        upgradeNodeVersion(4, "2.19.2");
 
-        finalizeClusterVersion(1, "2.19.1");
+        finalizeClusterVersion(1, "2.19.2");
     }
 
     /** */
@@ -642,7 +654,7 @@ public class CoreVersionRollingUpgradeTest extends 
AbstractRollingUpgradeTest {
 
         ru(1).enableVersionUpgrade();
 
-        forAllNodes(nodeIdx -> upgradeNodeVersion(nodeIdx, "2.19.1"));
+        forAllNodes(nodeIdx -> upgradeNodeVersion(nodeIdx, "2.19.2"));
 
         IgniteConfiguration cfg = getConfiguration(3, TEST_DEFAULT_VER)
             .setBinaryConfiguration(new 
BinaryConfiguration().setCompactFooter(false));
@@ -654,7 +666,7 @@ public class CoreVersionRollingUpgradeTest extends 
AbstractRollingUpgradeTest {
             "Local node's binary configuration is not equal to remote node's 
binary configuration"
         );
 
-        finalizeClusterVersion(2, "2.19.1");
+        finalizeClusterVersion(2, "2.19.2");
     }
 
     /** */
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_19_1.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_19_1.java
index 33fd6ce2710..38056daa0b4 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_19_1.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_19_1.java
@@ -21,7 +21,4 @@ package 
org.apache.ignite.internal.processors.rollingupgrade.feature;
 public class TestIgniteReleaseFeatures_2_19_1 {
     /** */
     public static final IgniteFeature ROLLING_UPGRADE_FEATURE = 
TestIgniteReleaseFeatures_2_19_0.ROLLING_UPGRADE_FEATURE;
-
-    /** */
-    public static final IgniteFeature VER_2_19_1_ID_1_FEATURE = new 
IgniteCoreFeature(1);
 }
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_19_2.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_19_2.java
index cc1775597e4..0ad70357e73 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_19_2.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_19_2.java
@@ -23,7 +23,7 @@ public class TestIgniteReleaseFeatures_2_19_2 {
     public static final IgniteFeature ROLLING_UPGRADE_FEATURE = 
TestIgniteReleaseFeatures_2_19_1.ROLLING_UPGRADE_FEATURE;
 
     /** */
-    public static final IgniteFeature VER_2_19_2_ID_1_FEATURE = 
TestIgniteReleaseFeatures_2_19_1.VER_2_19_1_ID_1_FEATURE;
+    public static final IgniteFeature VER_2_19_2_ID_1_FEATURE = new 
IgniteCoreFeature(1);
 
     /** */
     public static final IgniteFeature VER_2_19_2_ID_2_FEATURE = new 
IgniteCoreFeature(2);

Reply via email to