diff --git a/metadata/src/test/java/org/apache/kafka/metadata/storage/FormatterTest.java b/metadata/src/test/java/org/apache/kafka/metadata/storage/FormatterTest.java index e57002abb8e50..49253d7b144a6 100644 --- a/metadata/src/test/java/org/apache/kafka/metadata/storage/FormatterTest.java +++ b/metadata/src/test/java/org/apache/kafka/metadata/storage/FormatterTest.java @@ -34,10 +34,13 @@ import org.apache.kafka.server.common.GroupVersion; import org.apache.kafka.server.common.KRaftVersion; import org.apache.kafka.server.common.MetadataVersion; +import org.apache.kafka.server.common.ShareVersion; +import org.apache.kafka.server.common.StreamsVersion; import org.apache.kafka.server.common.TestFeatureVersion; import org.apache.kafka.server.common.TransactionVersion; import org.apache.kafka.test.TestUtils; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Timeout; import org.junit.jupiter.params.ParameterizedTest; @@ -271,6 +274,8 @@ public void testFormatWithOlderReleaseVersion() throws Exception { } } + // This test is disabled because all features are stable in Apache Kafka 4.2. + @Disabled @Test public void testFormatWithUnstableReleaseVersionFailsWithoutEnableUnstable() throws Exception { try (TestEnv testEnv = new TestEnv(1)) { @@ -391,6 +396,12 @@ public void testFeatureFlag(short version) throws Exception { expected.add(new ApiMessageAndVersion(new FeatureLevelRecord(). setName(GroupVersion.FEATURE_NAME). setFeatureLevel(GroupVersion.GV_1.featureLevel()), (short) 0)); + expected.add(new ApiMessageAndVersion(new FeatureLevelRecord(). + setName(ShareVersion.FEATURE_NAME). + setFeatureLevel(ShareVersion.SV_1.featureLevel()), (short) 0)); + expected.add(new ApiMessageAndVersion(new FeatureLevelRecord(). + setName(StreamsVersion.FEATURE_NAME). + setFeatureLevel(StreamsVersion.SV_1.featureLevel()), (short) 0)); if (version > 0) { expected.add(new ApiMessageAndVersion(new FeatureLevelRecord(). setName(TestFeatureVersion.FEATURE_NAME). diff --git a/server-common/src/main/java/org/apache/kafka/server/common/MetadataVersion.java b/server-common/src/main/java/org/apache/kafka/server/common/MetadataVersion.java index d6f179fd3c307..d99741d68600b 100644 --- a/server-common/src/main/java/org/apache/kafka/server/common/MetadataVersion.java +++ b/server-common/src/main/java/org/apache/kafka/server/common/MetadataVersion.java @@ -114,6 +114,12 @@ public enum MetadataVersion { // Send FETCH version 18 in the replica fetcher (KIP-1166) IBP_4_1_IV1(27, "4.1", "IV1", false), + // Enables share groups by default for new clusters (KIP-932). + IBP_4_2_IV0(28, "4.2", "IV0", false), + + // Enables "streams" groups by default for new clusters (KIP-1071). + IBP_4_2_IV1(29, "4.2", "IV1", false); + // // NOTE: MetadataVersions after this point are unstable and may be changed. // If users attempt to use an unstable MetadataVersion, they will get an error unless @@ -121,12 +127,6 @@ public enum MetadataVersion { // Please move this comment when updating the LATEST_PRODUCTION constant. // - // Enables share groups by default for new clusters (KIP-932). - IBP_4_2_IV0(28, "4.2", "IV0", false), - - // Enables "streams" groups by default for new clusters (KIP-1071). - IBP_4_2_IV1(29, "4.2", "IV1", false); - // NOTES when adding a new version: // Update the default version in @ClusterTest annotation to point to the latest version // Change expected message in org.apache.kafka.tools.FeatureCommandTest in multiple places (search for "Change expected message") @@ -145,7 +145,7 @@ public enum MetadataVersion { * Think carefully before you update this value. ONCE A METADATA VERSION IS PRODUCTION, * IT CANNOT BE CHANGED. */ - public static final MetadataVersion LATEST_PRODUCTION = IBP_4_1_IV1; + public static final MetadataVersion LATEST_PRODUCTION = IBP_4_2_IV1; // If you change the value above please also update // LATEST_STABLE_METADATA_VERSION version in tests/kafkatest/version.py @@ -372,7 +372,8 @@ public static MetadataVersion fromFeatureLevel(short version) { // Testing only public static MetadataVersion latestTesting() { - return VERSIONS[VERSIONS.length - 1]; + // There is no separate testing version because all features are currently stable. + return LATEST_PRODUCTION; } public static MetadataVersion latestProduction() { diff --git a/server-common/src/test/java/org/apache/kafka/server/common/MetadataVersionTest.java b/server-common/src/test/java/org/apache/kafka/server/common/MetadataVersionTest.java index 136fdeaa4ecc9..556479995ebdf 100644 --- a/server-common/src/test/java/org/apache/kafka/server/common/MetadataVersionTest.java +++ b/server-common/src/test/java/org/apache/kafka/server/common/MetadataVersionTest.java @@ -19,6 +19,7 @@ import org.apache.kafka.common.protocol.ApiKeys; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.EnumSource; @@ -90,16 +91,15 @@ public void testFromVersionString() { assertEquals(IBP_4_1_IV0, MetadataVersion.fromVersionString("4.1-IV0", true)); assertEquals(IBP_4_1_IV1, MetadataVersion.fromVersionString("4.1-IV1", true)); + // 4.2-IV1 is the latest production version in the 4.2 line + assertEquals(IBP_4_2_IV1, MetadataVersion.fromVersionString("4.2", true)); assertEquals(IBP_4_2_IV0, MetadataVersion.fromVersionString("4.2-IV0", true)); assertEquals(IBP_4_2_IV1, MetadataVersion.fromVersionString("4.2-IV1", true)); // Throws exception when unstableFeatureVersionsEnabled is false - assertEquals("Unknown metadata.version '4.2-IV0'. Supported metadata.version are: 3.3-IV3, 3.4-IV0, 3.5-IV0, 3.5-IV1, 3.5-IV2, " - + "3.6-IV0, 3.6-IV1, 3.6-IV2, 3.7-IV0, 3.7-IV1, 3.7-IV2, 3.7-IV3, 3.7-IV4, 3.8-IV0, 3.9-IV0, 4.0-IV0, 4.0-IV1, 4.0-IV2, 4.0-IV3, 4.1-IV0, 4.1-IV1", - assertThrows(IllegalArgumentException.class, () -> fromVersionString("4.2-IV0", false)).getMessage()); - assertEquals("Unknown metadata.version '4.2-IV1'. Supported metadata.version are: 3.3-IV3, 3.4-IV0, 3.5-IV0, 3.5-IV1, 3.5-IV2, " - + "3.6-IV0, 3.6-IV1, 3.6-IV2, 3.7-IV0, 3.7-IV1, 3.7-IV2, 3.7-IV3, 3.7-IV4, 3.8-IV0, 3.9-IV0, 4.0-IV0, 4.0-IV1, 4.0-IV2, 4.0-IV3, 4.1-IV0, 4.1-IV1", - assertThrows(IllegalArgumentException.class, () -> fromVersionString("4.2-IV1", false)).getMessage()); + assertEquals("Unknown metadata.version '4.3-IV0'. Supported metadata.version are: 3.3-IV3, 3.4-IV0, 3.5-IV0, 3.5-IV1, 3.5-IV2, " + + "3.6-IV0, 3.6-IV1, 3.6-IV2, 3.7-IV0, 3.7-IV1, 3.7-IV2, 3.7-IV3, 3.7-IV4, 3.8-IV0, 3.9-IV0, 4.0-IV0, 4.0-IV1, 4.0-IV2, 4.0-IV3, 4.1-IV0, 4.1-IV1, 4.2-IV0, 4.2-IV1", + assertThrows(IllegalArgumentException.class, () -> fromVersionString("4.3-IV0", false)).getMessage()); } @Test @@ -249,6 +249,8 @@ public void testRegisterBrokerRecordVersion(MetadataVersion metadataVersion) { assertEquals(expectedVersion, metadataVersion.registerBrokerRecordVersion()); } + // This test is disabled because all features are stable in Apache Kafka 4.2. + @Disabled @Test public void assertLatestProductionIsLessThanLatest() { assertTrue(LATEST_PRODUCTION.ordinal() < MetadataVersion.latestTesting().ordinal(), @@ -273,6 +275,8 @@ public void assertLatestProductionIsProduction() { assertTrue(LATEST_PRODUCTION.isProduction()); } + // This test is disabled because all features are stable in Apache Kafka 4.2. + @Disabled @Test public void assertLatestIsNotProduction() { assertFalse(MetadataVersion.latestTesting().isProduction()); diff --git a/tests/kafkatest/version.py b/tests/kafkatest/version.py index d68bc0e88aee5..d7d79e97e6ae2 100644 --- a/tests/kafkatest/version.py +++ b/tests/kafkatest/version.py @@ -132,7 +132,7 @@ def get_version(node=None): LATEST_STABLE_TRANSACTION_VERSION = 2 # This should match the LATEST_PRODUCTION version defined in MetadataVersion.java -LATEST_STABLE_METADATA_VERSION = "4.1-IV1" +LATEST_STABLE_METADATA_VERSION = "4.2-IV1" # 2.1.x versions V_2_1_0 = KafkaVersion("2.1.0") @@ -248,4 +248,5 @@ def get_version(node=None): # 4.2.x version V_4_2_0 = KafkaVersion("4.2.0") -LATEST_4_2 = V_4_2_0 +V_4_2_1 = KafkaVersion("4.2.1") +LATEST_4_2 = V_4_2_1