From 1fce1ebf8408166921df7bc38a23cf6b11a456c3 Mon Sep 17 00:00:00 2001 From: Mikhail Petrov Date: Mon, 28 Sep 2026 17:04:53 +0300 Subject: [PATCH 01/10] IGNITE-29091 Enhance RU Message Serialization Context tests --- .../AbstractRollingUpgradeTest.java | 34 +- .../TestIgniteReleaseFeatures_2_21_0.java | 3 - .../TestIgniteReleaseFeatures_2_21_1.java | 3 - .../TestPluginReleaseFeatures_2_0_0.java | 3 + .../TestPluginReleaseFeatures_2_1_0.java | 5 +- .../TestPluginReleaseFeatures_3_0_0.java | 4 +- .../AbstractRollingUpgradeMessageTest.java | 123 +++++++ ...ollingUpgradeMessageSerializationTest.java | 301 ++++++++++-------- .../message/TestContainerMessage_2_20_0.java | 87 +++++ .../message/TestContainerMessage_2_21_0.java | 87 +++++ .../message/TestCoreMessage_2_19_0.java | 61 ++++ .../message/TestCoreMessage_2_19_2.java | 79 +++++ .../message/TestCoreMessage_2_19_3.java | 89 ++++++ .../message/TestCoreMessage_2_20_0.java | 92 ++++++ ...ssage.java => TestCoreMessage_2_20_1.java} | 45 ++- .../message/TestCoreMessage_2_21_0.java | 84 +++++ ...=> TestDefaultRegistryMessage_2_19_0.java} | 39 +-- .../TestDefaultRegistryMessage_2_20_0.java | 91 ++++++ .../message/TestDiscoveryMessage.java | 42 +++ .../rollingupgrade/message/TestMessage.java | 43 ++- .../message/TestMessageType.java | 77 +++++ .../message/TestPluginMessage_0_9_0.java | 61 ++++ .../message/TestPluginMessage_1_0_0.java | 74 +++++ .../message/TestPluginMessage_2_0_0.java | 89 ++++++ ...sage.java => TestPluginMessage_2_1_0.java} | 42 +-- .../message/TestPluginMessage_3_0_0.java | 85 +++++ .../ignite/spi/MessagesPluginProvider.java | 3 +- 27 files changed, 1516 insertions(+), 230 deletions(-) create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/AbstractRollingUpgradeMessageTest.java create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestContainerMessage_2_20_0.java create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestContainerMessage_2_21_0.java create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_0.java create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_2.java create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_3.java create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_20_0.java rename modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/{TestCoreMessage.java => TestCoreMessage_2_20_1.java} (66%) create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_21_0.java rename modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/{TestDefaultRegistryMessage.java => TestDefaultRegistryMessage_2_19_0.java} (68%) create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestDefaultRegistryMessage_2_20_0.java create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestDiscoveryMessage.java create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestMessageType.java create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_0_9_0.java create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_1_0_0.java create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_2_0_0.java rename modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/{TestPluginMessage.java => TestPluginMessage_2_1_0.java} (68%) create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_3_0_0.java 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 0bbdb9824a57d..c1c8e4d20f83c 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 @@ -124,11 +124,11 @@ * * * 2.21.0 - * {@code IgniteFeatureSet [3 -> 6]} + * {@code IgniteFeatureSet [4 -> 6]} * * * 2.21.1 - * {@code IgniteFeatureSet [3 -> 7]} + * {@code IgniteFeatureSet [4 -> 7]} * * */ @@ -136,6 +136,9 @@ public abstract class AbstractRollingUpgradeTest extends GridCommonAbstractTest /** */ protected static final String TEST_DEFAULT_VER = "2.19.0"; + /** */ + protected static final String COMPONENT_VERSIONS_ATTRIBUTE = "test.component.versions"; + /** */ protected static final String VER_INCOMPATIBLE_ERR = "Joining node is not allowed to join the cluster because it is running a component with an incompatible version"; @@ -204,9 +207,12 @@ protected IgniteConfiguration getConfiguration(String igniteInstanceName, String IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName); cfg.setCommunicationSpi(new TestRecordingCommunicationSpi()); + cfg.setUserAttributes(F.asMap(COMPONENT_VERSIONS_ATTRIBUTE, ver)); TestVersions testVersions = TestVersions.parse(ver); + boolean pluginDeclaresFeatures = testVersions.containsPlugin() && pluginDeclaresFeatures(testVersions.pluginVersion()); + IgniteCoreFeatureSet testCoreFeatures = new IgniteCoreFeatureSet( IgniteProductVersion.fromString(testVersions.coreVersion()), IgniteFeatureSet.buildFrom(readDeclaredCoreFeatures(testVersions.coreVersion())) @@ -219,7 +225,7 @@ protected IgniteConfiguration getConfiguration(String igniteInstanceName, String /** {@inheritDoc} */ @Override public void initExtensions(PluginContext ctx, ExtensionRegistry registry) { - if (testVersions.containsPlugin()) { + if (pluginDeclaresFeatures) { registry.registerExtension( IgniteComponentFeatureSetProvider.class, new TestPluginComponentFeatureSetProvider(testVersions.pluginVersion())); @@ -269,6 +275,18 @@ public static Collection readDeclaredCoreFeatures(String ver) thr return IgniteFeatureSet.readDeclaredFeatures(cls); } + /** */ + private static boolean pluginDeclaresFeatures(String pluginVer) throws Exception { + try { + readDeclaredPluginFeatures(pluginVer); + + return true; + } + catch (ClassNotFoundException ignored) { + return false; + } + } + /** */ public static Collection readDeclaredPluginFeatures(String ver) throws Exception { Class cls = Class.forName( @@ -550,7 +568,7 @@ protected void finalizeClusterVersion(int nodeIdx, String expVer) throws Excepti /** */ protected void restartNode(int nodeIdx) throws Exception { - String ver = resolveNodeLocalCompoundVersion(nodeIdx); + String ver = nodeComponentVersions(grid(nodeIdx)); boolean isClient = grid(nodeIdx).context().clientNode(); stopGrid(nodeIdx); @@ -565,7 +583,7 @@ protected void forAllNodes(ConsumerX nodeProcessor) throws Exception { /** */ protected void checkUpgradeFailed(int nodeIdx, String targetVer, String errMsg) throws Exception { - String srcVer = resolveNodeLocalCompoundVersion(nodeIdx); + String srcVer = nodeComponentVersions(grid(nodeIdx)); boolean isClient = grid(nodeIdx).context().clientNode(); stopGrid(nodeIdx); @@ -576,8 +594,8 @@ protected void checkUpgradeFailed(int nodeIdx, String targetVer, String errMsg) } /** */ - protected String resolveNodeLocalCompoundVersion(int nodeIdx) { - return resolveCompoundVersion(ru(nodeIdx).features().localVersionFeatures()); + protected String nodeComponentVersions(Ignite node) { + return node.cluster().localNode().attribute(COMPONENT_VERSIONS_ATTRIBUTE); } /** */ @@ -642,7 +660,7 @@ protected static RollingUpgradeProcessor ru(Ignite ignite) { } /** */ - protected static class TestVersions { + public static class TestVersions { /** */ private final Map cmpVersions = new HashMap<>(); diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_21_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_21_0.java index fe6b190119774..361827c973a21 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_21_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_21_0.java @@ -19,9 +19,6 @@ /** */ public class TestIgniteReleaseFeatures_2_21_0 { - /** */ - public static final IgniteFeature VER_2_20_0_ID_3_FEATURE = TestIgniteReleaseFeatures_2_20_1.VER_2_20_0_ID_3_FEATURE; - /** */ public static final IgniteFeature VER_2_20_0_ID_4_FEATURE = TestIgniteReleaseFeatures_2_20_1.VER_2_20_0_ID_4_FEATURE; diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_21_1.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_21_1.java index 6ec00046d1b51..902baa837c067 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_21_1.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_21_1.java @@ -19,9 +19,6 @@ /** */ public class TestIgniteReleaseFeatures_2_21_1 { - /** */ - public static final IgniteFeature VER_2_20_0_ID_3_FEATURE = TestIgniteReleaseFeatures_2_21_0.VER_2_20_0_ID_3_FEATURE; - /** */ public static final IgniteFeature VER_2_20_0_ID_4_FEATURE = TestIgniteReleaseFeatures_2_21_0.VER_2_20_0_ID_4_FEATURE; diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_2_0_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_2_0_0.java index 066d0403917df..19e028e7046c4 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_2_0_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_2_0_0.java @@ -24,4 +24,7 @@ public class TestPluginReleaseFeatures_2_0_0 { /** */ public static final IgniteFeature VER_2_0_0_ID_1_FEATURE = new TestPluginFeature(1); + + /** */ + public static final IgniteFeature VER_2_0_0_ID_2_FEATURE = new TestPluginFeature(2); } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_2_1_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_2_1_0.java index 385f7ded6a900..f7152e9e2cb88 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_2_1_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_2_1_0.java @@ -26,5 +26,8 @@ public class TestPluginReleaseFeatures_2_1_0 { public static final IgniteFeature VER_2_0_0_ID_1_FEATURE = TestPluginReleaseFeatures_2_0_0.VER_2_0_0_ID_1_FEATURE; /** */ - public static final IgniteFeature VER_2_1_0_ID_2_FEATURE = new TestPluginFeature(2); + public static final IgniteFeature VER_2_0_0_ID_2_FEATURE = TestPluginReleaseFeatures_2_0_0.VER_2_0_0_ID_2_FEATURE; + + /** */ + public static final IgniteFeature VER_2_1_0_ID_3_FEATURE = new TestPluginFeature(3); } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_3_0_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_3_0_0.java index d5c7b4f2e23b9..f7ece947fad2b 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_3_0_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_3_0_0.java @@ -20,8 +20,8 @@ /** */ public class TestPluginReleaseFeatures_3_0_0 { /** */ - public static final IgniteFeature VER_3_0_0_ID_2_FEATURE = new TestPluginFeature(2); + public static final IgniteFeature VER_2_0_0_ID_2_FEATURE = TestPluginReleaseFeatures_2_1_0.VER_2_0_0_ID_2_FEATURE; /** */ - public static final IgniteFeature VER_3_0_0_ID_3_FEATURE = new TestPluginFeature(3); + public static final IgniteFeature VER_2_1_0_ID_3_FEATURE = TestPluginReleaseFeatures_2_1_0.VER_2_1_0_ID_3_FEATURE; } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/AbstractRollingUpgradeMessageTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/AbstractRollingUpgradeMessageTest.java new file mode 100644 index 0000000000000..a7634d70b689a --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/AbstractRollingUpgradeMessageTest.java @@ -0,0 +1,123 @@ +/* + * 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. + */ + +package org.apache.ignite.internal.processors.rollingupgrade.message; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.atomic.AtomicReference; +import org.apache.ignite.Ignite; +import org.apache.ignite.Ignition; +import org.apache.ignite.cluster.ClusterNode; +import org.apache.ignite.configuration.IgniteConfiguration; +import org.apache.ignite.internal.IgniteEx; +import org.apache.ignite.internal.processors.rollingupgrade.AbstractRollingUpgradeTest; +import org.apache.ignite.internal.util.typedef.F; +import org.apache.ignite.plugin.extensions.communication.Message; +import org.apache.ignite.spi.MessagesPluginProvider; + +import static java.util.concurrent.TimeUnit.MILLISECONDS; +import static org.apache.ignite.internal.managers.communication.GridIoPolicy.PUBLIC_POOL; +import static org.apache.ignite.internal.processors.rollingupgrade.message.TestMessageType.resolveTestMessageClasses; + +/** */ +public abstract class AbstractRollingUpgradeMessageTest extends AbstractRollingUpgradeTest { + /** {@inheritDoc} */ + @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName, String cmpVers) throws Exception { + IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName, cmpVers); + + cfg.setPluginProviders(F.concat(cfg.getPluginProviders(), new MessagesPluginProvider(resolveTestMessageClasses(cmpVers)))); + + return cfg; + } + + /** */ + protected void startServerNodes(String... vers) throws Exception { + IgniteEx first = startGrid(0, vers[0]); + + if (Arrays.stream(vers).distinct().count() > 1) + ru(first).enableVersionUpgrade(); + + for (int idx = 1; idx < vers.length; idx++) + startGrid(idx, vers[idx]); + } + + /** */ + protected T send(IgniteEx from, IgniteEx to, T msg) throws Exception { + AtomicReference got = new AtomicReference<>(); + CountDownLatch latch = new CountDownLatch(1); + + String topic = msg.getClass().getName(); + + to.context().io().addMessageListener(topic, (nodeId, rcvd, plc) -> { + got.set((T)rcvd); + + latch.countDown(); + }); + + ClusterNode rcvNode = from.context().discovery().node(to.localNode().id()); + + from.context().io().sendToCustomTopic(rcvNode, topic, msg, PUBLIC_POOL); + + assertTrue(latch.await(getTestTimeout(), MILLISECONDS)); + + return got.get(); + } + + /** */ + protected TestDiscoveryMessage send(IgniteEx from, IgniteEx to, TestMessageType msgType) throws Exception { + return send(from, to, buildMessage(from, msgType)); + } + + /** */ + protected Map sendOverDiscovery(IgniteEx from, TestDiscoveryMessage msg) throws Exception { + List clusterNodes = Ignition.allGrids(); + + Map receivedMsgs = new ConcurrentHashMap<>(); + + CountDownLatch latch = new CountDownLatch(clusterNodes.size()); + + for (Ignite rcv : clusterNodes) { + ((IgniteEx)rcv).context().discovery().setCustomEventListener(TestDiscoveryMessage.class, (v, n, m) -> { + receivedMsgs.put(rcv.name(), m); + + latch.countDown(); + }); + } + + from.context().discovery().sendCustomEvent(msg); + + assertTrue(latch.await(getTestTimeout(), MILLISECONDS)); + + receivedMsgs.remove(from.name()); + + return receivedMsgs; + } + + /** */ + protected Map sendOverDiscovery(IgniteEx from, TestMessageType msgType) throws Exception { + return sendOverDiscovery(from, buildMessage(from, msgType)); + } + + /** */ + protected TestDiscoveryMessage buildMessage(IgniteEx node, TestMessageType msgType) throws Exception { + return msgType.build(nodeComponentVersions(node), ru(node).features()::isActive); + } +} diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/RollingUpgradeMessageSerializationTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/RollingUpgradeMessageSerializationTest.java index 8ba97aa82c1c7..a17cb405550c6 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/RollingUpgradeMessageSerializationTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/RollingUpgradeMessageSerializationTest.java @@ -20,21 +20,11 @@ import java.util.Collection; import java.util.List; import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicReference; -import java.util.function.Supplier; +import java.util.UUID; import org.apache.ignite.Ignite; import org.apache.ignite.Ignition; -import org.apache.ignite.cluster.ClusterNode; -import org.apache.ignite.configuration.IgniteConfiguration; import org.apache.ignite.internal.IgniteEx; -import org.apache.ignite.internal.managers.communication.GridIoPolicy; -import org.apache.ignite.internal.managers.discovery.DiscoveryCustomMessage; -import org.apache.ignite.internal.processors.rollingupgrade.AbstractRollingUpgradeTest; -import org.apache.ignite.plugin.extensions.communication.Message; -import org.apache.ignite.spi.MessagesPluginProvider; +import org.apache.ignite.spi.discovery.tcp.internal.TcpDiscoveryNode; import org.junit.Test; import static org.apache.ignite.internal.processors.rollingupgrade.message.TestMessage.A; @@ -43,24 +33,10 @@ import static org.apache.ignite.internal.processors.rollingupgrade.message.TestMessage.D; import static org.apache.ignite.internal.processors.rollingupgrade.message.TestMessage.E; import static org.apache.ignite.internal.processors.rollingupgrade.message.TestMessage.F; +import static org.apache.ignite.testframework.GridTestUtils.waitForCondition; /** */ -public class RollingUpgradeMessageSerializationTest extends AbstractRollingUpgradeTest { - /** {@inheritDoc} */ - @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName, String ver) throws Exception { - IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName, ver); - - cfg.setPluginProviders(org.apache.ignite.internal.util.typedef.F.concat( - cfg.getPluginProviders(), - new MessagesPluginProvider( - TestCoreMessage.class, - TestPluginMessage.class, - TestDefaultRegistryMessage.class)) - ); - - return cfg; - } - +public class RollingUpgradeMessageSerializationTest extends AbstractRollingUpgradeMessageTest { /** */ @Test public void testSameOldVersion() throws Exception { @@ -76,25 +52,52 @@ public void testMixedPair() throws Exception { /** */ @Test public void testSameNewVersion() throws Exception { - checkMutualCoreMessageSend("2.20.0", "2.20.0", A, B, C, D, E, null); + checkMutualCoreMessageSend("2.20.0", "2.20.0", A, null, null, D, E, null); } /** */ @Test public void testWindowOpenSameVersion() throws Exception { - checkMutualCoreMessageSend("2.19.2", "2.19.2", A, B, C, D, null, null); + checkMutualCoreMessageSend("2.19.2", "2.19.2", A, B, null, D, null, null); } /** */ @Test public void testWindowOpenMixedPair() throws Exception { - checkMutualCoreMessageSend("2.19.2", "2.20.0", A, B, C, D, null, null); + checkMutualCoreMessageSend("2.19.2", "2.20.0", A, B, null, D, null, null); } /** */ @Test public void testWindowClosed() throws Exception { - checkMutualCoreMessageSend("2.20.0", "2.20.1", A, null, C, null, E, null); + checkMutualCoreMessageSend("2.20.0", "2.20.1", A, null, null, D, E, null); + } + + /** */ + @Test + public void testDeprecatedFieldDropped() throws Exception { + checkMutualCoreMessageSend("2.20.0", "2.21.0", A, null, null, D, E, null); + } + + /** */ + @Test + public void testDeprecatedFieldDroppedNewFieldShared() throws Exception { + checkMutualCoreMessageSend("2.20.1", "2.21.0", A, null, null, D, E, F); + } + + /** */ + @Test + public void testBackportedFeature() throws Exception { + checkMutualCoreMessageSend("2.19.3", "2.20.1", A, B, null, D, null, F); + } + + /** */ + @Test + public void testNestedMessages() throws Exception { + startServerNodes("2.20.0", "2.21.0"); + + checkNestedMessages(grid(0), grid(1), A, null, null, D, E, null); + checkNestedMessages(grid(1), grid(0), A, null, null, D, E, null); } /** */ @@ -134,13 +137,38 @@ public void testDiscoveryClientsOnDifferentVersions() throws Exception { upgradeNodeVersion(0, "2.20.0"); upgradeNodeVersion(1, "2.20.0"); + stopGrid(0); + IgniteEx newVerCli = startClientGrid(2, "2.20.0"); IgniteEx oldVerCli = startClientGrid(3, "2.19.0"); - Map receivedMsgs = sendOverDiscovery(grid(1), TestCoreMessage.build()); + Map receivedMsgs = sendOverDiscovery(grid(1), TestMessageType.CORE); assertFields(A, B, C, D, E, null, receivedMsgs.get(newVerCli.name())); assertFields(A, B, C, null, null, null, receivedMsgs.get(oldVerCli.name())); + + checkMutualCoreMessageSend(newVerCli, oldVerCli, A, B, C, null, null, null); + } + + /** */ + @Test + public void testDiscoveryClientRouterChange() throws Exception { + IgniteEx oldVerSrv = startGrid(0, "2.19.0"); + + ru(oldVerSrv).enableVersionUpgrade(); + + IgniteEx cli = startClientGrid(1, "2.20.0"); + IgniteEx newVerSrv = startGrid(2, "2.20.0"); + + assertEquals(oldVerSrv.localNode().id(), routerId(cli)); + + assertFields(A, B, C, null, null, null, sendOverDiscovery(newVerSrv, TestMessageType.CORE).get(cli.name())); + + stopGrid(0); + + assertTrue(waitForCondition(() -> newVerSrv.localNode().id().equals(routerId(cli)), getTestTimeout())); + + assertFields(A, B, C, D, E, null, sendOverDiscovery(newVerSrv, TestMessageType.CORE).get(cli.name())); } /** */ @@ -160,7 +188,7 @@ public void testCommunicationWithClient() throws Exception { public void testDefaultRegistryMixedPair() throws Exception { startServerNodes("2.19.0", "2.20.0"); - checkMutualMessageSend(grid(0), grid(1), TestDefaultRegistryMessage::build, A, null, C, D, E, F); + checkMutualMessageSend(grid(0), grid(1), TestMessageType.DEFAULT_REGISTRY, A, null, C, D, E, F); } /** */ @@ -170,7 +198,7 @@ public void testDiscoveryUniformRing() throws Exception { startGrid(1, "2.20.0"); startGrid(2, "2.20.0"); - checkCoreMessageBroadcast(grid(1), A, B, C, D, E, null); + checkCoreMessageBroadcast(grid(1), A, null, null, D, E, null); } /** */ @@ -186,6 +214,26 @@ public void testDiscoveryMixedRing() throws Exception { checkCoreMessageBroadcast(grid(1), A, B, C, null, null, null); } + /** */ + @Test + public void testDiscoveryRingSendFromNewerNode() throws Exception { + startGrid(0, "2.19.0"); + + ru(0).enableVersionUpgrade(); + + IgniteEx newVerCrd = startGrid(1, "2.20.0"); + IgniteEx oldVerSrv = startGrid(2, "2.19.0"); + + stopGrid(0); + + IgniteEx newVerSrv = startGrid(3, "2.20.0"); + + Map receivedMsgs = sendOverDiscovery(newVerSrv, TestMessageType.CORE); + + assertFields(A, B, C, D, E, null, receivedMsgs.get(newVerCrd.name())); + assertFields(A, B, C, null, null, null, receivedMsgs.get(oldVerSrv.name())); + } + /** */ @Test public void testCommunicationUpgradeOpensWindow() throws Exception { @@ -208,17 +256,17 @@ public void testCommunicationUpgradeAgreesNewFeature() throws Exception { startGrid(0, "2.19.2"); startGrid(1, "2.19.2"); - checkMutualCoreMessageSend(grid(0), grid(1), A, B, C, D, null, null); + checkMutualCoreMessageSend(grid(0), grid(1), A, B, null, D, null, null); ru(1).enableVersionUpgrade(); upgradeNodeVersion(0, "2.19.2", "2.20.0"); - checkMutualCoreMessageSend(grid(0), grid(1), A, B, C, D, null, null); + checkMutualCoreMessageSend(grid(0), grid(1), A, B, null, D, null, null); upgradeNodeVersion(1, "2.19.2", "2.20.0"); - checkMutualCoreMessageSend(grid(0), grid(1), A, B, C, D, E, null); + checkMutualCoreMessageSend(grid(0), grid(1), A, B, null, D, E, null); } /** */ @@ -226,9 +274,9 @@ public void testCommunicationUpgradeAgreesNewFeature() throws Exception { public void testPluginDiffersCoreMatches() throws Exception { startServerNodes("2.20.0 | 1.0.0", "2.20.0 | 2.0.0"); - checkMutualCoreMessageSend(grid(0), grid(1), A, B, C, D, E, null); + checkMutualCoreMessageSend(grid(0), grid(1), A, null, null, D, E, null); - checkMutualMessageSend(grid(0), grid(1), TestPluginMessage::build, A, B, C, D, null, null); + checkMutualMessageSend(grid(0), grid(1), TestMessageType.PLUGIN, A, B, C, D, null, null); } /** */ @@ -236,23 +284,42 @@ public void testPluginDiffersCoreMatches() throws Exception { public void testPluginSameVersion() throws Exception { startServerNodes("2.20.0 | 2.0.0", "2.20.0 | 2.0.0"); - checkMutualCoreMessageSend(grid(0), grid(1), A, B, C, D, E, null); + checkMutualCoreMessageSend(grid(0), grid(1), A, null, null, D, E, null); - checkMutualMessageSend(grid(0), grid(1), TestPluginMessage::build, A, B, C, D, E, null); + checkMutualMessageSend(grid(0), grid(1), TestMessageType.PLUGIN, A, null, C, D, E, null); } /** */ @Test - public void testPluginMissingOnClient() throws Exception { + public void testPluginDeprecatedFieldDropped() throws Exception { + startServerNodes("2.20.0 | 2.0.0", "2.20.0 | 3.0.0"); + + checkMutualMessageSend(grid(0), grid(1), TestMessageType.PLUGIN, A, null, C, D, E, null); + } + + /** */ + @Test + public void testCoreAndPluginDiffer() throws Exception { + startServerNodes("2.19.2 | 1.0.0", "2.20.0 | 2.0.0"); + + checkMutualCoreMessageSend(grid(0), grid(1), A, B, null, D, null, null); + + checkMutualMessageSend(grid(0), grid(1), TestMessageType.PLUGIN, A, B, C, D, null, null); + } + + /** */ + @Test + public void testPluginWithoutFeaturesOnClient() throws Exception { IgniteEx srv = startGrid(0, "2.20.0 | 2.0.0"); ru(srv).enableVersionUpgrade(); - IgniteEx cli = startClientGrid(1, "2.20.0"); + IgniteEx cli = startClientGrid(1, "2.20.0 | 0.9.0"); - checkMutualMessageSend(srv, cli, TestPluginMessage::build, A, B, C, null, null, null); + checkReceivedMessageFields(srv, cli, TestMessageType.PLUGIN, A, null, C, null, null, null); + checkReceivedMessageFields(cli, srv, TestMessageType.PLUGIN, A, B, C, null, null, null); - checkMutualCoreMessageSend(srv, cli, A, B, C, D, E, null); + checkMutualCoreMessageSend(srv, cli, A, null, null, D, E, null); } /** */ @@ -284,49 +351,67 @@ public void testWholeUpgradeProcess() throws Exception { finalizeClusterVersion(0, "2.19.2"); - checkMessagesTransmissionBetweenAllNodes(A, B, C, D, null, null); + checkMessagesTransmissionBetweenAllNodes(A, B, null, D, null, null); ru(1).enableVersionUpgrade(); upgradeNodeVersion(0, "2.19.2", "2.20.0"); - checkMessagesTransmissionBetweenAllNodes(A, B, C, D, null, null); + checkMessagesTransmissionBetweenAllNodes(A, B, null, D, null, null); upgradeNodeVersion(1, "2.19.2", "2.20.0"); - checkMutualCoreMessageSend(grid(0), grid(1), A, B, C, D, E, null); - checkMutualCoreMessageSend(grid(0), grid(2), A, B, C, D, null, null); - checkMutualCoreMessageSend(grid(1), grid(2), A, B, C, D, null, null); + checkMutualCoreMessageSend(grid(0), grid(1), A, B, null, D, E, null); + checkMutualCoreMessageSend(grid(0), grid(2), A, B, null, D, null, null); + checkMutualCoreMessageSend(grid(1), grid(2), A, B, null, D, null, null); upgradeNodeVersion(2, "2.19.2", "2.20.0"); - checkMessagesTransmissionBetweenAllNodes(A, B, C, D, E, null); + checkMessagesTransmissionBetweenAllNodes(A, B, null, D, E, null); finalizeClusterVersion(0, "2.20.0"); - checkMessagesTransmissionBetweenAllNodes(A, B, C, D, E, null); + checkMessagesTransmissionBetweenAllNodes(A, null, null, D, E, null); ru(1).enableVersionUpgrade(); upgradeNodeVersion(0, "2.20.0", "2.20.1"); - checkMutualCoreMessageSend(grid(0), grid(1), A, null, C, null, E, null); - checkMutualCoreMessageSend(grid(0), grid(2), A, null, C, null, E, null); - checkMutualCoreMessageSend(grid(1), grid(2), A, B, C, D, E, null); + checkMutualCoreMessageSend(grid(0), grid(1), A, null, null, D, E, null); + checkMutualCoreMessageSend(grid(0), grid(2), A, null, null, D, E, null); + checkMutualCoreMessageSend(grid(1), grid(2), A, null, null, D, E, null); upgradeNodeVersion(1, "2.20.0", "2.20.1"); - checkMutualCoreMessageSend(grid(0), grid(1), A, B, C, D, E, F); - checkMutualCoreMessageSend(grid(0), grid(2), A, null, C, null, E, null); - checkMutualCoreMessageSend(grid(1), grid(2), A, null, C, null, E, null); + checkMutualCoreMessageSend(grid(0), grid(1), A, null, null, D, E, F); + checkMutualCoreMessageSend(grid(0), grid(2), A, null, null, D, E, null); + checkMutualCoreMessageSend(grid(1), grid(2), A, null, null, D, E, null); upgradeNodeVersion(2, "2.20.0", "2.20.1"); - checkMessagesTransmissionBetweenAllNodes(A, B, C, D, E, F); + checkMessagesTransmissionBetweenAllNodes(A, null, null, D, E, F); finalizeClusterVersion(0, "2.20.1"); - checkMessagesTransmissionBetweenAllNodes(A, B, C, D, E, F); + checkMessagesTransmissionBetweenAllNodes(A, null, null, D, E, F); + + ru(1).enableVersionUpgrade(); + + upgradeNodeVersion(0, "2.20.1", "2.21.0"); + + checkMessagesTransmissionBetweenAllNodes(A, null, null, D, E, F); + + upgradeNodeVersion(1, "2.20.1", "2.21.0"); + + checkMessagesTransmissionBetweenAllNodes(A, null, null, D, E, F); + + upgradeNodeVersion(2, "2.20.1", "2.21.0"); + + checkMessagesTransmissionBetweenAllNodes(A, null, null, D, E, F); + + finalizeClusterVersion(0, "2.21.0"); + + checkMessagesTransmissionBetweenAllNodes(A, null, null, D, E, F); } /** */ @@ -375,7 +460,7 @@ private void checkMutualCoreMessageSend( String expE, String expF ) throws Exception { - checkMutualMessageSend(first, second, TestCoreMessage::build, expA, expB, expC, expD, expE, expF); + checkMutualMessageSend(first, second, TestMessageType.CORE, expA, expB, expC, expD, expE, expF); } /** */ @@ -388,17 +473,17 @@ private void checkCoreMessageBroadcast( String expE, String expF ) throws Exception { - Collection receivedMsgs = sendOverDiscovery(from, TestCoreMessage.build()).values(); + Collection receivedMsgs = sendOverDiscovery(from, TestMessageType.CORE).values(); - for (TestCoreMessage msg : receivedMsgs) - assertFields(expA, expB, expC, expD, expE, expF, msg); + for (TestDiscoveryMessage rcvd : receivedMsgs) + assertFields(expA, expB, expC, expD, expE, expF, rcvd); } /** */ - private void checkMutualMessageSend( + private void checkMutualMessageSend( IgniteEx first, IgniteEx second, - Supplier msgFactory, + TestMessageType msgType, String expA, String expB, String expC, @@ -406,15 +491,15 @@ private void checkMutualMessage String expE, String expF ) throws Exception { - checkReceivedMessageFields(first, second, msgFactory, expA, expB, expC, expD, expE, expF); - checkReceivedMessageFields(second, first, msgFactory, expA, expB, expC, expD, expE, expF); + checkReceivedMessageFields(first, second, msgType, expA, expB, expC, expD, expE, expF); + checkReceivedMessageFields(second, first, msgType, expA, expB, expC, expD, expE, expF); } /** */ - private void checkReceivedMessageFields( + private void checkReceivedMessageFields( IgniteEx from, IgniteEx to, - Supplier msgFactory, + TestMessageType msgType, String expA, String expB, String expC, @@ -422,72 +507,40 @@ private void checkReceivedMessa String expE, String expF ) throws Exception { - assertFields(expA, expB, expC, expD, expE, expF, send(from, to, msgFactory.get())); + assertFields(expA, expB, expC, expD, expE, expF, send(from, to, msgType)); - assertFields(expA, expB, expC, expD, expE, expF, sendOverDiscovery(from, msgFactory.get()).get(to.name())); + assertFields(expA, expB, expC, expD, expE, expF, sendOverDiscovery(from, msgType).get(to.name())); } /** */ - private T send(IgniteEx from, IgniteEx to, T msg) throws Exception { - AtomicReference got = new AtomicReference<>(); - CountDownLatch latch = new CountDownLatch(1); - - String topic = msg.getClass().getName(); - - to.context().io().addMessageListener(topic, (nodeId, rcvd, plc) -> { - got.set((T)rcvd); - - latch.countDown(); - }); - - ClusterNode rcvNode = from.context().discovery().node(to.localNode().id()); - - from.context().io().sendToCustomTopic(rcvNode, topic, msg, GridIoPolicy.PUBLIC_POOL); - - assertTrue(latch.await(getTestTimeout(), TimeUnit.MILLISECONDS)); - - return got.get(); - } - - /** */ - private Map sendOverDiscovery( + private void checkNestedMessages( IgniteEx from, - T msg + IgniteEx to, + String expA, + String expB, + String expC, + String expD, + String expE, + String expF ) throws Exception { - List clusterNodes = Ignition.allGrids(); - - Map receivedMsgs = new ConcurrentHashMap<>(); - - CountDownLatch latch = new CountDownLatch(clusterNodes.size()); + List receivedMsgs = List.of( + send(from, to, TestMessageType.CONTAINER), + sendOverDiscovery(from, TestMessageType.CONTAINER).get(to.name()) + ); - for (Ignite rcv : clusterNodes) { - String name = rcv.name(); + for (TestMessage rcvd : receivedMsgs) { + List nestedMsgs = rcvd.nestedMessages(); - ((IgniteEx)rcv).context().discovery().setCustomEventListener((Class)msg.getClass(), - (v, n, m) -> { - receivedMsgs.put(name, m); + assertEquals(6, nestedMsgs.size()); - latch.countDown(); - }); + for (TestMessage nestedMsg : nestedMsgs) + assertFields(expA, expB, expC, expD, expE, expF, nestedMsg); } - - from.context().discovery().sendCustomEvent(msg); - - assertTrue(latch.await(getTestTimeout(), TimeUnit.MILLISECONDS)); - - receivedMsgs.remove(from.name()); - - return receivedMsgs; } /** */ - private void startServerNodes(String firstVer, String secondVer) throws Exception { - IgniteEx first = startGrid(0, firstVer); - - if (!firstVer.equals(secondVer)) - ru(first).enableVersionUpgrade(); - - startGrid(1, secondVer); + private static UUID routerId(IgniteEx cli) { + return ((TcpDiscoveryNode)cli.localNode()).clientRouterNodeId(); } /** */ diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestContainerMessage_2_20_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestContainerMessage_2_20_0.java new file mode 100644 index 0000000000000..b7a94366c9c9e --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestContainerMessage_2_20_0.java @@ -0,0 +1,87 @@ +/* + * 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. + */ + + +package org.apache.ignite.internal.processors.rollingupgrade.message; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.function.Predicate; +import org.apache.ignite.internal.Compress; +import org.apache.ignite.internal.Order; +import org.apache.ignite.internal.processors.rollingupgrade.feature.IgniteFeature; + +/** */ +public class TestContainerMessage_2_20_0 extends TestDiscoveryMessage { + /** */ + @Order(0) + TestCoreMessage_2_20_0 msg; + + /** */ + @Order(1) + List list; + + /** */ + @Order(2) + Map map; + + /** */ + @Order(3) + TestCoreMessage_2_20_0[] arr; + + /** */ + @Compress + @Order(4) + TestCoreMessage_2_20_0 compressedMsg; + + /** */ + @Compress + @Order(5) + Map compressedMap; + + /** {@inheritDoc} */ + @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { + msg = nestedMessage(featureStatusProvider); + list = List.of(nestedMessage(featureStatusProvider)); + map = Map.of(0, nestedMessage(featureStatusProvider)); + arr = new TestCoreMessage_2_20_0[] {nestedMessage(featureStatusProvider)}; + compressedMsg = nestedMessage(featureStatusProvider); + compressedMap = Map.of(0, nestedMessage(featureStatusProvider)); + + return this; + } + + /** {@inheritDoc} */ + @Override public List nestedMessages() { + List res = new ArrayList<>(); + + res.add(msg); + res.addAll(list); + res.addAll(map.values()); + res.addAll(List.of(arr)); + res.add(compressedMsg); + res.addAll(compressedMap.values()); + + return res; + } + + /** */ + private static TestCoreMessage_2_20_0 nestedMessage(Predicate featureStatusProvider) { + return (TestCoreMessage_2_20_0)new TestCoreMessage_2_20_0().fill(featureStatusProvider); + } +} diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestContainerMessage_2_21_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestContainerMessage_2_21_0.java new file mode 100644 index 0000000000000..efffa0ce4d535 --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestContainerMessage_2_21_0.java @@ -0,0 +1,87 @@ +/* + * 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. + */ + + +package org.apache.ignite.internal.processors.rollingupgrade.message; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.function.Predicate; +import org.apache.ignite.internal.Compress; +import org.apache.ignite.internal.Order; +import org.apache.ignite.internal.processors.rollingupgrade.feature.IgniteFeature; + +/** */ +public class TestContainerMessage_2_21_0 extends TestDiscoveryMessage { + /** */ + @Order(0) + TestCoreMessage_2_21_0 msg; + + /** */ + @Order(1) + List list; + + /** */ + @Order(2) + Map map; + + /** */ + @Order(3) + TestCoreMessage_2_21_0[] arr; + + /** */ + @Compress + @Order(4) + TestCoreMessage_2_21_0 compressedMsg; + + /** */ + @Compress + @Order(5) + Map compressedMap; + + /** {@inheritDoc} */ + @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { + msg = nestedMessage(featureStatusProvider); + list = List.of(nestedMessage(featureStatusProvider)); + map = Map.of(0, nestedMessage(featureStatusProvider)); + arr = new TestCoreMessage_2_21_0[] {nestedMessage(featureStatusProvider)}; + compressedMsg = nestedMessage(featureStatusProvider); + compressedMap = Map.of(0, nestedMessage(featureStatusProvider)); + + return this; + } + + /** {@inheritDoc} */ + @Override public List nestedMessages() { + List res = new ArrayList<>(); + + res.add(msg); + res.addAll(list); + res.addAll(map.values()); + res.addAll(List.of(arr)); + res.add(compressedMsg); + res.addAll(compressedMap.values()); + + return res; + } + + /** */ + private static TestCoreMessage_2_21_0 nestedMessage(Predicate featureStatusProvider) { + return (TestCoreMessage_2_21_0)new TestCoreMessage_2_21_0().fill(featureStatusProvider); + } +} diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_0.java new file mode 100644 index 0000000000000..66e41d805f15a --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_0.java @@ -0,0 +1,61 @@ +/* + * 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. + */ + +package org.apache.ignite.internal.processors.rollingupgrade.message; + +import java.util.function.Predicate; +import org.apache.ignite.internal.Order; +import org.apache.ignite.internal.processors.rollingupgrade.feature.IgniteFeature; + +/** */ +public class TestCoreMessage_2_19_0 extends TestDiscoveryMessage { + /** */ + @Order(0) + String fldA; + + /** */ + @Order(1) + String fldB; + + /** */ + @Order(2) + String fldC; + + /** {@inheritDoc} */ + @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { + fldA = A; + fldB = B; + fldC = C; + + return this; + } + + /** {@inheritDoc} */ + @Override public String fldA() { + return fldA; + } + + /** {@inheritDoc} */ + @Override public String fldB() { + return fldB; + } + + /** {@inheritDoc} */ + @Override public String fldC() { + return fldC; + } +} diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_2.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_2.java new file mode 100644 index 0000000000000..9ffd100feb423 --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_2.java @@ -0,0 +1,79 @@ +/* + * 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. + */ + +package org.apache.ignite.internal.processors.rollingupgrade.message; + +import java.util.function.Predicate; +import org.apache.ignite.internal.FeatureGated; +import org.apache.ignite.internal.Order; +import org.apache.ignite.internal.processors.rollingupgrade.feature.IgniteFeature; +import org.apache.ignite.internal.processors.rollingupgrade.feature.TestIgniteReleaseFeatures_2_19_2; + +import static org.apache.ignite.internal.processors.rollingupgrade.feature.TestIgniteReleaseFeatures_2_19_2.VER_2_19_2_ID_2_FEATURE; + +/** */ +@FeatureGated(registry = TestIgniteReleaseFeatures_2_19_2.class) +public class TestCoreMessage_2_19_2 extends TestDiscoveryMessage { + /** */ + @Order(0) + String fldA; + + /** */ + @Order(1) + String fldB; + + /** */ + @Order(value = 2, deprecatedBy = "VER_2_19_2_ID_2_FEATURE") + String fldC; + + /** */ + @Order(value = 3, introducedBy = "VER_2_19_2_ID_1_FEATURE") + String fldD; + + /** {@inheritDoc} */ + @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { + fldA = A; + fldB = B; + + if (!featureStatusProvider.test(VER_2_19_2_ID_2_FEATURE)) + fldC = C; + + fldD = D; + + return this; + } + + /** {@inheritDoc} */ + @Override public String fldA() { + return fldA; + } + + /** {@inheritDoc} */ + @Override public String fldB() { + return fldB; + } + + /** {@inheritDoc} */ + @Override public String fldC() { + return fldC; + } + + /** {@inheritDoc} */ + @Override public String fldD() { + return fldD; + } +} diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_3.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_3.java new file mode 100644 index 0000000000000..dd5d187e1dd39 --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_3.java @@ -0,0 +1,89 @@ +/* + * 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. + */ + +package org.apache.ignite.internal.processors.rollingupgrade.message; + +import java.util.function.Predicate; +import org.apache.ignite.internal.FeatureGated; +import org.apache.ignite.internal.Order; +import org.apache.ignite.internal.processors.rollingupgrade.feature.IgniteFeature; +import org.apache.ignite.internal.processors.rollingupgrade.feature.TestIgniteReleaseFeatures_2_19_3; + +import static org.apache.ignite.internal.processors.rollingupgrade.feature.TestIgniteReleaseFeatures_2_19_3.VER_2_19_2_ID_2_FEATURE; + +/** */ +@FeatureGated(registry = TestIgniteReleaseFeatures_2_19_3.class) +public class TestCoreMessage_2_19_3 extends TestDiscoveryMessage { + /** */ + @Order(0) + String fldA; + + /** */ + @Order(1) + String fldB; + + /** */ + @Order(value = 2, deprecatedBy = "VER_2_19_2_ID_2_FEATURE") + String fldC; + + /** */ + @Order(value = 3, introducedBy = "VER_2_19_2_ID_1_FEATURE") + String fldD; + + /** */ + @Order(value = 4, introducedBy = "VER_2_19_3_ID_6_FEATURE") + String fldF; + + /** {@inheritDoc} */ + @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { + fldA = A; + fldB = B; + + if (!featureStatusProvider.test(VER_2_19_2_ID_2_FEATURE)) + fldC = C; + + fldD = D; + fldF = F; + + return this; + } + + /** {@inheritDoc} */ + @Override public String fldA() { + return fldA; + } + + /** {@inheritDoc} */ + @Override public String fldB() { + return fldB; + } + + /** {@inheritDoc} */ + @Override public String fldC() { + return fldC; + } + + /** {@inheritDoc} */ + @Override public String fldD() { + return fldD; + } + + /** {@inheritDoc} */ + @Override public String fldF() { + return fldF; + } +} diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_20_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_20_0.java new file mode 100644 index 0000000000000..74b30f7e5b819 --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_20_0.java @@ -0,0 +1,92 @@ +/* + * 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. + */ + +package org.apache.ignite.internal.processors.rollingupgrade.message; + +import java.util.function.Predicate; +import org.apache.ignite.internal.FeatureGated; +import org.apache.ignite.internal.Order; +import org.apache.ignite.internal.processors.rollingupgrade.feature.IgniteFeature; +import org.apache.ignite.internal.processors.rollingupgrade.feature.TestIgniteReleaseFeatures_2_20_0; + +import static org.apache.ignite.internal.processors.rollingupgrade.feature.TestIgniteReleaseFeatures_2_20_0.VER_2_19_2_ID_2_FEATURE; +import static org.apache.ignite.internal.processors.rollingupgrade.feature.TestIgniteReleaseFeatures_2_20_0.VER_2_20_0_ID_3_FEATURE; + +/** */ +@FeatureGated(registry = TestIgniteReleaseFeatures_2_20_0.class) +public class TestCoreMessage_2_20_0 extends TestDiscoveryMessage { + /** */ + @Order(0) + String fldA; + + /** */ + @Order(value = 1, deprecatedBy = "VER_2_20_0_ID_3_FEATURE") + String fldB; + + /** */ + @Order(value = 2, deprecatedBy = "VER_2_19_2_ID_2_FEATURE") + String fldC; + + /** */ + @Order(value = 3, introducedBy = "VER_2_19_2_ID_1_FEATURE") + String fldD; + + /** */ + @Order(value = 4, introducedBy = "VER_2_20_0_ID_4_FEATURE") + String fldE; + + /** {@inheritDoc} */ + @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { + fldA = A; + + if (!featureStatusProvider.test(VER_2_20_0_ID_3_FEATURE)) + fldB = B; + + if (!featureStatusProvider.test(VER_2_19_2_ID_2_FEATURE)) + fldC = C; + + fldD = D; + fldE = E; + + return this; + } + + /** {@inheritDoc} */ + @Override public String fldA() { + return fldA; + } + + /** {@inheritDoc} */ + @Override public String fldB() { + return fldB; + } + + /** {@inheritDoc} */ + @Override public String fldC() { + return fldC; + } + + /** {@inheritDoc} */ + @Override public String fldD() { + return fldD; + } + + /** {@inheritDoc} */ + @Override public String fldE() { + return fldE; + } +} diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_20_1.java similarity index 66% rename from modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage.java rename to modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_20_1.java index 35234fac1a5ac..fef676f365c32 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_20_1.java @@ -17,16 +17,18 @@ package org.apache.ignite.internal.processors.rollingupgrade.message; +import java.util.function.Predicate; import org.apache.ignite.internal.FeatureGated; import org.apache.ignite.internal.Order; -import org.apache.ignite.internal.managers.discovery.DiscoveryCustomMessage; +import org.apache.ignite.internal.processors.rollingupgrade.feature.IgniteFeature; import org.apache.ignite.internal.processors.rollingupgrade.feature.TestIgniteReleaseFeatures_2_20_1; -import org.apache.ignite.lang.IgniteUuid; -import org.jetbrains.annotations.Nullable; + +import static org.apache.ignite.internal.processors.rollingupgrade.feature.TestIgniteReleaseFeatures_2_20_1.VER_2_19_2_ID_2_FEATURE; +import static org.apache.ignite.internal.processors.rollingupgrade.feature.TestIgniteReleaseFeatures_2_20_1.VER_2_20_0_ID_3_FEATURE; /** */ @FeatureGated(registry = TestIgniteReleaseFeatures_2_20_1.class) -public class TestCoreMessage extends DiscoveryCustomMessage implements TestMessage { +public class TestCoreMessage_2_20_1 extends TestDiscoveryMessage { /** */ @Order(0) String fldA; @@ -36,43 +38,36 @@ public class TestCoreMessage extends DiscoveryCustomMessage implements TestMessa String fldB; /** */ - @Order(2) + @Order(value = 2, deprecatedBy = "VER_2_19_2_ID_2_FEATURE") String fldC; /** */ - @Order(value = 3, introducedBy = "VER_2_19_2_ID_1_FEATURE", deprecatedBy = "VER_2_20_0_ID_3_FEATURE") + @Order(value = 3, introducedBy = "VER_2_19_2_ID_1_FEATURE") String fldD; /** */ - @Order(value = 4, introducedBy = "VER_2_20_0_ID_3_FEATURE") + @Order(value = 4, introducedBy = "VER_2_20_0_ID_4_FEATURE") String fldE; /** */ @Order(value = 5, introducedBy = "VER_2_20_1_ID_6_FEATURE") String fldF; - /** */ - public TestCoreMessage() { - super(IgniteUuid.randomUuid()); - } - /** {@inheritDoc} */ - @Nullable @Override public DiscoveryCustomMessage ackMessage() { - return null; - } + @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { + fldA = A; - /** */ - public static TestCoreMessage build() { - TestCoreMessage msg = new TestCoreMessage(); + if (!featureStatusProvider.test(VER_2_20_0_ID_3_FEATURE)) + fldB = B; + + if (!featureStatusProvider.test(VER_2_19_2_ID_2_FEATURE)) + fldC = C; - msg.fldA = A; - msg.fldB = B; - msg.fldC = C; - msg.fldD = D; - msg.fldE = E; - msg.fldF = F; + fldD = D; + fldE = E; + fldF = F; - return msg; + return this; } /** {@inheritDoc} */ diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_21_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_21_0.java new file mode 100644 index 0000000000000..a526c213e935f --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_21_0.java @@ -0,0 +1,84 @@ +/* + * 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. + */ + +package org.apache.ignite.internal.processors.rollingupgrade.message; + +import java.util.function.Predicate; +import org.apache.ignite.internal.FeatureGated; +import org.apache.ignite.internal.Order; +import org.apache.ignite.internal.processors.rollingupgrade.feature.IgniteFeature; +import org.apache.ignite.internal.processors.rollingupgrade.feature.TestIgniteReleaseFeatures_2_21_0; + +/** */ +@FeatureGated(registry = TestIgniteReleaseFeatures_2_21_0.class) +public class TestCoreMessage_2_21_0 extends TestDiscoveryMessage { + /** */ + @Order(0) + String fldA; + + /** */ + @Order(1) + String fldD; + + /** */ + @Order(value = 2, introducedBy = "VER_2_20_0_ID_4_FEATURE") + String fldE; + + /** */ + @Order(value = 3, introducedBy = "VER_2_21_0_ID_6_FEATURE") + String fldF; + + /** {@inheritDoc} */ + @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { + fldA = A; + fldD = D; + fldE = E; + fldF = F; + + return this; + } + + /** {@inheritDoc} */ + @Override public String fldA() { + return fldA; + } + + /** {@inheritDoc} */ + @Override public String fldB() { + return null; + } + + /** {@inheritDoc} */ + @Override public String fldC() { + return null; + } + + /** {@inheritDoc} */ + @Override public String fldD() { + return fldD; + } + + /** {@inheritDoc} */ + @Override public String fldE() { + return fldE; + } + + /** {@inheritDoc} */ + @Override public String fldF() { + return fldF; + } +} diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestDefaultRegistryMessage.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestDefaultRegistryMessage_2_19_0.java similarity index 68% rename from modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestDefaultRegistryMessage.java rename to modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestDefaultRegistryMessage_2_19_0.java index 02e6173990b11..1070a2ca80eb3 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestDefaultRegistryMessage.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestDefaultRegistryMessage_2_19_0.java @@ -17,13 +17,12 @@ package org.apache.ignite.internal.processors.rollingupgrade.message; +import java.util.function.Predicate; import org.apache.ignite.internal.Order; -import org.apache.ignite.internal.managers.discovery.DiscoveryCustomMessage; -import org.apache.ignite.lang.IgniteUuid; -import org.jetbrains.annotations.Nullable; +import org.apache.ignite.internal.processors.rollingupgrade.feature.IgniteFeature; /** */ -public class TestDefaultRegistryMessage extends DiscoveryCustomMessage implements TestMessage { +public class TestDefaultRegistryMessage_2_19_0 extends TestDiscoveryMessage { /** */ @Order(0) String fldA; @@ -45,31 +44,19 @@ public class TestDefaultRegistryMessage extends DiscoveryCustomMessage implement String fldE; /** */ - @Order(value = 5, introducedBy = "ROLLING_UPGRADE_FEATURE") + @Order(5) String fldF; - /** */ - public TestDefaultRegistryMessage() { - super(IgniteUuid.randomUuid()); - } - /** {@inheritDoc} */ - @Nullable @Override public DiscoveryCustomMessage ackMessage() { - return null; - } - - /** */ - public static TestDefaultRegistryMessage build() { - TestDefaultRegistryMessage msg = new TestDefaultRegistryMessage(); - - msg.fldA = A; - msg.fldB = B; - msg.fldC = C; - msg.fldD = D; - msg.fldE = E; - msg.fldF = F; - - return msg; + @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { + fldA = A; + fldB = B; + fldC = C; + fldD = D; + fldE = E; + fldF = F; + + return this; } /** {@inheritDoc} */ diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestDefaultRegistryMessage_2_20_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestDefaultRegistryMessage_2_20_0.java new file mode 100644 index 0000000000000..4da4e861979a3 --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestDefaultRegistryMessage_2_20_0.java @@ -0,0 +1,91 @@ +/* + * 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. + */ + +package org.apache.ignite.internal.processors.rollingupgrade.message; + +import java.util.function.Predicate; +import org.apache.ignite.internal.Order; +import org.apache.ignite.internal.processors.rollingupgrade.feature.IgniteFeature; + +/** */ +public class TestDefaultRegistryMessage_2_20_0 extends TestDiscoveryMessage { + /** */ + @Order(0) + String fldA; + + /** */ + @Order(value = 1, deprecatedBy = "ROLLING_UPGRADE_FEATURE") + String fldB; + + /** */ + @Order(2) + String fldC; + + /** */ + @Order(3) + String fldD; + + /** */ + @Order(4) + String fldE; + + /** */ + @Order(5) + String fldF; + + /** {@inheritDoc} */ + @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { + fldA = A; + fldB = B; + fldC = C; + fldD = D; + fldE = E; + fldF = F; + + return this; + } + + /** {@inheritDoc} */ + @Override public String fldA() { + return fldA; + } + + /** {@inheritDoc} */ + @Override public String fldB() { + return fldB; + } + + /** {@inheritDoc} */ + @Override public String fldC() { + return fldC; + } + + /** {@inheritDoc} */ + @Override public String fldD() { + return fldD; + } + + /** {@inheritDoc} */ + @Override public String fldE() { + return fldE; + } + + /** {@inheritDoc} */ + @Override public String fldF() { + return fldF; + } +} diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestDiscoveryMessage.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestDiscoveryMessage.java new file mode 100644 index 0000000000000..d19494a4c994d --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestDiscoveryMessage.java @@ -0,0 +1,42 @@ +/* + * 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. + */ + +package org.apache.ignite.internal.processors.rollingupgrade.message; + +import java.util.function.Predicate; +import org.apache.ignite.internal.managers.discovery.DiscoveryCustomMessage; +import org.apache.ignite.internal.processors.rollingupgrade.feature.IgniteFeature; +import org.apache.ignite.lang.IgniteUuid; +import org.jetbrains.annotations.Nullable; + +/** */ +public abstract class TestDiscoveryMessage extends DiscoveryCustomMessage implements TestMessage { + /** */ + protected TestDiscoveryMessage() { + super(IgniteUuid.randomUuid()); + } + + /** */ + public TestDiscoveryMessage fill(Predicate featureStatusProvider) { + return this; + } + + /** {@inheritDoc} */ + @Nullable @Override public DiscoveryCustomMessage ackMessage() { + return null; + } +} diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestMessage.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestMessage.java index 15c639bf6fdaa..e5722f0a8ef29 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestMessage.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestMessage.java @@ -17,41 +17,60 @@ package org.apache.ignite.internal.processors.rollingupgrade.message; +import java.util.List; + /** */ public interface TestMessage { /** */ - public static final String A = "A"; + String A = "A"; + + /** */ + String B = "B"; /** */ - public static final String B = "B"; + String C = "C"; /** */ - public static final String C = "C"; + String D = "D"; /** */ - public static final String D = "D"; + String E = "E"; /** */ - public static final String E = "E"; + String F = "F"; /** */ - public static final String F = "F"; + default String fldA() { + return null; + } /** */ - public String fldA(); + default String fldB() { + return null; + } /** */ - public String fldB(); + default String fldC() { + return null; + } /** */ - public String fldC(); + default String fldD() { + return null; + } /** */ - public String fldD(); + default String fldE() { + return null; + } /** */ - public String fldE(); + default String fldF() { + return null; + } /** */ - public String fldF(); + default List nestedMessages() { + return List.of(); + } } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestMessageType.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestMessageType.java new file mode 100644 index 0000000000000..9519e31e942d3 --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestMessageType.java @@ -0,0 +1,77 @@ +/* + * 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. + */ + +package org.apache.ignite.internal.processors.rollingupgrade.message; + +import java.util.Arrays; +import java.util.function.Predicate; +import org.apache.ignite.internal.processors.rollingupgrade.AbstractRollingUpgradeTest.TestVersions; +import org.apache.ignite.internal.processors.rollingupgrade.feature.IgniteFeature; +import org.apache.ignite.plugin.extensions.communication.Message; +import org.jetbrains.annotations.Nullable; + +/** */ +public enum TestMessageType { + /** */ + CORE("TestCoreMessage"), + + /** */ + PLUGIN("TestPluginMessage"), + + /** */ + DEFAULT_REGISTRY("TestDefaultRegistryMessage"), + + /** */ + CONTAINER("TestContainerMessage"); + + /** */ + private final String clsName; + + /** */ + TestMessageType(String clsName) { + this.clsName = clsName; + } + + /** */ + @Nullable private Class resolveClass(String cmpVers) { + TestVersions vers = TestVersions.parse(cmpVers); + + if (this == PLUGIN && !vers.containsPlugin()) + return null; + + String cmpVer = this == PLUGIN ? vers.pluginVersion() : vers.coreVersion(); + + String release = '_' + cmpVer.replace('.', '_'); + + try { + return Class.forName(TestMessageType.class.getPackageName() + '.' + clsName + release).asSubclass(Message.class); + } + catch (ClassNotFoundException ignored) { + return null; + } + } + + /** */ + public static Class[] resolveTestMessageClasses(String cmpVers) { + return Arrays.stream(values()).map(msgType -> msgType.resolveClass(cmpVers)).toArray(Class[]::new); + } + + /** */ + public TestDiscoveryMessage build(String cmpVers, Predicate featureStatusProvider) throws Exception { + return ((TestDiscoveryMessage)resolveClass(cmpVers).getConstructor().newInstance()).fill(featureStatusProvider); + } +} diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_0_9_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_0_9_0.java new file mode 100644 index 0000000000000..23a9f81da32b3 --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_0_9_0.java @@ -0,0 +1,61 @@ +/* + * 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. + */ + +package org.apache.ignite.internal.processors.rollingupgrade.message; + +import java.util.function.Predicate; +import org.apache.ignite.internal.Order; +import org.apache.ignite.internal.processors.rollingupgrade.feature.IgniteFeature; + +/** */ +public class TestPluginMessage_0_9_0 extends TestDiscoveryMessage { + /** */ + @Order(0) + String fldA; + + /** */ + @Order(1) + String fldB; + + /** */ + @Order(2) + String fldC; + + /** {@inheritDoc} */ + @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { + fldA = A; + fldB = B; + fldC = C; + + return this; + } + + /** {@inheritDoc} */ + @Override public String fldA() { + return fldA; + } + + /** {@inheritDoc} */ + @Override public String fldB() { + return fldB; + } + + /** {@inheritDoc} */ + @Override public String fldC() { + return fldC; + } +} diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_1_0_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_1_0_0.java new file mode 100644 index 0000000000000..af8801134e4e9 --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_1_0_0.java @@ -0,0 +1,74 @@ +/* + * 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. + */ + +package org.apache.ignite.internal.processors.rollingupgrade.message; + +import java.util.function.Predicate; +import org.apache.ignite.internal.FeatureGated; +import org.apache.ignite.internal.Order; +import org.apache.ignite.internal.processors.rollingupgrade.feature.IgniteFeature; +import org.apache.ignite.internal.processors.rollingupgrade.feature.TestPluginReleaseFeatures_1_0_0; + +/** */ +@FeatureGated(registry = TestPluginReleaseFeatures_1_0_0.class) +public class TestPluginMessage_1_0_0 extends TestDiscoveryMessage { + /** */ + @Order(0) + String fldA; + + /** */ + @Order(1) + String fldB; + + /** */ + @Order(2) + String fldC; + + /** */ + @Order(value = 3, introducedBy = "VER_1_0_0_ID_0_FEATURE") + String fldD; + + /** {@inheritDoc} */ + @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { + fldA = A; + fldB = B; + fldC = C; + fldD = D; + + return this; + } + + /** {@inheritDoc} */ + @Override public String fldA() { + return fldA; + } + + /** {@inheritDoc} */ + @Override public String fldB() { + return fldB; + } + + /** {@inheritDoc} */ + @Override public String fldC() { + return fldC; + } + + /** {@inheritDoc} */ + @Override public String fldD() { + return fldD; + } +} diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_2_0_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_2_0_0.java new file mode 100644 index 0000000000000..2f4220ee52e27 --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_2_0_0.java @@ -0,0 +1,89 @@ +/* + * 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. + */ + +package org.apache.ignite.internal.processors.rollingupgrade.message; + +import java.util.function.Predicate; +import org.apache.ignite.internal.FeatureGated; +import org.apache.ignite.internal.Order; +import org.apache.ignite.internal.processors.rollingupgrade.feature.IgniteFeature; +import org.apache.ignite.internal.processors.rollingupgrade.feature.TestPluginReleaseFeatures_2_0_0; + +import static org.apache.ignite.internal.processors.rollingupgrade.feature.TestPluginReleaseFeatures_2_0_0.VER_2_0_0_ID_1_FEATURE; + +/** */ +@FeatureGated(registry = TestPluginReleaseFeatures_2_0_0.class) +public class TestPluginMessage_2_0_0 extends TestDiscoveryMessage { + /** */ + @Order(0) + String fldA; + + /** */ + @Order(value = 1, deprecatedBy = "VER_2_0_0_ID_1_FEATURE") + String fldB; + + /** */ + @Order(2) + String fldC; + + /** */ + @Order(value = 3, introducedBy = "VER_1_0_0_ID_0_FEATURE") + String fldD; + + /** */ + @Order(value = 4, introducedBy = "VER_2_0_0_ID_2_FEATURE") + String fldE; + + /** {@inheritDoc} */ + @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { + fldA = A; + + if (!featureStatusProvider.test(VER_2_0_0_ID_1_FEATURE)) + fldB = B; + + fldC = C; + fldD = D; + fldE = E; + + return this; + } + + /** {@inheritDoc} */ + @Override public String fldA() { + return fldA; + } + + /** {@inheritDoc} */ + @Override public String fldB() { + return fldB; + } + + /** {@inheritDoc} */ + @Override public String fldC() { + return fldC; + } + + /** {@inheritDoc} */ + @Override public String fldD() { + return fldD; + } + + /** {@inheritDoc} */ + @Override public String fldE() { + return fldE; + } +} diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_2_1_0.java similarity index 68% rename from modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage.java rename to modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_2_1_0.java index f901f7667bf54..5a7881ae1217b 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_2_1_0.java @@ -17,16 +17,17 @@ package org.apache.ignite.internal.processors.rollingupgrade.message; +import java.util.function.Predicate; import org.apache.ignite.internal.FeatureGated; import org.apache.ignite.internal.Order; -import org.apache.ignite.internal.managers.discovery.DiscoveryCustomMessage; +import org.apache.ignite.internal.processors.rollingupgrade.feature.IgniteFeature; import org.apache.ignite.internal.processors.rollingupgrade.feature.TestPluginReleaseFeatures_2_1_0; -import org.apache.ignite.lang.IgniteUuid; -import org.jetbrains.annotations.Nullable; + +import static org.apache.ignite.internal.processors.rollingupgrade.feature.TestPluginReleaseFeatures_2_1_0.VER_2_0_0_ID_1_FEATURE; /** */ @FeatureGated(registry = TestPluginReleaseFeatures_2_1_0.class) -public class TestPluginMessage extends DiscoveryCustomMessage implements TestMessage { +public class TestPluginMessage_2_1_0 extends TestDiscoveryMessage { /** */ @Order(0) String fldA; @@ -40,39 +41,30 @@ public class TestPluginMessage extends DiscoveryCustomMessage implements TestMes String fldC; /** */ - @Order(value = 3, introducedBy = "VER_1_0_0_ID_0_FEATURE", deprecatedBy = "VER_2_0_0_ID_1_FEATURE") + @Order(value = 3, introducedBy = "VER_1_0_0_ID_0_FEATURE") String fldD; /** */ - @Order(value = 4, introducedBy = "VER_2_0_0_ID_1_FEATURE") + @Order(value = 4, introducedBy = "VER_2_0_0_ID_2_FEATURE") String fldE; /** */ - @Order(value = 5, introducedBy = "VER_2_1_0_ID_2_FEATURE") + @Order(value = 5, introducedBy = "VER_2_1_0_ID_3_FEATURE") String fldF; - /** */ - public TestPluginMessage() { - super(IgniteUuid.randomUuid()); - } - /** {@inheritDoc} */ - @Nullable @Override public DiscoveryCustomMessage ackMessage() { - return null; - } + @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { + fldA = A; - /** */ - public static TestPluginMessage build() { - TestPluginMessage msg = new TestPluginMessage(); + if (!featureStatusProvider.test(VER_2_0_0_ID_1_FEATURE)) + fldB = B; - msg.fldA = A; - msg.fldB = B; - msg.fldC = C; - msg.fldD = D; - msg.fldE = E; - msg.fldF = F; + fldC = C; + fldD = D; + fldE = E; + fldF = F; - return msg; + return this; } /** {@inheritDoc} */ diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_3_0_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_3_0_0.java new file mode 100644 index 0000000000000..f16b1d0885527 --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_3_0_0.java @@ -0,0 +1,85 @@ +/* + * 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. + */ + + +package org.apache.ignite.internal.processors.rollingupgrade.message; + +import java.util.function.Predicate; +import org.apache.ignite.internal.FeatureGated; +import org.apache.ignite.internal.Order; +import org.apache.ignite.internal.processors.rollingupgrade.feature.IgniteFeature; +import org.apache.ignite.internal.processors.rollingupgrade.feature.TestPluginReleaseFeatures_3_0_0; + +/** */ +@FeatureGated(registry = TestPluginReleaseFeatures_3_0_0.class) +public class TestPluginMessage_3_0_0 extends TestDiscoveryMessage { + /** */ + @Order(0) + String fldA; + + /** */ + @Order(1) + String fldC; + + /** */ + @Order(2) + String fldD; + + /** */ + @Order(value = 3, introducedBy = "VER_2_0_0_ID_2_FEATURE") + String fldE; + + /** */ + @Order(value = 4, introducedBy = "VER_2_1_0_ID_3_FEATURE") + String fldF; + + /** {@inheritDoc} */ + @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { + fldA = A; + fldC = C; + fldD = D; + fldE = E; + fldF = F; + + return this; + } + + /** {@inheritDoc} */ + @Override public String fldA() { + return fldA; + } + + /** {@inheritDoc} */ + @Override public String fldC() { + return fldC; + } + + /** {@inheritDoc} */ + @Override public String fldD() { + return fldD; + } + + /** {@inheritDoc} */ + @Override public String fldE() { + return fldE; + } + + /** {@inheritDoc} */ + @Override public String fldF() { + return fldF; + } +} diff --git a/modules/core/src/test/java/org/apache/ignite/spi/MessagesPluginProvider.java b/modules/core/src/test/java/org/apache/ignite/spi/MessagesPluginProvider.java index 0090d11cc3c56..f4b7fb9cbcd62 100644 --- a/modules/core/src/test/java/org/apache/ignite/spi/MessagesPluginProvider.java +++ b/modules/core/src/test/java/org/apache/ignite/spi/MessagesPluginProvider.java @@ -43,7 +43,8 @@ public MessagesPluginProvider(Class... msgs) { short directType = CoreMessagesProvider.MAX_MESSAGE_ID + 1; for (Class msg : msgs) { - f.register(directType, loadSerializer(msg), marshaller(msg)); + if (msg != null) + f.register(directType, loadSerializer(msg), marshaller(msg)); directType++; } From acaa1d6fb7f819821ce332d8de7151701ed850ea Mon Sep 17 00:00:00 2001 From: Mikhail Petrov Date: Thu, 1 Oct 2026 08:35:08 +0300 Subject: [PATCH 02/10] IGNITE-29091 Enhance RU Message Serialization Context tests --- ...ollingUpgradeMessageSerializationTest.java | 34 +++++++++++-------- .../message/TestMessageType.java | 12 +++---- 2 files changed, 25 insertions(+), 21 deletions(-) diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/RollingUpgradeMessageSerializationTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/RollingUpgradeMessageSerializationTest.java index a17cb405550c6..8ad2c402dea4d 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/RollingUpgradeMessageSerializationTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/RollingUpgradeMessageSerializationTest.java @@ -33,6 +33,10 @@ import static org.apache.ignite.internal.processors.rollingupgrade.message.TestMessage.D; import static org.apache.ignite.internal.processors.rollingupgrade.message.TestMessage.E; import static org.apache.ignite.internal.processors.rollingupgrade.message.TestMessage.F; +import static org.apache.ignite.internal.processors.rollingupgrade.message.TestMessageType.CONTAINER_MSG; +import static org.apache.ignite.internal.processors.rollingupgrade.message.TestMessageType.CORE_MSG; +import static org.apache.ignite.internal.processors.rollingupgrade.message.TestMessageType.DEFAULT_REGISTRY_MSG; +import static org.apache.ignite.internal.processors.rollingupgrade.message.TestMessageType.PLUGIN_MSG; import static org.apache.ignite.testframework.GridTestUtils.waitForCondition; /** */ @@ -142,7 +146,7 @@ public void testDiscoveryClientsOnDifferentVersions() throws Exception { IgniteEx newVerCli = startClientGrid(2, "2.20.0"); IgniteEx oldVerCli = startClientGrid(3, "2.19.0"); - Map receivedMsgs = sendOverDiscovery(grid(1), TestMessageType.CORE); + Map receivedMsgs = sendOverDiscovery(grid(1), CORE_MSG); assertFields(A, B, C, D, E, null, receivedMsgs.get(newVerCli.name())); assertFields(A, B, C, null, null, null, receivedMsgs.get(oldVerCli.name())); @@ -162,13 +166,13 @@ public void testDiscoveryClientRouterChange() throws Exception { assertEquals(oldVerSrv.localNode().id(), routerId(cli)); - assertFields(A, B, C, null, null, null, sendOverDiscovery(newVerSrv, TestMessageType.CORE).get(cli.name())); + assertFields(A, B, C, null, null, null, sendOverDiscovery(newVerSrv, CORE_MSG).get(cli.name())); stopGrid(0); assertTrue(waitForCondition(() -> newVerSrv.localNode().id().equals(routerId(cli)), getTestTimeout())); - assertFields(A, B, C, D, E, null, sendOverDiscovery(newVerSrv, TestMessageType.CORE).get(cli.name())); + assertFields(A, B, C, D, E, null, sendOverDiscovery(newVerSrv, CORE_MSG).get(cli.name())); } /** */ @@ -188,7 +192,7 @@ public void testCommunicationWithClient() throws Exception { public void testDefaultRegistryMixedPair() throws Exception { startServerNodes("2.19.0", "2.20.0"); - checkMutualMessageSend(grid(0), grid(1), TestMessageType.DEFAULT_REGISTRY, A, null, C, D, E, F); + checkMutualMessageSend(grid(0), grid(1), DEFAULT_REGISTRY_MSG, A, null, C, D, E, F); } /** */ @@ -228,7 +232,7 @@ public void testDiscoveryRingSendFromNewerNode() throws Exception { IgniteEx newVerSrv = startGrid(3, "2.20.0"); - Map receivedMsgs = sendOverDiscovery(newVerSrv, TestMessageType.CORE); + Map receivedMsgs = sendOverDiscovery(newVerSrv, CORE_MSG); assertFields(A, B, C, D, E, null, receivedMsgs.get(newVerCrd.name())); assertFields(A, B, C, null, null, null, receivedMsgs.get(oldVerSrv.name())); @@ -276,7 +280,7 @@ public void testPluginDiffersCoreMatches() throws Exception { checkMutualCoreMessageSend(grid(0), grid(1), A, null, null, D, E, null); - checkMutualMessageSend(grid(0), grid(1), TestMessageType.PLUGIN, A, B, C, D, null, null); + checkMutualMessageSend(grid(0), grid(1), PLUGIN_MSG, A, B, C, D, null, null); } /** */ @@ -286,7 +290,7 @@ public void testPluginSameVersion() throws Exception { checkMutualCoreMessageSend(grid(0), grid(1), A, null, null, D, E, null); - checkMutualMessageSend(grid(0), grid(1), TestMessageType.PLUGIN, A, null, C, D, E, null); + checkMutualMessageSend(grid(0), grid(1), PLUGIN_MSG, A, null, C, D, E, null); } /** */ @@ -294,7 +298,7 @@ public void testPluginSameVersion() throws Exception { public void testPluginDeprecatedFieldDropped() throws Exception { startServerNodes("2.20.0 | 2.0.0", "2.20.0 | 3.0.0"); - checkMutualMessageSend(grid(0), grid(1), TestMessageType.PLUGIN, A, null, C, D, E, null); + checkMutualMessageSend(grid(0), grid(1), PLUGIN_MSG, A, null, C, D, E, null); } /** */ @@ -304,7 +308,7 @@ public void testCoreAndPluginDiffer() throws Exception { checkMutualCoreMessageSend(grid(0), grid(1), A, B, null, D, null, null); - checkMutualMessageSend(grid(0), grid(1), TestMessageType.PLUGIN, A, B, C, D, null, null); + checkMutualMessageSend(grid(0), grid(1), PLUGIN_MSG, A, B, C, D, null, null); } /** */ @@ -316,8 +320,8 @@ public void testPluginWithoutFeaturesOnClient() throws Exception { IgniteEx cli = startClientGrid(1, "2.20.0 | 0.9.0"); - checkReceivedMessageFields(srv, cli, TestMessageType.PLUGIN, A, null, C, null, null, null); - checkReceivedMessageFields(cli, srv, TestMessageType.PLUGIN, A, B, C, null, null, null); + checkReceivedMessageFields(srv, cli, PLUGIN_MSG, A, null, C, null, null, null); + checkReceivedMessageFields(cli, srv, PLUGIN_MSG, A, B, C, null, null, null); checkMutualCoreMessageSend(srv, cli, A, null, null, D, E, null); } @@ -460,7 +464,7 @@ private void checkMutualCoreMessageSend( String expE, String expF ) throws Exception { - checkMutualMessageSend(first, second, TestMessageType.CORE, expA, expB, expC, expD, expE, expF); + checkMutualMessageSend(first, second, CORE_MSG, expA, expB, expC, expD, expE, expF); } /** */ @@ -473,7 +477,7 @@ private void checkCoreMessageBroadcast( String expE, String expF ) throws Exception { - Collection receivedMsgs = sendOverDiscovery(from, TestMessageType.CORE).values(); + Collection receivedMsgs = sendOverDiscovery(from, CORE_MSG).values(); for (TestDiscoveryMessage rcvd : receivedMsgs) assertFields(expA, expB, expC, expD, expE, expF, rcvd); @@ -524,8 +528,8 @@ private void checkNestedMessages( String expF ) throws Exception { List receivedMsgs = List.of( - send(from, to, TestMessageType.CONTAINER), - sendOverDiscovery(from, TestMessageType.CONTAINER).get(to.name()) + send(from, to, CONTAINER_MSG), + sendOverDiscovery(from, CONTAINER_MSG).get(to.name()) ); for (TestMessage rcvd : receivedMsgs) { diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestMessageType.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestMessageType.java index 9519e31e942d3..0031a555b956e 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestMessageType.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestMessageType.java @@ -27,16 +27,16 @@ /** */ public enum TestMessageType { /** */ - CORE("TestCoreMessage"), + CORE_MSG("TestCoreMessage"), /** */ - PLUGIN("TestPluginMessage"), + PLUGIN_MSG("TestPluginMessage"), /** */ - DEFAULT_REGISTRY("TestDefaultRegistryMessage"), + DEFAULT_REGISTRY_MSG("TestDefaultRegistryMessage"), /** */ - CONTAINER("TestContainerMessage"); + CONTAINER_MSG("TestContainerMessage"); /** */ private final String clsName; @@ -50,10 +50,10 @@ public enum TestMessageType { @Nullable private Class resolveClass(String cmpVers) { TestVersions vers = TestVersions.parse(cmpVers); - if (this == PLUGIN && !vers.containsPlugin()) + if (this == PLUGIN_MSG && !vers.containsPlugin()) return null; - String cmpVer = this == PLUGIN ? vers.pluginVersion() : vers.coreVersion(); + String cmpVer = this == PLUGIN_MSG ? vers.pluginVersion() : vers.coreVersion(); String release = '_' + cmpVer.replace('.', '_'); From 889c5b8c7d72adbc15c7ffed4d6ff65a44ba8640 Mon Sep 17 00:00:00 2001 From: Mikhail Petrov Date: Thu, 1 Oct 2026 10:22:39 +0300 Subject: [PATCH 03/10] IGNITE-29091 Enhance RU Message Serialization Context tests --- .../AbstractRollingUpgradeTest.java | 69 ++++------- .../CoreVersionRollingUpgradeTest.java | 4 +- .../TestIgniteReleaseFeatures_2_18_0.java | 2 +- .../TestIgniteReleaseFeatures_2_19_0.java | 5 +- .../TestIgniteReleaseFeatures_2_19_1.java | 3 + .../TestIgniteReleaseFeatures_2_19_2.java | 2 +- .../TestIgniteReleaseFeatures_2_19_3.java | 2 +- .../TestIgniteReleaseFeatures_2_20_0.java | 9 +- .../TestIgniteReleaseFeatures_2_20_1.java | 9 +- .../TestIgniteReleaseFeatures_2_21_0.java | 6 - .../TestIgniteReleaseFeatures_2_21_1.java | 6 - .../TestPluginReleaseFeatures_1_1_0.java | 27 +++++ .../TestPluginReleaseFeatures_2_0_0.java | 6 +- .../TestPluginReleaseFeatures_2_1_0.java | 8 +- .../TestPluginReleaseFeatures_3_0_0.java | 5 +- .../AbstractRollingUpgradeMessageTest.java | 25 +++- ...ollingUpgradeMessageSerializationTest.java | 108 +++++++++++------- .../message/TestCoreMessage_2_18_0.java | 61 ++++++++++ .../message/TestCoreMessage_2_19_0.java | 13 +++ .../message/TestCoreMessage_2_19_2.java | 2 +- .../message/TestCoreMessage_2_19_3.java | 2 +- .../message/TestCoreMessage_2_20_0.java | 7 +- .../message/TestCoreMessage_2_20_1.java | 7 +- .../message/TestCoreMessage_2_21_0.java | 22 +--- .../message/TestPluginMessage_1_1_0.java | 79 +++++++++++++ .../message/TestPluginMessage_2_0_0.java | 14 ++- .../message/TestPluginMessage_2_1_0.java | 16 ++- .../message/TestPluginMessage_3_0_0.java | 13 +-- 28 files changed, 348 insertions(+), 184 deletions(-) create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_1_1_0.java create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_18_0.java create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_1_1_0.java 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 c1c8e4d20f83c..3d7f76477c251 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 @@ -82,55 +82,28 @@ import static org.apache.ignite.testframework.GridTestUtils.waitForCondition; /** - * Provides the ability to override a node's version and supported {@link IgniteFeature}s in order to - * simulate a Rolling Upgrade procedure. + * Overrides the version and the supported {@link IgniteFeature}s of a node to simulate a Rolling Upgrade. The versions below + * are fake and correspond to no real Ignite release. Features below the lowest one of a release are retired. + *
+ * Core    Features
+ * 2.18.0  0
+ * 2.19.0  0-1
+ * 2.19.1  0-1
+ * 2.19.2  0-2
+ * 2.19.3  0-2,6
+ * 2.20.0  2-5
+ * 2.20.1  2-6
+ * 2.21.0  6
+ * 2.21.1  6-7
  *
- * 

For testing purposes, the following "fake" Ignite versions and their corresponding - * {@link IgniteFeature}s have been introduced. These versions are used solely for testing and do not - * correspond to any actual Ignite releases. - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
VersionFeatures
2.18.0not supported
2.19.0{@code IgniteFeatureSet [0]}
2.19.1{@code IgniteFeatureSet [0]}
2.19.2{@code IgniteFeatureSet [0 -> 2]}
2.19.3{@code IgniteFeatureSet [0 -> 2, 6]}
2.20.0{@code IgniteFeatureSet [0 -> 4]}
2.20.1{@code IgniteFeatureSet [0 -> 4, 6]}
2.21.0{@code IgniteFeatureSet [4 -> 6]}
2.21.1{@code IgniteFeatureSet [4 -> 7]}
+ * Plugin Features + * 0.9.0 none + * 1.0.0 0 + * 1.1.0 0-1 + * 2.0.0 1-3 + * 2.1.0 1-4 + * 3.0.0 4 + *

*/ public abstract class AbstractRollingUpgradeTest extends GridCommonAbstractTest { /** */ 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 8483d87647a3f..92d60c49df8ef 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 @@ -42,7 +42,7 @@ import static java.util.concurrent.TimeUnit.MILLISECONDS; import static org.apache.ignite.events.EventType.EVT_CLIENT_NODE_RECONNECTED; import static org.apache.ignite.internal.TestRecordingCommunicationSpi.spi; -import static org.apache.ignite.internal.processors.rollingupgrade.feature.TestIgniteReleaseFeatures_2_19_2.VER_2_19_2_ID_1_FEATURE; +import static org.apache.ignite.internal.processors.rollingupgrade.feature.TestIgniteReleaseFeatures_2_19_2.VER_2_19_2_ID_2_FEATURE; import static org.apache.ignite.spi.discovery.tcp.TestBlockingTcpDiscoverySpi.blockingDiscovery; import static org.apache.ignite.testframework.GridTestUtils.waitForCondition; @@ -211,7 +211,7 @@ public void testFeatureActivationListener() throws Exception { forAllNodes(nodeIdx -> { upgradeNodeVersion(nodeIdx, "2.19.2"); - checkFeatureActivationSubscription(nodeIdx, VER_2_19_2_ID_1_FEATURE, featureActivationLatch); + checkFeatureActivationSubscription(nodeIdx, VER_2_19_2_ID_2_FEATURE, featureActivationLatch); }); finalizeClusterVersion(1, "2.19.2"); diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_18_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_18_0.java index 7f19bd5e9ed91..a5258061a2e3c 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_18_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_18_0.java @@ -20,5 +20,5 @@ /** */ public class TestIgniteReleaseFeatures_2_18_0 { /** */ - public static final IgniteFeature STUB_FEATURE = new IgniteCoreFeature(Integer.MAX_VALUE); + public static final IgniteFeature ROLLING_UPGRADE_FEATURE = new IgniteCoreFeature(0); } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_19_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_19_0.java index 3cb497ee64701..4cf5d1f37ead9 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_19_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_19_0.java @@ -20,5 +20,8 @@ /** */ public class TestIgniteReleaseFeatures_2_19_0 { /** */ - public static final IgniteFeature ROLLING_UPGRADE_FEATURE = new IgniteCoreFeature(0); + public static final IgniteFeature ROLLING_UPGRADE_FEATURE = TestIgniteReleaseFeatures_2_18_0.ROLLING_UPGRADE_FEATURE; + + /** */ + public static final IgniteFeature VER_2_19_0_ID_1_FEATURE = new IgniteCoreFeature(1); } 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 38056daa0b428..1d017251a531d 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,4 +21,7 @@ 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_0_ID_1_FEATURE = TestIgniteReleaseFeatures_2_19_0.VER_2_19_0_ID_1_FEATURE; } 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 0ad70357e73a9..66715f722f56e 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 = new IgniteCoreFeature(1); + public static final IgniteFeature VER_2_19_0_ID_1_FEATURE = TestIgniteReleaseFeatures_2_19_1.VER_2_19_0_ID_1_FEATURE; /** */ public static final IgniteFeature VER_2_19_2_ID_2_FEATURE = new IgniteCoreFeature(2); diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_19_3.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_19_3.java index 7ede0b867f316..5b443342ae4c4 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_19_3.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_19_3.java @@ -23,7 +23,7 @@ public class TestIgniteReleaseFeatures_2_19_3 { public static final IgniteFeature ROLLING_UPGRADE_FEATURE = TestIgniteReleaseFeatures_2_19_2.ROLLING_UPGRADE_FEATURE; /** */ - public static final IgniteFeature VER_2_19_2_ID_1_FEATURE = TestIgniteReleaseFeatures_2_19_2.VER_2_19_2_ID_1_FEATURE; + public static final IgniteFeature VER_2_19_0_ID_1_FEATURE = TestIgniteReleaseFeatures_2_19_2.VER_2_19_0_ID_1_FEATURE; /** */ public static final IgniteFeature VER_2_19_2_ID_2_FEATURE = TestIgniteReleaseFeatures_2_19_2.VER_2_19_2_ID_2_FEATURE; diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_20_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_20_0.java index 94719dfd6aabb..f4373e96a0230 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_20_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_20_0.java @@ -19,12 +19,6 @@ /** */ public class TestIgniteReleaseFeatures_2_20_0 { - /** */ - public static final IgniteFeature ROLLING_UPGRADE_FEATURE = TestIgniteReleaseFeatures_2_19_2.ROLLING_UPGRADE_FEATURE; - - /** */ - public static final IgniteFeature VER_2_19_2_ID_1_FEATURE = TestIgniteReleaseFeatures_2_19_2.VER_2_19_2_ID_1_FEATURE; - /** */ public static final IgniteFeature VER_2_19_2_ID_2_FEATURE = TestIgniteReleaseFeatures_2_19_2.VER_2_19_2_ID_2_FEATURE; @@ -33,4 +27,7 @@ public class TestIgniteReleaseFeatures_2_20_0 { /** */ public static final IgniteFeature VER_2_20_0_ID_4_FEATURE = new IgniteCoreFeature(4); + + /** */ + public static final IgniteFeature VER_2_20_0_ID_5_FEATURE = new IgniteCoreFeature(5); } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_20_1.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_20_1.java index 4bb051bb631ab..72079c5964666 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_20_1.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_20_1.java @@ -19,12 +19,6 @@ /** */ public class TestIgniteReleaseFeatures_2_20_1 { - /** */ - public static final IgniteFeature ROLLING_UPGRADE_FEATURE = TestIgniteReleaseFeatures_2_20_0.ROLLING_UPGRADE_FEATURE; - - /** */ - public static final IgniteFeature VER_2_19_2_ID_1_FEATURE = TestIgniteReleaseFeatures_2_20_0.VER_2_19_2_ID_1_FEATURE; - /** */ public static final IgniteFeature VER_2_19_2_ID_2_FEATURE = TestIgniteReleaseFeatures_2_20_0.VER_2_19_2_ID_2_FEATURE; @@ -34,6 +28,9 @@ public class TestIgniteReleaseFeatures_2_20_1 { /** */ public static final IgniteFeature VER_2_20_0_ID_4_FEATURE = TestIgniteReleaseFeatures_2_20_0.VER_2_20_0_ID_4_FEATURE; + /** */ + public static final IgniteFeature VER_2_20_0_ID_5_FEATURE = TestIgniteReleaseFeatures_2_20_0.VER_2_20_0_ID_5_FEATURE; + /** */ public static final IgniteFeature VER_2_20_1_ID_6_FEATURE = new IgniteCoreFeature(6); } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_21_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_21_0.java index 361827c973a21..7790cb6e152ac 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_21_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_21_0.java @@ -19,12 +19,6 @@ /** */ public class TestIgniteReleaseFeatures_2_21_0 { - /** */ - public static final IgniteFeature VER_2_20_0_ID_4_FEATURE = TestIgniteReleaseFeatures_2_20_1.VER_2_20_0_ID_4_FEATURE; - - /** */ - public static final IgniteFeature VER_2_21_0_ID_5_FEATURE = new IgniteCoreFeature(5); - /** */ public static final IgniteFeature VER_2_21_0_ID_6_FEATURE = new IgniteCoreFeature(6); } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_21_1.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_21_1.java index 902baa837c067..7fd6e5c54df46 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_21_1.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_21_1.java @@ -19,12 +19,6 @@ /** */ public class TestIgniteReleaseFeatures_2_21_1 { - /** */ - public static final IgniteFeature VER_2_20_0_ID_4_FEATURE = TestIgniteReleaseFeatures_2_21_0.VER_2_20_0_ID_4_FEATURE; - - /** */ - public static final IgniteFeature VER_2_21_0_ID_5_FEATURE = TestIgniteReleaseFeatures_2_21_0.VER_2_21_0_ID_5_FEATURE; - /** */ public static final IgniteFeature VER_2_21_0_ID_6_FEATURE = TestIgniteReleaseFeatures_2_21_0.VER_2_21_0_ID_6_FEATURE; diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_1_1_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_1_1_0.java new file mode 100644 index 0000000000000..8d0ddddc82b0d --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_1_1_0.java @@ -0,0 +1,27 @@ +/* + * 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. + */ + +package org.apache.ignite.internal.processors.rollingupgrade.feature; + +/** */ +public class TestPluginReleaseFeatures_1_1_0 { + /** */ + public static final IgniteFeature VER_1_0_0_ID_0_FEATURE = TestPluginReleaseFeatures_1_0_0.VER_1_0_0_ID_0_FEATURE; + + /** */ + public static final IgniteFeature VER_1_1_0_ID_1_FEATURE = new TestPluginFeature(1); +} diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_2_0_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_2_0_0.java index 19e028e7046c4..11b040fb44026 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_2_0_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_2_0_0.java @@ -20,11 +20,11 @@ /** */ public class TestPluginReleaseFeatures_2_0_0 { /** */ - public static final IgniteFeature VER_1_0_0_ID_0_FEATURE = TestPluginReleaseFeatures_1_0_0.VER_1_0_0_ID_0_FEATURE; + public static final IgniteFeature VER_1_1_0_ID_1_FEATURE = TestPluginReleaseFeatures_1_1_0.VER_1_1_0_ID_1_FEATURE; /** */ - public static final IgniteFeature VER_2_0_0_ID_1_FEATURE = new TestPluginFeature(1); + public static final IgniteFeature VER_2_0_0_ID_2_FEATURE = new TestPluginFeature(2); /** */ - public static final IgniteFeature VER_2_0_0_ID_2_FEATURE = new TestPluginFeature(2); + public static final IgniteFeature VER_2_0_0_ID_3_FEATURE = new TestPluginFeature(3); } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_2_1_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_2_1_0.java index f7152e9e2cb88..4873303156234 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_2_1_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_2_1_0.java @@ -20,14 +20,14 @@ /** */ public class TestPluginReleaseFeatures_2_1_0 { /** */ - public static final IgniteFeature VER_1_0_0_ID_0_FEATURE = TestPluginReleaseFeatures_2_0_0.VER_1_0_0_ID_0_FEATURE; + public static final IgniteFeature VER_1_1_0_ID_1_FEATURE = TestPluginReleaseFeatures_2_0_0.VER_1_1_0_ID_1_FEATURE; /** */ - public static final IgniteFeature VER_2_0_0_ID_1_FEATURE = TestPluginReleaseFeatures_2_0_0.VER_2_0_0_ID_1_FEATURE; + public static final IgniteFeature VER_2_0_0_ID_2_FEATURE = TestPluginReleaseFeatures_2_0_0.VER_2_0_0_ID_2_FEATURE; /** */ - public static final IgniteFeature VER_2_0_0_ID_2_FEATURE = TestPluginReleaseFeatures_2_0_0.VER_2_0_0_ID_2_FEATURE; + public static final IgniteFeature VER_2_0_0_ID_3_FEATURE = TestPluginReleaseFeatures_2_0_0.VER_2_0_0_ID_3_FEATURE; /** */ - public static final IgniteFeature VER_2_1_0_ID_3_FEATURE = new TestPluginFeature(3); + public static final IgniteFeature VER_2_1_0_ID_4_FEATURE = new TestPluginFeature(4); } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_3_0_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_3_0_0.java index f7ece947fad2b..d8441e6ff7f28 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_3_0_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_3_0_0.java @@ -20,8 +20,5 @@ /** */ public class TestPluginReleaseFeatures_3_0_0 { /** */ - public static final IgniteFeature VER_2_0_0_ID_2_FEATURE = TestPluginReleaseFeatures_2_1_0.VER_2_0_0_ID_2_FEATURE; - - /** */ - public static final IgniteFeature VER_2_1_0_ID_3_FEATURE = TestPluginReleaseFeatures_2_1_0.VER_2_1_0_ID_3_FEATURE; + public static final IgniteFeature VER_2_1_0_ID_4_FEATURE = TestPluginReleaseFeatures_2_1_0.VER_2_1_0_ID_4_FEATURE; } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/AbstractRollingUpgradeMessageTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/AbstractRollingUpgradeMessageTest.java index a7634d70b689a..90ddbcfcb2e51 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/AbstractRollingUpgradeMessageTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/AbstractRollingUpgradeMessageTest.java @@ -37,7 +37,30 @@ import static org.apache.ignite.internal.managers.communication.GridIoPolicy.PUBLIC_POOL; import static org.apache.ignite.internal.processors.rollingupgrade.message.TestMessageType.resolveTestMessageClasses; -/** */ +/** + * Test messages declare a class per release that changes them. Features below the lowest one of a release are retired. + * {@code +N} is a field introduced by feature N, {@code -N} is a field deprecated by feature N. + *
+ * Core    Features  TestCoreMessage
+ * 2.18.0  0         A B C
+ * 2.19.0  0-1       A B C D+1
+ * 2.19.2  0-2       A B C-2 D+1
+ * 2.19.3  0-2,6     A B C-2 D+1 F+6
+ * 2.20.0  2-5       A B-3 C-2 D-5 E+4
+ * 2.20.1  2-6       A B-3 C-2 D-5 E+4 F+6
+ * 2.21.0  6         A E F+6
+ *
+ * Plugin  Features  TestPluginMessage
+ * 0.9.0   none      A B C
+ * 1.0.0   0         A B C D+0
+ * 1.1.0   0-1       A B-1 C D+0
+ * 2.0.0   1-3       A B-1 C D-3 E+2
+ * 2.1.0   1-4       A B-1 C D-3 E+2 F+4
+ * 3.0.0   4         A C E F+4
+ * 
+ * Core D and plugin D live through the whole cycle: introduced, deprecated once the introducing feature is retired, deleted once + * the deprecating feature is retired. + */ public abstract class AbstractRollingUpgradeMessageTest extends AbstractRollingUpgradeTest { /** {@inheritDoc} */ @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName, String cmpVers) throws Exception { diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/RollingUpgradeMessageSerializationTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/RollingUpgradeMessageSerializationTest.java index 8ad2c402dea4d..45124acc839c4 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/RollingUpgradeMessageSerializationTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/RollingUpgradeMessageSerializationTest.java @@ -44,19 +44,25 @@ public class RollingUpgradeMessageSerializationTest extends AbstractRollingUpgra /** */ @Test public void testSameOldVersion() throws Exception { - checkMutualCoreMessageSend("2.19.0", "2.19.0", A, B, C, null, null, null); + checkMutualCoreMessageSend("2.19.0", "2.19.0", A, B, C, D, null, null); + } + + /** */ + @Test + public void testIntroducedField() throws Exception { + checkMutualCoreMessageSend("2.18.0", "2.19.0", A, B, C, null, null, null); } /** */ @Test public void testMixedPair() throws Exception { - checkMutualCoreMessageSend("2.19.0", "2.20.0", A, B, C, null, null, null); + checkMutualCoreMessageSend("2.19.0", "2.20.0", A, B, C, D, null, null); } /** */ @Test public void testSameNewVersion() throws Exception { - checkMutualCoreMessageSend("2.20.0", "2.20.0", A, null, null, D, E, null); + checkMutualCoreMessageSend("2.20.0", "2.20.0", A, null, null, null, E, null); } /** */ @@ -74,19 +80,19 @@ public void testWindowOpenMixedPair() throws Exception { /** */ @Test public void testWindowClosed() throws Exception { - checkMutualCoreMessageSend("2.20.0", "2.20.1", A, null, null, D, E, null); + checkMutualCoreMessageSend("2.20.0", "2.20.1", A, null, null, null, E, null); } /** */ @Test public void testDeprecatedFieldDropped() throws Exception { - checkMutualCoreMessageSend("2.20.0", "2.21.0", A, null, null, D, E, null); + checkMutualCoreMessageSend("2.20.0", "2.21.0", A, null, null, null, E, null); } /** */ @Test public void testDeprecatedFieldDroppedNewFieldShared() throws Exception { - checkMutualCoreMessageSend("2.20.1", "2.21.0", A, null, null, D, E, F); + checkMutualCoreMessageSend("2.20.1", "2.21.0", A, null, null, null, E, F); } /** */ @@ -100,8 +106,8 @@ public void testBackportedFeature() throws Exception { public void testNestedMessages() throws Exception { startServerNodes("2.20.0", "2.21.0"); - checkNestedMessages(grid(0), grid(1), A, null, null, D, E, null); - checkNestedMessages(grid(1), grid(0), A, null, null, D, E, null); + checkNestedMessages(grid(0), grid(1), A, null, null, null, E, null); + checkNestedMessages(grid(1), grid(0), A, null, null, null, E, null); } /** */ @@ -113,7 +119,7 @@ public void testDiscoveryNewerClient() throws Exception { startClientGrid(1, "2.20.0"); - checkCoreMessageBroadcast(srv, A, B, C, null, null, null); + checkCoreMessageBroadcast(srv, A, B, C, D, null, null); } /** */ @@ -127,7 +133,7 @@ public void testDiscoveryClientOriginated() throws Exception { startClientGrid(2, "2.19.0"); - checkCoreMessageBroadcast(cli1, A, B, C, null, null, null); + checkCoreMessageBroadcast(cli1, A, B, C, D, null, null); } /** */ @@ -149,9 +155,9 @@ public void testDiscoveryClientsOnDifferentVersions() throws Exception { Map receivedMsgs = sendOverDiscovery(grid(1), CORE_MSG); assertFields(A, B, C, D, E, null, receivedMsgs.get(newVerCli.name())); - assertFields(A, B, C, null, null, null, receivedMsgs.get(oldVerCli.name())); + assertFields(A, B, C, D, null, null, receivedMsgs.get(oldVerCli.name())); - checkMutualCoreMessageSend(newVerCli, oldVerCli, A, B, C, null, null, null); + checkMutualCoreMessageSend(newVerCli, oldVerCli, A, B, C, D, null, null); } /** */ @@ -166,7 +172,7 @@ public void testDiscoveryClientRouterChange() throws Exception { assertEquals(oldVerSrv.localNode().id(), routerId(cli)); - assertFields(A, B, C, null, null, null, sendOverDiscovery(newVerSrv, CORE_MSG).get(cli.name())); + assertFields(A, B, C, D, null, null, sendOverDiscovery(newVerSrv, CORE_MSG).get(cli.name())); stopGrid(0); @@ -184,7 +190,7 @@ public void testCommunicationWithClient() throws Exception { IgniteEx client = startClientGrid(1, "2.20.0"); - checkMutualCoreMessageSend(srv, client, A, B, C, null, null, null); + checkMutualCoreMessageSend(srv, client, A, B, C, D, null, null); } /** */ @@ -202,7 +208,7 @@ public void testDiscoveryUniformRing() throws Exception { startGrid(1, "2.20.0"); startGrid(2, "2.20.0"); - checkCoreMessageBroadcast(grid(1), A, null, null, D, E, null); + checkCoreMessageBroadcast(grid(1), A, null, null, null, E, null); } /** */ @@ -215,7 +221,7 @@ public void testDiscoveryMixedRing() throws Exception { startGrid(1, "2.20.0"); startGrid(2, "2.20.0"); - checkCoreMessageBroadcast(grid(1), A, B, C, null, null, null); + checkCoreMessageBroadcast(grid(1), A, B, C, D, null, null); } /** */ @@ -235,7 +241,7 @@ public void testDiscoveryRingSendFromNewerNode() throws Exception { Map receivedMsgs = sendOverDiscovery(newVerSrv, CORE_MSG); assertFields(A, B, C, D, E, null, receivedMsgs.get(newVerCrd.name())); - assertFields(A, B, C, null, null, null, receivedMsgs.get(oldVerSrv.name())); + assertFields(A, B, C, D, null, null, receivedMsgs.get(oldVerSrv.name())); } /** */ @@ -244,7 +250,7 @@ public void testCommunicationUpgradeOpensWindow() throws Exception { startGrid(0, "2.19.0"); startGrid(1, "2.19.0"); - checkMutualCoreMessageSend(grid(0), grid(1), A, B, C, null, null, null); + checkMutualCoreMessageSend(grid(0), grid(1), A, B, C, D, null, null); ru(1).enableVersionUpgrade(); @@ -278,7 +284,7 @@ public void testCommunicationUpgradeAgreesNewFeature() throws Exception { public void testPluginDiffersCoreMatches() throws Exception { startServerNodes("2.20.0 | 1.0.0", "2.20.0 | 2.0.0"); - checkMutualCoreMessageSend(grid(0), grid(1), A, null, null, D, E, null); + checkMutualCoreMessageSend(grid(0), grid(1), A, null, null, null, E, null); checkMutualMessageSend(grid(0), grid(1), PLUGIN_MSG, A, B, C, D, null, null); } @@ -288,9 +294,9 @@ public void testPluginDiffersCoreMatches() throws Exception { public void testPluginSameVersion() throws Exception { startServerNodes("2.20.0 | 2.0.0", "2.20.0 | 2.0.0"); - checkMutualCoreMessageSend(grid(0), grid(1), A, null, null, D, E, null); + checkMutualCoreMessageSend(grid(0), grid(1), A, null, null, null, E, null); - checkMutualMessageSend(grid(0), grid(1), PLUGIN_MSG, A, null, C, D, E, null); + checkMutualMessageSend(grid(0), grid(1), PLUGIN_MSG, A, null, C, null, E, null); } /** */ @@ -298,7 +304,7 @@ public void testPluginSameVersion() throws Exception { public void testPluginDeprecatedFieldDropped() throws Exception { startServerNodes("2.20.0 | 2.0.0", "2.20.0 | 3.0.0"); - checkMutualMessageSend(grid(0), grid(1), PLUGIN_MSG, A, null, C, D, E, null); + checkMutualMessageSend(grid(0), grid(1), PLUGIN_MSG, A, null, C, null, E, null); } /** */ @@ -314,7 +320,7 @@ public void testCoreAndPluginDiffer() throws Exception { /** */ @Test public void testPluginWithoutFeaturesOnClient() throws Exception { - IgniteEx srv = startGrid(0, "2.20.0 | 2.0.0"); + IgniteEx srv = startGrid(0, "2.20.0 | 1.1.0"); ru(srv).enableVersionUpgrade(); @@ -323,32 +329,48 @@ public void testPluginWithoutFeaturesOnClient() throws Exception { checkReceivedMessageFields(srv, cli, PLUGIN_MSG, A, null, C, null, null, null); checkReceivedMessageFields(cli, srv, PLUGIN_MSG, A, B, C, null, null, null); - checkMutualCoreMessageSend(srv, cli, A, null, null, D, E, null); + checkMutualCoreMessageSend(srv, cli, A, null, null, null, E, null); } /** */ @Test public void testWholeUpgradeProcess() throws Exception { - startGrid(0, "2.19.0"); - startGrid(1, "2.19.0"); - startClientGrid(2, "2.19.0"); + startGrid(0, "2.18.0"); + startGrid(1, "2.18.0"); + startClientGrid(2, "2.18.0"); checkMessagesTransmissionBetweenAllNodes(A, B, C, null, null, null); ru(1).enableVersionUpgrade(); - checkMessagesTransmissionBetweenAllNodes(A, B, C, null, null, null); - - upgradeNodeVersion(0, "2.19.0", "2.19.2"); + upgradeNodeVersion(0, "2.18.0", "2.19.0"); checkMessagesTransmissionBetweenAllNodes(A, B, C, null, null, null); - upgradeNodeVersion(1, "2.19.0", "2.19.2"); + upgradeNodeVersion(1, "2.18.0", "2.19.0"); checkMutualCoreMessageSend(grid(0), grid(1), A, B, C, D, null, null); checkMutualCoreMessageSend(grid(0), grid(2), A, B, C, null, null, null); checkMutualCoreMessageSend(grid(1), grid(2), A, B, C, null, null, null); + upgradeNodeVersion(2, "2.18.0", "2.19.0"); + + checkMessagesTransmissionBetweenAllNodes(A, B, C, D, null, null); + + finalizeClusterVersion(0, "2.19.0"); + + checkMessagesTransmissionBetweenAllNodes(A, B, C, D, null, null); + + ru(1).enableVersionUpgrade(); + + upgradeNodeVersion(0, "2.19.0", "2.19.2"); + + checkMessagesTransmissionBetweenAllNodes(A, B, C, D, null, null); + + upgradeNodeVersion(1, "2.19.0", "2.19.2"); + + checkMessagesTransmissionBetweenAllNodes(A, B, C, D, null, null); + upgradeNodeVersion(2, "2.19.0", "2.19.2"); checkMessagesTransmissionBetweenAllNodes(A, B, C, D, null, null); @@ -375,47 +397,45 @@ public void testWholeUpgradeProcess() throws Exception { finalizeClusterVersion(0, "2.20.0"); - checkMessagesTransmissionBetweenAllNodes(A, null, null, D, E, null); + checkMessagesTransmissionBetweenAllNodes(A, null, null, null, E, null); ru(1).enableVersionUpgrade(); upgradeNodeVersion(0, "2.20.0", "2.20.1"); - checkMutualCoreMessageSend(grid(0), grid(1), A, null, null, D, E, null); - checkMutualCoreMessageSend(grid(0), grid(2), A, null, null, D, E, null); - checkMutualCoreMessageSend(grid(1), grid(2), A, null, null, D, E, null); + checkMessagesTransmissionBetweenAllNodes(A, null, null, null, E, null); upgradeNodeVersion(1, "2.20.0", "2.20.1"); - checkMutualCoreMessageSend(grid(0), grid(1), A, null, null, D, E, F); - checkMutualCoreMessageSend(grid(0), grid(2), A, null, null, D, E, null); - checkMutualCoreMessageSend(grid(1), grid(2), A, null, null, D, E, null); + checkMutualCoreMessageSend(grid(0), grid(1), A, null, null, null, E, F); + checkMutualCoreMessageSend(grid(0), grid(2), A, null, null, null, E, null); + checkMutualCoreMessageSend(grid(1), grid(2), A, null, null, null, E, null); upgradeNodeVersion(2, "2.20.0", "2.20.1"); - checkMessagesTransmissionBetweenAllNodes(A, null, null, D, E, F); + checkMessagesTransmissionBetweenAllNodes(A, null, null, null, E, F); finalizeClusterVersion(0, "2.20.1"); - checkMessagesTransmissionBetweenAllNodes(A, null, null, D, E, F); + checkMessagesTransmissionBetweenAllNodes(A, null, null, null, E, F); ru(1).enableVersionUpgrade(); upgradeNodeVersion(0, "2.20.1", "2.21.0"); - checkMessagesTransmissionBetweenAllNodes(A, null, null, D, E, F); + checkMessagesTransmissionBetweenAllNodes(A, null, null, null, E, F); upgradeNodeVersion(1, "2.20.1", "2.21.0"); - checkMessagesTransmissionBetweenAllNodes(A, null, null, D, E, F); + checkMessagesTransmissionBetweenAllNodes(A, null, null, null, E, F); upgradeNodeVersion(2, "2.20.1", "2.21.0"); - checkMessagesTransmissionBetweenAllNodes(A, null, null, D, E, F); + checkMessagesTransmissionBetweenAllNodes(A, null, null, null, E, F); finalizeClusterVersion(0, "2.21.0"); - checkMessagesTransmissionBetweenAllNodes(A, null, null, D, E, F); + checkMessagesTransmissionBetweenAllNodes(A, null, null, null, E, F); } /** */ diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_18_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_18_0.java new file mode 100644 index 0000000000000..d38a23c022ba8 --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_18_0.java @@ -0,0 +1,61 @@ +/* + * 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. + */ + +package org.apache.ignite.internal.processors.rollingupgrade.message; + +import java.util.function.Predicate; +import org.apache.ignite.internal.Order; +import org.apache.ignite.internal.processors.rollingupgrade.feature.IgniteFeature; + +/** */ +public class TestCoreMessage_2_18_0 extends TestDiscoveryMessage { + /** */ + @Order(0) + String fldA; + + /** */ + @Order(1) + String fldB; + + /** */ + @Order(2) + String fldC; + + /** {@inheritDoc} */ + @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { + fldA = A; + fldB = B; + fldC = C; + + return this; + } + + /** {@inheritDoc} */ + @Override public String fldA() { + return fldA; + } + + /** {@inheritDoc} */ + @Override public String fldB() { + return fldB; + } + + /** {@inheritDoc} */ + @Override public String fldC() { + return fldC; + } +} diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_0.java index 66e41d805f15a..41c24d62a8ca0 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_0.java @@ -18,10 +18,13 @@ package org.apache.ignite.internal.processors.rollingupgrade.message; import java.util.function.Predicate; +import org.apache.ignite.internal.FeatureGated; import org.apache.ignite.internal.Order; import org.apache.ignite.internal.processors.rollingupgrade.feature.IgniteFeature; +import org.apache.ignite.internal.processors.rollingupgrade.feature.TestIgniteReleaseFeatures_2_19_0; /** */ +@FeatureGated(registry = TestIgniteReleaseFeatures_2_19_0.class) public class TestCoreMessage_2_19_0 extends TestDiscoveryMessage { /** */ @Order(0) @@ -35,11 +38,16 @@ public class TestCoreMessage_2_19_0 extends TestDiscoveryMessage { @Order(2) String fldC; + /** */ + @Order(value = 3, introducedBy = "VER_2_19_0_ID_1_FEATURE") + String fldD; + /** {@inheritDoc} */ @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { fldA = A; fldB = B; fldC = C; + fldD = D; return this; } @@ -58,4 +66,9 @@ public class TestCoreMessage_2_19_0 extends TestDiscoveryMessage { @Override public String fldC() { return fldC; } + + /** {@inheritDoc} */ + @Override public String fldD() { + return fldD; + } } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_2.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_2.java index 9ffd100feb423..a0f6b3f719a31 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_2.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_2.java @@ -41,7 +41,7 @@ public class TestCoreMessage_2_19_2 extends TestDiscoveryMessage { String fldC; /** */ - @Order(value = 3, introducedBy = "VER_2_19_2_ID_1_FEATURE") + @Order(value = 3, introducedBy = "VER_2_19_0_ID_1_FEATURE") String fldD; /** {@inheritDoc} */ diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_3.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_3.java index dd5d187e1dd39..ee2f339004f0b 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_3.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_3.java @@ -41,7 +41,7 @@ public class TestCoreMessage_2_19_3 extends TestDiscoveryMessage { String fldC; /** */ - @Order(value = 3, introducedBy = "VER_2_19_2_ID_1_FEATURE") + @Order(value = 3, introducedBy = "VER_2_19_0_ID_1_FEATURE") String fldD; /** */ diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_20_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_20_0.java index 74b30f7e5b819..63e692921150a 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_20_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_20_0.java @@ -25,6 +25,7 @@ import static org.apache.ignite.internal.processors.rollingupgrade.feature.TestIgniteReleaseFeatures_2_20_0.VER_2_19_2_ID_2_FEATURE; import static org.apache.ignite.internal.processors.rollingupgrade.feature.TestIgniteReleaseFeatures_2_20_0.VER_2_20_0_ID_3_FEATURE; +import static org.apache.ignite.internal.processors.rollingupgrade.feature.TestIgniteReleaseFeatures_2_20_0.VER_2_20_0_ID_5_FEATURE; /** */ @FeatureGated(registry = TestIgniteReleaseFeatures_2_20_0.class) @@ -42,7 +43,7 @@ public class TestCoreMessage_2_20_0 extends TestDiscoveryMessage { String fldC; /** */ - @Order(value = 3, introducedBy = "VER_2_19_2_ID_1_FEATURE") + @Order(value = 3, deprecatedBy = "VER_2_20_0_ID_5_FEATURE") String fldD; /** */ @@ -59,7 +60,9 @@ public class TestCoreMessage_2_20_0 extends TestDiscoveryMessage { if (!featureStatusProvider.test(VER_2_19_2_ID_2_FEATURE)) fldC = C; - fldD = D; + if (!featureStatusProvider.test(VER_2_20_0_ID_5_FEATURE)) + fldD = D; + fldE = E; return this; diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_20_1.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_20_1.java index fef676f365c32..cbcfd29c54ee7 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_20_1.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_20_1.java @@ -25,6 +25,7 @@ import static org.apache.ignite.internal.processors.rollingupgrade.feature.TestIgniteReleaseFeatures_2_20_1.VER_2_19_2_ID_2_FEATURE; import static org.apache.ignite.internal.processors.rollingupgrade.feature.TestIgniteReleaseFeatures_2_20_1.VER_2_20_0_ID_3_FEATURE; +import static org.apache.ignite.internal.processors.rollingupgrade.feature.TestIgniteReleaseFeatures_2_20_1.VER_2_20_0_ID_5_FEATURE; /** */ @FeatureGated(registry = TestIgniteReleaseFeatures_2_20_1.class) @@ -42,7 +43,7 @@ public class TestCoreMessage_2_20_1 extends TestDiscoveryMessage { String fldC; /** */ - @Order(value = 3, introducedBy = "VER_2_19_2_ID_1_FEATURE") + @Order(value = 3, deprecatedBy = "VER_2_20_0_ID_5_FEATURE") String fldD; /** */ @@ -63,7 +64,9 @@ public class TestCoreMessage_2_20_1 extends TestDiscoveryMessage { if (!featureStatusProvider.test(VER_2_19_2_ID_2_FEATURE)) fldC = C; - fldD = D; + if (!featureStatusProvider.test(VER_2_20_0_ID_5_FEATURE)) + fldD = D; + fldE = E; fldF = F; diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_21_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_21_0.java index a526c213e935f..1ad747207c554 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_21_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_21_0.java @@ -32,20 +32,15 @@ public class TestCoreMessage_2_21_0 extends TestDiscoveryMessage { /** */ @Order(1) - String fldD; - - /** */ - @Order(value = 2, introducedBy = "VER_2_20_0_ID_4_FEATURE") String fldE; /** */ - @Order(value = 3, introducedBy = "VER_2_21_0_ID_6_FEATURE") + @Order(value = 2, introducedBy = "VER_2_21_0_ID_6_FEATURE") String fldF; /** {@inheritDoc} */ @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { fldA = A; - fldD = D; fldE = E; fldF = F; @@ -57,21 +52,6 @@ public class TestCoreMessage_2_21_0 extends TestDiscoveryMessage { return fldA; } - /** {@inheritDoc} */ - @Override public String fldB() { - return null; - } - - /** {@inheritDoc} */ - @Override public String fldC() { - return null; - } - - /** {@inheritDoc} */ - @Override public String fldD() { - return fldD; - } - /** {@inheritDoc} */ @Override public String fldE() { return fldE; diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_1_1_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_1_1_0.java new file mode 100644 index 0000000000000..a68f40feac613 --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_1_1_0.java @@ -0,0 +1,79 @@ +/* + * 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. + */ + +package org.apache.ignite.internal.processors.rollingupgrade.message; + +import java.util.function.Predicate; +import org.apache.ignite.internal.FeatureGated; +import org.apache.ignite.internal.Order; +import org.apache.ignite.internal.processors.rollingupgrade.feature.IgniteFeature; +import org.apache.ignite.internal.processors.rollingupgrade.feature.TestPluginReleaseFeatures_1_1_0; + +import static org.apache.ignite.internal.processors.rollingupgrade.feature.TestPluginReleaseFeatures_1_1_0.VER_1_1_0_ID_1_FEATURE; + +/** */ +@FeatureGated(registry = TestPluginReleaseFeatures_1_1_0.class) +public class TestPluginMessage_1_1_0 extends TestDiscoveryMessage { + /** */ + @Order(0) + String fldA; + + /** */ + @Order(value = 1, deprecatedBy = "VER_1_1_0_ID_1_FEATURE") + String fldB; + + /** */ + @Order(2) + String fldC; + + /** */ + @Order(value = 3, introducedBy = "VER_1_0_0_ID_0_FEATURE") + String fldD; + + /** {@inheritDoc} */ + @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { + fldA = A; + + if (!featureStatusProvider.test(VER_1_1_0_ID_1_FEATURE)) + fldB = B; + + fldC = C; + fldD = D; + + return this; + } + + /** {@inheritDoc} */ + @Override public String fldA() { + return fldA; + } + + /** {@inheritDoc} */ + @Override public String fldB() { + return fldB; + } + + /** {@inheritDoc} */ + @Override public String fldC() { + return fldC; + } + + /** {@inheritDoc} */ + @Override public String fldD() { + return fldD; + } +} diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_2_0_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_2_0_0.java index 2f4220ee52e27..21eff918ef193 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_2_0_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_2_0_0.java @@ -23,7 +23,8 @@ import org.apache.ignite.internal.processors.rollingupgrade.feature.IgniteFeature; import org.apache.ignite.internal.processors.rollingupgrade.feature.TestPluginReleaseFeatures_2_0_0; -import static org.apache.ignite.internal.processors.rollingupgrade.feature.TestPluginReleaseFeatures_2_0_0.VER_2_0_0_ID_1_FEATURE; +import static org.apache.ignite.internal.processors.rollingupgrade.feature.TestPluginReleaseFeatures_2_0_0.VER_1_1_0_ID_1_FEATURE; +import static org.apache.ignite.internal.processors.rollingupgrade.feature.TestPluginReleaseFeatures_2_0_0.VER_2_0_0_ID_3_FEATURE; /** */ @FeatureGated(registry = TestPluginReleaseFeatures_2_0_0.class) @@ -33,7 +34,7 @@ public class TestPluginMessage_2_0_0 extends TestDiscoveryMessage { String fldA; /** */ - @Order(value = 1, deprecatedBy = "VER_2_0_0_ID_1_FEATURE") + @Order(value = 1, deprecatedBy = "VER_1_1_0_ID_1_FEATURE") String fldB; /** */ @@ -41,7 +42,7 @@ public class TestPluginMessage_2_0_0 extends TestDiscoveryMessage { String fldC; /** */ - @Order(value = 3, introducedBy = "VER_1_0_0_ID_0_FEATURE") + @Order(value = 3, deprecatedBy = "VER_2_0_0_ID_3_FEATURE") String fldD; /** */ @@ -52,11 +53,14 @@ public class TestPluginMessage_2_0_0 extends TestDiscoveryMessage { @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { fldA = A; - if (!featureStatusProvider.test(VER_2_0_0_ID_1_FEATURE)) + if (!featureStatusProvider.test(VER_1_1_0_ID_1_FEATURE)) fldB = B; fldC = C; - fldD = D; + + if (!featureStatusProvider.test(VER_2_0_0_ID_3_FEATURE)) + fldD = D; + fldE = E; return this; diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_2_1_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_2_1_0.java index 5a7881ae1217b..a9c8f480f3400 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_2_1_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_2_1_0.java @@ -23,7 +23,8 @@ import org.apache.ignite.internal.processors.rollingupgrade.feature.IgniteFeature; import org.apache.ignite.internal.processors.rollingupgrade.feature.TestPluginReleaseFeatures_2_1_0; -import static org.apache.ignite.internal.processors.rollingupgrade.feature.TestPluginReleaseFeatures_2_1_0.VER_2_0_0_ID_1_FEATURE; +import static org.apache.ignite.internal.processors.rollingupgrade.feature.TestPluginReleaseFeatures_2_1_0.VER_1_1_0_ID_1_FEATURE; +import static org.apache.ignite.internal.processors.rollingupgrade.feature.TestPluginReleaseFeatures_2_1_0.VER_2_0_0_ID_3_FEATURE; /** */ @FeatureGated(registry = TestPluginReleaseFeatures_2_1_0.class) @@ -33,7 +34,7 @@ public class TestPluginMessage_2_1_0 extends TestDiscoveryMessage { String fldA; /** */ - @Order(value = 1, deprecatedBy = "VER_2_0_0_ID_1_FEATURE") + @Order(value = 1, deprecatedBy = "VER_1_1_0_ID_1_FEATURE") String fldB; /** */ @@ -41,7 +42,7 @@ public class TestPluginMessage_2_1_0 extends TestDiscoveryMessage { String fldC; /** */ - @Order(value = 3, introducedBy = "VER_1_0_0_ID_0_FEATURE") + @Order(value = 3, deprecatedBy = "VER_2_0_0_ID_3_FEATURE") String fldD; /** */ @@ -49,18 +50,21 @@ public class TestPluginMessage_2_1_0 extends TestDiscoveryMessage { String fldE; /** */ - @Order(value = 5, introducedBy = "VER_2_1_0_ID_3_FEATURE") + @Order(value = 5, introducedBy = "VER_2_1_0_ID_4_FEATURE") String fldF; /** {@inheritDoc} */ @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { fldA = A; - if (!featureStatusProvider.test(VER_2_0_0_ID_1_FEATURE)) + if (!featureStatusProvider.test(VER_1_1_0_ID_1_FEATURE)) fldB = B; fldC = C; - fldD = D; + + if (!featureStatusProvider.test(VER_2_0_0_ID_3_FEATURE)) + fldD = D; + fldE = E; fldF = F; diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_3_0_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_3_0_0.java index f16b1d0885527..701d5ff28e499 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_3_0_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_3_0_0.java @@ -15,7 +15,6 @@ * limitations under the License. */ - package org.apache.ignite.internal.processors.rollingupgrade.message; import java.util.function.Predicate; @@ -37,21 +36,16 @@ public class TestPluginMessage_3_0_0 extends TestDiscoveryMessage { /** */ @Order(2) - String fldD; - - /** */ - @Order(value = 3, introducedBy = "VER_2_0_0_ID_2_FEATURE") String fldE; /** */ - @Order(value = 4, introducedBy = "VER_2_1_0_ID_3_FEATURE") + @Order(value = 3, introducedBy = "VER_2_1_0_ID_4_FEATURE") String fldF; /** {@inheritDoc} */ @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { fldA = A; fldC = C; - fldD = D; fldE = E; fldF = F; @@ -68,11 +62,6 @@ public class TestPluginMessage_3_0_0 extends TestDiscoveryMessage { return fldC; } - /** {@inheritDoc} */ - @Override public String fldD() { - return fldD; - } - /** {@inheritDoc} */ @Override public String fldE() { return fldE; From 5973c5ea2eb04e1787bf1b5982dd5b3c399b94e0 Mon Sep 17 00:00:00 2001 From: Mikhail Petrov Date: Thu, 1 Oct 2026 12:01:27 +0300 Subject: [PATCH 04/10] IGNITE-29091 Enhance RU Message Serialization Context tests --- .../message/RollingUpgradeMessageSerializationTest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/RollingUpgradeMessageSerializationTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/RollingUpgradeMessageSerializationTest.java index 45124acc839c4..a895b73a01ed6 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/RollingUpgradeMessageSerializationTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/RollingUpgradeMessageSerializationTest.java @@ -67,19 +67,19 @@ public void testSameNewVersion() throws Exception { /** */ @Test - public void testWindowOpenSameVersion() throws Exception { + public void testDeprecatedFieldEmptyAfterFinalization() throws Exception { checkMutualCoreMessageSend("2.19.2", "2.19.2", A, B, null, D, null, null); } /** */ @Test - public void testWindowOpenMixedPair() throws Exception { + public void testDeprecationUnknownToOlderPeer() throws Exception { checkMutualCoreMessageSend("2.19.2", "2.20.0", A, B, null, D, null, null); } /** */ @Test - public void testWindowClosed() throws Exception { + public void testDeprecationKnownToOlderPeer() throws Exception { checkMutualCoreMessageSend("2.20.0", "2.20.1", A, null, null, null, E, null); } @@ -246,7 +246,7 @@ public void testDiscoveryRingSendFromNewerNode() throws Exception { /** */ @Test - public void testCommunicationUpgradeOpensWindow() throws Exception { + public void testDeprecatedFieldKeptUntilFinalization() throws Exception { startGrid(0, "2.19.0"); startGrid(1, "2.19.0"); From f300d81a4c36c65c3dad9dd0d409aba41ef564b1 Mon Sep 17 00:00:00 2001 From: Mikhail Petrov Date: Thu, 1 Oct 2026 12:44:47 +0300 Subject: [PATCH 05/10] IGNITE-29091 Enhance RU Message Serialization Context tests --- .../feature/TestIgniteReleaseFeatures_2_19_3.java | 2 +- .../message/AbstractRollingUpgradeMessageTest.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_19_3.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_19_3.java index 5b443342ae4c4..dba222c799d1b 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_19_3.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_19_3.java @@ -29,5 +29,5 @@ public class TestIgniteReleaseFeatures_2_19_3 { public static final IgniteFeature VER_2_19_2_ID_2_FEATURE = TestIgniteReleaseFeatures_2_19_2.VER_2_19_2_ID_2_FEATURE; /** */ - public static final IgniteFeature VER_2_19_3_ID_6_FEATURE = TestIgniteReleaseFeatures_2_21_0.VER_2_21_0_ID_6_FEATURE; + public static final IgniteFeature VER_2_19_3_ID_6_FEATURE = TestIgniteReleaseFeatures_2_20_1.VER_2_20_1_ID_6_FEATURE; } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/AbstractRollingUpgradeMessageTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/AbstractRollingUpgradeMessageTest.java index 90ddbcfcb2e51..3eed7a815ee49 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/AbstractRollingUpgradeMessageTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/AbstractRollingUpgradeMessageTest.java @@ -58,6 +58,7 @@ * 2.1.0 1-4 A B-1 C D-3 E+2 F+4 * 3.0.0 4 A C E F+4 * + * 2.19.3 carries feature 6 cherry-picked from 2.20.1, so it can upgrade to 2.20.1 but not to 2.20.0. * Core D and plugin D live through the whole cycle: introduced, deprecated once the introducing feature is retired, deleted once * the deprecating feature is retired. */ From e67247ae9f67543a501f47ee99782a5d7797145c Mon Sep 17 00:00:00 2001 From: Mikhail Petrov Date: Thu, 1 Oct 2026 14:23:50 +0300 Subject: [PATCH 06/10] IGNITE-29079 --- .../rollingupgrade/message/TestMessageType.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestMessageType.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestMessageType.java index 0031a555b956e..abfa9dd6fde41 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestMessageType.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestMessageType.java @@ -66,12 +66,17 @@ public enum TestMessageType { } /** */ - public static Class[] resolveTestMessageClasses(String cmpVers) { - return Arrays.stream(values()).map(msgType -> msgType.resolveClass(cmpVers)).toArray(Class[]::new); + public TestDiscoveryMessage build(String cmpVers, Predicate featureStatusProvider) throws Exception { + Class msgCls = resolveClass(cmpVers); + + if (msgCls == null) + throw new AssertionError("Failed to resolve test message class [type=" + this + ", cmpVers=" + cmpVers + ']'); + + return ((TestDiscoveryMessage)msgCls.getConstructor().newInstance()).fill(featureStatusProvider); } /** */ - public TestDiscoveryMessage build(String cmpVers, Predicate featureStatusProvider) throws Exception { - return ((TestDiscoveryMessage)resolveClass(cmpVers).getConstructor().newInstance()).fill(featureStatusProvider); + public static Class[] resolveTestMessageClasses(String cmpVers) { + return Arrays.stream(values()).map(msgType -> msgType.resolveClass(cmpVers)).toArray(Class[]::new); } } From f191e41999069a4a1531b83cb84b797d755d8917 Mon Sep 17 00:00:00 2001 From: Mikhail Petrov Date: Thu, 1 Oct 2026 14:25:38 +0300 Subject: [PATCH 07/10] IGNITE-29079 --- .../AbstractRollingUpgradeMessageTest.java | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/AbstractRollingUpgradeMessageTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/AbstractRollingUpgradeMessageTest.java index 3eed7a815ee49..c94697ed105bb 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/AbstractRollingUpgradeMessageTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/AbstractRollingUpgradeMessageTest.java @@ -28,6 +28,7 @@ import org.apache.ignite.cluster.ClusterNode; import org.apache.ignite.configuration.IgniteConfiguration; import org.apache.ignite.internal.IgniteEx; +import org.apache.ignite.internal.managers.communication.GridMessageListener; import org.apache.ignite.internal.processors.rollingupgrade.AbstractRollingUpgradeTest; import org.apache.ignite.internal.util.typedef.F; import org.apache.ignite.plugin.extensions.communication.Message; @@ -90,19 +91,26 @@ protected T send(IgniteEx from, IgniteEx to, T msg) throws E String topic = msg.getClass().getName(); - to.context().io().addMessageListener(topic, (nodeId, rcvd, plc) -> { + GridMessageListener lsnr = (nodeId, rcvd, plc) -> { got.set((T)rcvd); latch.countDown(); - }); + }; - ClusterNode rcvNode = from.context().discovery().node(to.localNode().id()); + to.context().io().addMessageListener(topic, lsnr); - from.context().io().sendToCustomTopic(rcvNode, topic, msg, PUBLIC_POOL); + try { + ClusterNode rcvNode = from.context().discovery().node(to.localNode().id()); - assertTrue(latch.await(getTestTimeout(), MILLISECONDS)); + from.context().io().sendToCustomTopic(rcvNode, topic, msg, PUBLIC_POOL); + + assertTrue(latch.await(getTestTimeout(), MILLISECONDS)); - return got.get(); + return got.get(); + } + finally { + to.context().io().removeMessageListener(topic, lsnr); + } } /** */ From 875cfe93165c1b930b289a473f5e8a0e1eacbee1 Mon Sep 17 00:00:00 2001 From: Mikhail Petrov Date: Thu, 1 Oct 2026 14:41:16 +0300 Subject: [PATCH 08/10] IGNITE-29079 --- .../message/AbstractRollingUpgradeMessageTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/AbstractRollingUpgradeMessageTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/AbstractRollingUpgradeMessageTest.java index c94697ed105bb..ef6b76ba906e9 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/AbstractRollingUpgradeMessageTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/AbstractRollingUpgradeMessageTest.java @@ -114,7 +114,7 @@ protected T send(IgniteEx from, IgniteEx to, T msg) throws E } /** */ - protected TestDiscoveryMessage send(IgniteEx from, IgniteEx to, TestMessageType msgType) throws Exception { + protected TestMessage send(IgniteEx from, IgniteEx to, TestMessageType msgType) throws Exception { return send(from, to, buildMessage(from, msgType)); } From ff2112e10b318f199c95bb80417ab0f629d24a12 Mon Sep 17 00:00:00 2001 From: Mikhail Petrov Date: Thu, 1 Oct 2026 15:32:48 +0300 Subject: [PATCH 09/10] IGNITE-29091 --- .../feature/TestIgniteReleaseFeatures_2_19_0.java | 2 +- .../feature/TestIgniteReleaseFeatures_2_19_1.java | 4 ++-- .../feature/TestIgniteReleaseFeatures_2_19_2.java | 4 ++-- .../feature/TestIgniteReleaseFeatures_2_19_3.java | 10 +++++----- .../feature/TestIgniteReleaseFeatures_2_20_0.java | 2 +- .../feature/TestIgniteReleaseFeatures_2_20_1.java | 8 ++++---- .../feature/TestIgniteReleaseFeatures_2_21_1.java | 2 +- .../feature/TestPluginReleaseFeatures_1_1_0.java | 2 +- .../feature/TestPluginReleaseFeatures_2_0_0.java | 2 +- .../feature/TestPluginReleaseFeatures_2_1_0.java | 6 +++--- .../feature/TestPluginReleaseFeatures_3_0_0.java | 2 +- 11 files changed, 22 insertions(+), 22 deletions(-) diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_19_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_19_0.java index 4cf5d1f37ead9..45f45e81146e4 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_19_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_19_0.java @@ -20,7 +20,7 @@ /** */ public class TestIgniteReleaseFeatures_2_19_0 { /** */ - public static final IgniteFeature ROLLING_UPGRADE_FEATURE = TestIgniteReleaseFeatures_2_18_0.ROLLING_UPGRADE_FEATURE; + public static final IgniteFeature ROLLING_UPGRADE_FEATURE = new IgniteCoreFeature(0); /** */ public static final IgniteFeature VER_2_19_0_ID_1_FEATURE = new IgniteCoreFeature(1); 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 1d017251a531d..e6efec6e3ad4b 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 @@ -20,8 +20,8 @@ /** */ public class TestIgniteReleaseFeatures_2_19_1 { /** */ - public static final IgniteFeature ROLLING_UPGRADE_FEATURE = TestIgniteReleaseFeatures_2_19_0.ROLLING_UPGRADE_FEATURE; + public static final IgniteFeature ROLLING_UPGRADE_FEATURE = new IgniteCoreFeature(0); /** */ - public static final IgniteFeature VER_2_19_0_ID_1_FEATURE = TestIgniteReleaseFeatures_2_19_0.VER_2_19_0_ID_1_FEATURE; + public static final IgniteFeature VER_2_19_0_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 66715f722f56e..5cddc7ba70ebe 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 @@ -20,10 +20,10 @@ /** */ public class TestIgniteReleaseFeatures_2_19_2 { /** */ - public static final IgniteFeature ROLLING_UPGRADE_FEATURE = TestIgniteReleaseFeatures_2_19_1.ROLLING_UPGRADE_FEATURE; + public static final IgniteFeature ROLLING_UPGRADE_FEATURE = new IgniteCoreFeature(0); /** */ - public static final IgniteFeature VER_2_19_0_ID_1_FEATURE = TestIgniteReleaseFeatures_2_19_1.VER_2_19_0_ID_1_FEATURE; + public static final IgniteFeature VER_2_19_0_ID_1_FEATURE = new IgniteCoreFeature(1); /** */ public static final IgniteFeature VER_2_19_2_ID_2_FEATURE = new IgniteCoreFeature(2); diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_19_3.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_19_3.java index dba222c799d1b..c0bca574ca3c8 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_19_3.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_19_3.java @@ -20,14 +20,14 @@ /** */ public class TestIgniteReleaseFeatures_2_19_3 { /** */ - public static final IgniteFeature ROLLING_UPGRADE_FEATURE = TestIgniteReleaseFeatures_2_19_2.ROLLING_UPGRADE_FEATURE; + public static final IgniteFeature ROLLING_UPGRADE_FEATURE = new IgniteCoreFeature(0); /** */ - public static final IgniteFeature VER_2_19_0_ID_1_FEATURE = TestIgniteReleaseFeatures_2_19_2.VER_2_19_0_ID_1_FEATURE; + public static final IgniteFeature VER_2_19_0_ID_1_FEATURE = new IgniteCoreFeature(1); /** */ - public static final IgniteFeature VER_2_19_2_ID_2_FEATURE = TestIgniteReleaseFeatures_2_19_2.VER_2_19_2_ID_2_FEATURE; + public static final IgniteFeature VER_2_19_2_ID_2_FEATURE = new IgniteCoreFeature(2); - /** */ - public static final IgniteFeature VER_2_19_3_ID_6_FEATURE = TestIgniteReleaseFeatures_2_20_1.VER_2_20_1_ID_6_FEATURE; + /** Cherry-picked into 2.19.3 with the commit that introduced it in 2.20.1. */ + public static final IgniteFeature VER_2_19_3_ID_6_FEATURE = new IgniteCoreFeature(6); } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_20_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_20_0.java index f4373e96a0230..cf9bf6375f784 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_20_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_20_0.java @@ -20,7 +20,7 @@ /** */ public class TestIgniteReleaseFeatures_2_20_0 { /** */ - public static final IgniteFeature VER_2_19_2_ID_2_FEATURE = TestIgniteReleaseFeatures_2_19_2.VER_2_19_2_ID_2_FEATURE; + public static final IgniteFeature VER_2_19_2_ID_2_FEATURE = new IgniteCoreFeature(2); /** */ public static final IgniteFeature VER_2_20_0_ID_3_FEATURE = new IgniteCoreFeature(3); diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_20_1.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_20_1.java index 72079c5964666..d2f95bdecd862 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_20_1.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_20_1.java @@ -20,16 +20,16 @@ /** */ public class TestIgniteReleaseFeatures_2_20_1 { /** */ - public static final IgniteFeature VER_2_19_2_ID_2_FEATURE = TestIgniteReleaseFeatures_2_20_0.VER_2_19_2_ID_2_FEATURE; + public static final IgniteFeature VER_2_19_2_ID_2_FEATURE = new IgniteCoreFeature(2); /** */ - public static final IgniteFeature VER_2_20_0_ID_3_FEATURE = TestIgniteReleaseFeatures_2_20_0.VER_2_20_0_ID_3_FEATURE; + public static final IgniteFeature VER_2_20_0_ID_3_FEATURE = new IgniteCoreFeature(3); /** */ - public static final IgniteFeature VER_2_20_0_ID_4_FEATURE = TestIgniteReleaseFeatures_2_20_0.VER_2_20_0_ID_4_FEATURE; + public static final IgniteFeature VER_2_20_0_ID_4_FEATURE = new IgniteCoreFeature(4); /** */ - public static final IgniteFeature VER_2_20_0_ID_5_FEATURE = TestIgniteReleaseFeatures_2_20_0.VER_2_20_0_ID_5_FEATURE; + public static final IgniteFeature VER_2_20_0_ID_5_FEATURE = new IgniteCoreFeature(5); /** */ public static final IgniteFeature VER_2_20_1_ID_6_FEATURE = new IgniteCoreFeature(6); diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_21_1.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_21_1.java index 7fd6e5c54df46..99451aa0f9de8 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_21_1.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestIgniteReleaseFeatures_2_21_1.java @@ -20,7 +20,7 @@ /** */ public class TestIgniteReleaseFeatures_2_21_1 { /** */ - public static final IgniteFeature VER_2_21_0_ID_6_FEATURE = TestIgniteReleaseFeatures_2_21_0.VER_2_21_0_ID_6_FEATURE; + public static final IgniteFeature VER_2_21_0_ID_6_FEATURE = new IgniteCoreFeature(6); /** */ public static final IgniteFeature VER_2_21_1_ID_7_FEATURE = new IgniteCoreFeature(7); diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_1_1_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_1_1_0.java index 8d0ddddc82b0d..151c01605b5a8 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_1_1_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_1_1_0.java @@ -20,7 +20,7 @@ /** */ public class TestPluginReleaseFeatures_1_1_0 { /** */ - public static final IgniteFeature VER_1_0_0_ID_0_FEATURE = TestPluginReleaseFeatures_1_0_0.VER_1_0_0_ID_0_FEATURE; + public static final IgniteFeature VER_1_0_0_ID_0_FEATURE = new TestPluginFeature(0); /** */ public static final IgniteFeature VER_1_1_0_ID_1_FEATURE = new TestPluginFeature(1); diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_2_0_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_2_0_0.java index 11b040fb44026..536fa52790bad 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_2_0_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_2_0_0.java @@ -20,7 +20,7 @@ /** */ public class TestPluginReleaseFeatures_2_0_0 { /** */ - public static final IgniteFeature VER_1_1_0_ID_1_FEATURE = TestPluginReleaseFeatures_1_1_0.VER_1_1_0_ID_1_FEATURE; + public static final IgniteFeature VER_1_1_0_ID_1_FEATURE = new TestPluginFeature(1); /** */ public static final IgniteFeature VER_2_0_0_ID_2_FEATURE = new TestPluginFeature(2); diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_2_1_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_2_1_0.java index 4873303156234..95459b6ab321e 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_2_1_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_2_1_0.java @@ -20,13 +20,13 @@ /** */ public class TestPluginReleaseFeatures_2_1_0 { /** */ - public static final IgniteFeature VER_1_1_0_ID_1_FEATURE = TestPluginReleaseFeatures_2_0_0.VER_1_1_0_ID_1_FEATURE; + public static final IgniteFeature VER_1_1_0_ID_1_FEATURE = new TestPluginFeature(1); /** */ - public static final IgniteFeature VER_2_0_0_ID_2_FEATURE = TestPluginReleaseFeatures_2_0_0.VER_2_0_0_ID_2_FEATURE; + public static final IgniteFeature VER_2_0_0_ID_2_FEATURE = new TestPluginFeature(2); /** */ - public static final IgniteFeature VER_2_0_0_ID_3_FEATURE = TestPluginReleaseFeatures_2_0_0.VER_2_0_0_ID_3_FEATURE; + public static final IgniteFeature VER_2_0_0_ID_3_FEATURE = new TestPluginFeature(3); /** */ public static final IgniteFeature VER_2_1_0_ID_4_FEATURE = new TestPluginFeature(4); diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_3_0_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_3_0_0.java index d8441e6ff7f28..c9aabf6afb19a 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_3_0_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/feature/TestPluginReleaseFeatures_3_0_0.java @@ -20,5 +20,5 @@ /** */ public class TestPluginReleaseFeatures_3_0_0 { /** */ - public static final IgniteFeature VER_2_1_0_ID_4_FEATURE = TestPluginReleaseFeatures_2_1_0.VER_2_1_0_ID_4_FEATURE; + public static final IgniteFeature VER_2_1_0_ID_4_FEATURE = new TestPluginFeature(4); } From e98b2030dd8a6f68b3c67c71ff317027647de254 Mon Sep 17 00:00:00 2001 From: Mikhail Petrov Date: Thu, 1 Oct 2026 17:39:00 +0300 Subject: [PATCH 10/10] IGNITE-29091 --- .../message/TestContainerMessage_2_20_0.java | 10 ++++++---- .../message/TestContainerMessage_2_21_0.java | 10 ++++++---- .../message/TestCoreMessage_2_18_0.java | 4 +--- .../message/TestCoreMessage_2_19_0.java | 4 +--- .../message/TestCoreMessage_2_19_2.java | 4 +--- .../message/TestCoreMessage_2_19_3.java | 4 +--- .../message/TestCoreMessage_2_20_0.java | 4 +--- .../message/TestCoreMessage_2_20_1.java | 4 +--- .../message/TestCoreMessage_2_21_0.java | 4 +--- .../message/TestDefaultRegistryMessage_2_19_0.java | 4 +--- .../message/TestDefaultRegistryMessage_2_20_0.java | 4 +--- .../rollingupgrade/message/TestDiscoveryMessage.java | 7 ------- .../rollingupgrade/message/TestMessage.java | 11 +++++++++++ .../rollingupgrade/message/TestMessageType.java | 6 +++++- .../message/TestPluginMessage_0_9_0.java | 4 +--- .../message/TestPluginMessage_1_0_0.java | 4 +--- .../message/TestPluginMessage_1_1_0.java | 4 +--- .../message/TestPluginMessage_2_0_0.java | 4 +--- .../message/TestPluginMessage_2_1_0.java | 4 +--- .../message/TestPluginMessage_3_0_0.java | 4 +--- 20 files changed, 43 insertions(+), 61 deletions(-) diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestContainerMessage_2_20_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestContainerMessage_2_20_0.java index b7a94366c9c9e..dc73b0d4847de 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestContainerMessage_2_20_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestContainerMessage_2_20_0.java @@ -55,15 +55,13 @@ public class TestContainerMessage_2_20_0 extends TestDiscoveryMessage { Map compressedMap; /** {@inheritDoc} */ - @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { + @Override public void fill(Predicate featureStatusProvider) { msg = nestedMessage(featureStatusProvider); list = List.of(nestedMessage(featureStatusProvider)); map = Map.of(0, nestedMessage(featureStatusProvider)); arr = new TestCoreMessage_2_20_0[] {nestedMessage(featureStatusProvider)}; compressedMsg = nestedMessage(featureStatusProvider); compressedMap = Map.of(0, nestedMessage(featureStatusProvider)); - - return this; } /** {@inheritDoc} */ @@ -82,6 +80,10 @@ public class TestContainerMessage_2_20_0 extends TestDiscoveryMessage { /** */ private static TestCoreMessage_2_20_0 nestedMessage(Predicate featureStatusProvider) { - return (TestCoreMessage_2_20_0)new TestCoreMessage_2_20_0().fill(featureStatusProvider); + TestCoreMessage_2_20_0 msg = new TestCoreMessage_2_20_0(); + + msg.fill(featureStatusProvider); + + return msg; } } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestContainerMessage_2_21_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestContainerMessage_2_21_0.java index efffa0ce4d535..7749d2b4c63f4 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestContainerMessage_2_21_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestContainerMessage_2_21_0.java @@ -55,15 +55,13 @@ public class TestContainerMessage_2_21_0 extends TestDiscoveryMessage { Map compressedMap; /** {@inheritDoc} */ - @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { + @Override public void fill(Predicate featureStatusProvider) { msg = nestedMessage(featureStatusProvider); list = List.of(nestedMessage(featureStatusProvider)); map = Map.of(0, nestedMessage(featureStatusProvider)); arr = new TestCoreMessage_2_21_0[] {nestedMessage(featureStatusProvider)}; compressedMsg = nestedMessage(featureStatusProvider); compressedMap = Map.of(0, nestedMessage(featureStatusProvider)); - - return this; } /** {@inheritDoc} */ @@ -82,6 +80,10 @@ public class TestContainerMessage_2_21_0 extends TestDiscoveryMessage { /** */ private static TestCoreMessage_2_21_0 nestedMessage(Predicate featureStatusProvider) { - return (TestCoreMessage_2_21_0)new TestCoreMessage_2_21_0().fill(featureStatusProvider); + TestCoreMessage_2_21_0 msg = new TestCoreMessage_2_21_0(); + + msg.fill(featureStatusProvider); + + return msg; } } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_18_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_18_0.java index d38a23c022ba8..1b67c3c1ba642 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_18_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_18_0.java @@ -36,12 +36,10 @@ public class TestCoreMessage_2_18_0 extends TestDiscoveryMessage { String fldC; /** {@inheritDoc} */ - @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { + @Override public void fill(Predicate featureStatusProvider) { fldA = A; fldB = B; fldC = C; - - return this; } /** {@inheritDoc} */ diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_0.java index 41c24d62a8ca0..fa2676662d0d2 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_0.java @@ -43,13 +43,11 @@ public class TestCoreMessage_2_19_0 extends TestDiscoveryMessage { String fldD; /** {@inheritDoc} */ - @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { + @Override public void fill(Predicate featureStatusProvider) { fldA = A; fldB = B; fldC = C; fldD = D; - - return this; } /** {@inheritDoc} */ diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_2.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_2.java index a0f6b3f719a31..e3e8c6398e36d 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_2.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_2.java @@ -45,7 +45,7 @@ public class TestCoreMessage_2_19_2 extends TestDiscoveryMessage { String fldD; /** {@inheritDoc} */ - @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { + @Override public void fill(Predicate featureStatusProvider) { fldA = A; fldB = B; @@ -53,8 +53,6 @@ public class TestCoreMessage_2_19_2 extends TestDiscoveryMessage { fldC = C; fldD = D; - - return this; } /** {@inheritDoc} */ diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_3.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_3.java index ee2f339004f0b..1d71c2edab440 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_3.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_19_3.java @@ -49,7 +49,7 @@ public class TestCoreMessage_2_19_3 extends TestDiscoveryMessage { String fldF; /** {@inheritDoc} */ - @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { + @Override public void fill(Predicate featureStatusProvider) { fldA = A; fldB = B; @@ -58,8 +58,6 @@ public class TestCoreMessage_2_19_3 extends TestDiscoveryMessage { fldD = D; fldF = F; - - return this; } /** {@inheritDoc} */ diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_20_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_20_0.java index 63e692921150a..a4a2194219e96 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_20_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_20_0.java @@ -51,7 +51,7 @@ public class TestCoreMessage_2_20_0 extends TestDiscoveryMessage { String fldE; /** {@inheritDoc} */ - @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { + @Override public void fill(Predicate featureStatusProvider) { fldA = A; if (!featureStatusProvider.test(VER_2_20_0_ID_3_FEATURE)) @@ -64,8 +64,6 @@ public class TestCoreMessage_2_20_0 extends TestDiscoveryMessage { fldD = D; fldE = E; - - return this; } /** {@inheritDoc} */ diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_20_1.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_20_1.java index cbcfd29c54ee7..434e76c382ad1 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_20_1.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_20_1.java @@ -55,7 +55,7 @@ public class TestCoreMessage_2_20_1 extends TestDiscoveryMessage { String fldF; /** {@inheritDoc} */ - @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { + @Override public void fill(Predicate featureStatusProvider) { fldA = A; if (!featureStatusProvider.test(VER_2_20_0_ID_3_FEATURE)) @@ -69,8 +69,6 @@ public class TestCoreMessage_2_20_1 extends TestDiscoveryMessage { fldE = E; fldF = F; - - return this; } /** {@inheritDoc} */ diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_21_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_21_0.java index 1ad747207c554..8aaeb19db9f8b 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_21_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestCoreMessage_2_21_0.java @@ -39,12 +39,10 @@ public class TestCoreMessage_2_21_0 extends TestDiscoveryMessage { String fldF; /** {@inheritDoc} */ - @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { + @Override public void fill(Predicate featureStatusProvider) { fldA = A; fldE = E; fldF = F; - - return this; } /** {@inheritDoc} */ diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestDefaultRegistryMessage_2_19_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestDefaultRegistryMessage_2_19_0.java index 1070a2ca80eb3..0a16983de37a0 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestDefaultRegistryMessage_2_19_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestDefaultRegistryMessage_2_19_0.java @@ -48,15 +48,13 @@ public class TestDefaultRegistryMessage_2_19_0 extends TestDiscoveryMessage { String fldF; /** {@inheritDoc} */ - @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { + @Override public void fill(Predicate featureStatusProvider) { fldA = A; fldB = B; fldC = C; fldD = D; fldE = E; fldF = F; - - return this; } /** {@inheritDoc} */ diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestDefaultRegistryMessage_2_20_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestDefaultRegistryMessage_2_20_0.java index 4da4e861979a3..aedab36bf4449 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestDefaultRegistryMessage_2_20_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestDefaultRegistryMessage_2_20_0.java @@ -48,15 +48,13 @@ public class TestDefaultRegistryMessage_2_20_0 extends TestDiscoveryMessage { String fldF; /** {@inheritDoc} */ - @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { + @Override public void fill(Predicate featureStatusProvider) { fldA = A; fldB = B; fldC = C; fldD = D; fldE = E; fldF = F; - - return this; } /** {@inheritDoc} */ diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestDiscoveryMessage.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestDiscoveryMessage.java index d19494a4c994d..5a8ab24965f3c 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestDiscoveryMessage.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestDiscoveryMessage.java @@ -17,9 +17,7 @@ package org.apache.ignite.internal.processors.rollingupgrade.message; -import java.util.function.Predicate; import org.apache.ignite.internal.managers.discovery.DiscoveryCustomMessage; -import org.apache.ignite.internal.processors.rollingupgrade.feature.IgniteFeature; import org.apache.ignite.lang.IgniteUuid; import org.jetbrains.annotations.Nullable; @@ -30,11 +28,6 @@ protected TestDiscoveryMessage() { super(IgniteUuid.randomUuid()); } - /** */ - public TestDiscoveryMessage fill(Predicate featureStatusProvider) { - return this; - } - /** {@inheritDoc} */ @Nullable @Override public DiscoveryCustomMessage ackMessage() { return null; diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestMessage.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestMessage.java index e5722f0a8ef29..3427dd3f90898 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestMessage.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestMessage.java @@ -18,6 +18,8 @@ package org.apache.ignite.internal.processors.rollingupgrade.message; import java.util.List; +import java.util.function.Predicate; +import org.apache.ignite.internal.processors.rollingupgrade.feature.IgniteFeature; /** */ public interface TestMessage { @@ -39,6 +41,15 @@ public interface TestMessage { /** */ String F = "F"; + /** + * Fills the message with data. The implementation must take into account the final feature state of the release this + * message belongs to. This should imitate how Ignite processors fill messages with RU in mind (e.g. if the feature that + * deprecated a field is active, the field is not filled). + * + * @param featureStatusProvider Tells whether a feature is active in the cluster. + */ + void fill(Predicate featureStatusProvider); + /** */ default String fldA() { return null; diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestMessageType.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestMessageType.java index abfa9dd6fde41..bae4ba3f105f7 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestMessageType.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestMessageType.java @@ -72,7 +72,11 @@ public TestDiscoveryMessage build(String cmpVers, Predicate featu if (msgCls == null) throw new AssertionError("Failed to resolve test message class [type=" + this + ", cmpVers=" + cmpVers + ']'); - return ((TestDiscoveryMessage)msgCls.getConstructor().newInstance()).fill(featureStatusProvider); + TestDiscoveryMessage msg = (TestDiscoveryMessage)msgCls.getConstructor().newInstance(); + + msg.fill(featureStatusProvider); + + return msg; } /** */ diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_0_9_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_0_9_0.java index 23a9f81da32b3..9ea108e029a27 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_0_9_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_0_9_0.java @@ -36,12 +36,10 @@ public class TestPluginMessage_0_9_0 extends TestDiscoveryMessage { String fldC; /** {@inheritDoc} */ - @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { + @Override public void fill(Predicate featureStatusProvider) { fldA = A; fldB = B; fldC = C; - - return this; } /** {@inheritDoc} */ diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_1_0_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_1_0_0.java index af8801134e4e9..a6cac2b867340 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_1_0_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_1_0_0.java @@ -43,13 +43,11 @@ public class TestPluginMessage_1_0_0 extends TestDiscoveryMessage { String fldD; /** {@inheritDoc} */ - @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { + @Override public void fill(Predicate featureStatusProvider) { fldA = A; fldB = B; fldC = C; fldD = D; - - return this; } /** {@inheritDoc} */ diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_1_1_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_1_1_0.java index a68f40feac613..e8ac881aaf000 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_1_1_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_1_1_0.java @@ -45,7 +45,7 @@ public class TestPluginMessage_1_1_0 extends TestDiscoveryMessage { String fldD; /** {@inheritDoc} */ - @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { + @Override public void fill(Predicate featureStatusProvider) { fldA = A; if (!featureStatusProvider.test(VER_1_1_0_ID_1_FEATURE)) @@ -53,8 +53,6 @@ public class TestPluginMessage_1_1_0 extends TestDiscoveryMessage { fldC = C; fldD = D; - - return this; } /** {@inheritDoc} */ diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_2_0_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_2_0_0.java index 21eff918ef193..47e7eb04b26c9 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_2_0_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_2_0_0.java @@ -50,7 +50,7 @@ public class TestPluginMessage_2_0_0 extends TestDiscoveryMessage { String fldE; /** {@inheritDoc} */ - @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { + @Override public void fill(Predicate featureStatusProvider) { fldA = A; if (!featureStatusProvider.test(VER_1_1_0_ID_1_FEATURE)) @@ -62,8 +62,6 @@ public class TestPluginMessage_2_0_0 extends TestDiscoveryMessage { fldD = D; fldE = E; - - return this; } /** {@inheritDoc} */ diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_2_1_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_2_1_0.java index a9c8f480f3400..6756f4e993efb 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_2_1_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_2_1_0.java @@ -54,7 +54,7 @@ public class TestPluginMessage_2_1_0 extends TestDiscoveryMessage { String fldF; /** {@inheritDoc} */ - @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { + @Override public void fill(Predicate featureStatusProvider) { fldA = A; if (!featureStatusProvider.test(VER_1_1_0_ID_1_FEATURE)) @@ -67,8 +67,6 @@ public class TestPluginMessage_2_1_0 extends TestDiscoveryMessage { fldE = E; fldF = F; - - return this; } /** {@inheritDoc} */ diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_3_0_0.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_3_0_0.java index 701d5ff28e499..791512b0cebf6 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_3_0_0.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rollingupgrade/message/TestPluginMessage_3_0_0.java @@ -43,13 +43,11 @@ public class TestPluginMessage_3_0_0 extends TestDiscoveryMessage { String fldF; /** {@inheritDoc} */ - @Override public TestDiscoveryMessage fill(Predicate featureStatusProvider) { + @Override public void fill(Predicate featureStatusProvider) { fldA = A; fldC = C; fldE = E; fldF = F; - - return this; } /** {@inheritDoc} */