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 d76a5b6e8fa2c..b51bd6e185199 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 boolean contains(int featureId) {
/** */
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 8eef1221032a9..1426a381a6633 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
@@ -97,7 +97,7 @@
*
*
* | 2.19.1 |
- * {@code IgniteFeatureSet [0, 1]} |
+ * {@code IgniteFeatureSet [0]} |
*
*
* | 2.19.2 |
@@ -464,7 +464,7 @@ protected void finalizeClusterVersion(int nodeIdx, String expVer) throws Excepti
/** */
protected void restartNode(int nodeIdx) throws Exception {
- String ver = resolveNodeCompoundVersion(nodeIdx);
+ String ver = resolveNodeCompoundVersions(nodeIdx);
boolean isClient = grid(nodeIdx).context().clientNode();
stopGrid(nodeIdx);
@@ -479,7 +479,7 @@ protected void forAllNodes(ConsumerX nodeProcessor) throws Exception {
/** */
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);
@@ -490,7 +490,7 @@ protected void checkUpgradeFailed(int nodeIdx, String targetVer, String errMsg)
}
/** */
- 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 e852649829a6d..93bde7526b93f 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
@@ -81,7 +81,7 @@ public void testVersionUpgradeDisabledFinalization() throws Exception {
/** */
@Test
- public void testVersionsFinalizationNoVersionUpgrade() throws Exception {
+ public void testVersionFinalizationNoVersionUpgrade() throws Exception {
startCluster();
ru(1).enableVersionUpgrade();
@@ -96,6 +96,18 @@ public void testVersionsFinalizationNoVersionUpgrade() throws Exception {
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 {
@@ -131,12 +143,12 @@ public void testVersionUpgradeEnabledNodeJoin() throws Exception {
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);
@@ -144,11 +156,11 @@ public void testVersionUpgradeEnabledNodeJoin() throws Exception {
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");
}
/** */
@@ -644,7 +656,7 @@ public void testFailedNodeDoesNotAffectFinalization() throws Exception {
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));
@@ -656,7 +668,7 @@ public void testFailedNodeDoesNotAffectFinalization() throws Exception {
"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 33fd6ce2710f7..38056daa0b428 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 @@
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 cc1775597e44f..0ad70357e73a9 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);