From 267ca9e87d65f56b64be13daf505798200145016 Mon Sep 17 00:00:00 2001 From: Andrew Schofield Date: Mon, 24 Nov 2025 11:17:50 +0000 Subject: [PATCH 1/2] MINOR: Bump LATEST_PRODUCTION to 4.2-IV1 --- .../kafka/metadata/storage/FormatterTest.java | 8 ++++++++ .../kafka/server/common/MetadataVersion.java | 15 +++++++++------ .../kafka/server/common/MetadataVersionTest.java | 11 +++++------ tests/kafkatest/version.py | 5 +++-- 4 files changed, 25 insertions(+), 14 deletions(-) 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..dcfba4328aeb7 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,6 +34,8 @@ 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; @@ -391,6 +393,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..5a6cff40ed9b1 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,11 +127,8 @@ 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); + // Placeholder testing level for 4.3. + IBP_4_3_IV0(30, "4.3", "IV0", false); // NOTES when adding a new version: // Update the default version in @ClusterTest annotation to point to the latest version @@ -145,7 +148,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 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..b98a9cb3dbe68 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 @@ -90,16 +90,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 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 From 5383c17d3e1c086b8dd777c14057e38b50b5479c Mon Sep 17 00:00:00 2001 From: Andrew Schofield Date: Mon, 24 Nov 2025 14:56:20 +0000 Subject: [PATCH 2/2] Test fixes --- .../org/apache/kafka/metadata/storage/FormatterTest.java | 3 +++ .../org/apache/kafka/server/common/MetadataVersion.java | 8 +++----- .../apache/kafka/server/common/MetadataVersionTest.java | 5 +++++ 3 files changed, 11 insertions(+), 5 deletions(-) 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 dcfba4328aeb7..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 @@ -40,6 +40,7 @@ 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; @@ -273,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)) { 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 5a6cff40ed9b1..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 @@ -118,7 +118,7 @@ public enum MetadataVersion { 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), + IBP_4_2_IV1(29, "4.2", "IV1", false); // // NOTE: MetadataVersions after this point are unstable and may be changed. @@ -127,9 +127,6 @@ public enum MetadataVersion { // Please move this comment when updating the LATEST_PRODUCTION constant. // - // Placeholder testing level for 4.3. - IBP_4_3_IV0(30, "4.3", "IV0", 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") @@ -375,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 b98a9cb3dbe68..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; @@ -248,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(), @@ -272,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());