MINOR: Mark IBP_4_0_IV3 as production ready! (#18902)

This patch marks IBP_4_0_IV3 as production ready for the Apache Kafka 4.0 release. It also introduced IBP_4_1_IV0 as the next development version.

Reviewers: Justine Olshan <jolshan@confluent.io>
This commit is contained in:
David Jacot 2025-02-14 17:17:11 +01:00 committed by GitHub
parent 1cbd0a2bd7
commit aec0e555be
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 23 additions and 11 deletions

View File

@ -34,6 +34,7 @@ import org.apache.kafka.server.common.Feature;
import org.apache.kafka.server.common.GroupVersion; import org.apache.kafka.server.common.GroupVersion;
import org.apache.kafka.server.common.MetadataVersion; import org.apache.kafka.server.common.MetadataVersion;
import org.apache.kafka.server.common.TestFeatureVersion; import org.apache.kafka.server.common.TestFeatureVersion;
import org.apache.kafka.server.common.TransactionVersion;
import org.apache.kafka.test.TestUtils; import org.apache.kafka.test.TestUtils;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@ -353,6 +354,9 @@ public class FormatterTest {
setName(TestFeatureVersion.FEATURE_NAME). setName(TestFeatureVersion.FEATURE_NAME).
setFeatureLevel(version), (short) 0)); setFeatureLevel(version), (short) 0));
} }
expected.add(new ApiMessageAndVersion(new FeatureLevelRecord().
setName(TransactionVersion.FEATURE_NAME).
setFeatureLevel(TransactionVersion.TV_2.featureLevel()), (short) 0));
assertEquals(expected, bootstrapMetadata.records()); assertEquals(expected, bootstrapMetadata.records());
} }
} }

View File

@ -118,17 +118,20 @@ public enum MetadataVersion {
// ClearElrRecord is added. // ClearElrRecord is added.
IBP_4_0_IV1(23, "4.0", "IV1", true), IBP_4_0_IV1(23, "4.0", "IV1", true),
// Bootstrap metadata version for transaction versions 1 and 2 (KIP-890)
IBP_4_0_IV2(24, "4.0", "IV2", false),
// Enables async remote LIST_OFFSETS support (KIP-1075)
IBP_4_0_IV3(25, "4.0", "IV3", false),
// //
// NOTE: MetadataVersions after this point are unstable and may be changed. // NOTE: MetadataVersions after this point are unstable and may be changed.
// If users attempt to use an unstable MetadataVersion, they will get an error. // If users attempt to use an unstable MetadataVersion, they will get an error.
// Please move this comment when updating the LATEST_PRODUCTION constant. // Please move this comment when updating the LATEST_PRODUCTION constant.
// //
// Bootstrap metadata version for transaction versions 1 and 2 (KIP-890) // Not used by anything yet.
IBP_4_0_IV2(24, "4.0", "IV2", false), IBP_4_1_IV0(26, "4.1", "IV0", false);
// Enables async remote LIST_OFFSETS support (KIP-1075)
IBP_4_0_IV3(25, "4.0", "IV3", false);
// NOTES when adding a new version: // NOTES when adding a new version:
// Update the default version in @ClusterTest annotation to point to the latest version // Update the default version in @ClusterTest annotation to point to the latest version
@ -154,7 +157,7 @@ public enum MetadataVersion {
* <strong>Think carefully before you update this value. ONCE A METADATA VERSION IS PRODUCTION, * <strong>Think carefully before you update this value. ONCE A METADATA VERSION IS PRODUCTION,
* IT CANNOT BE CHANGED.</strong> * IT CANNOT BE CHANGED.</strong>
*/ */
public static final MetadataVersion LATEST_PRODUCTION = IBP_4_0_IV1; public static final MetadataVersion LATEST_PRODUCTION = IBP_4_0_IV3;
// If you change the value above please also update // If you change the value above please also update
// LATEST_STABLE_METADATA_VERSION version in tests/kafkatest/version.py // LATEST_STABLE_METADATA_VERSION version in tests/kafkatest/version.py

View File

@ -95,10 +95,13 @@ class MetadataVersionTest {
assertEquals(IBP_3_9_IV0, MetadataVersion.fromVersionString("3.9")); assertEquals(IBP_3_9_IV0, MetadataVersion.fromVersionString("3.9"));
assertEquals(IBP_3_9_IV0, MetadataVersion.fromVersionString("3.9-IV0")); assertEquals(IBP_3_9_IV0, MetadataVersion.fromVersionString("3.9-IV0"));
// 4.0-IV3 is the latest production version in the 4.0 line
assertEquals(IBP_4_0_IV0, MetadataVersion.fromVersionString("4.0-IV0")); assertEquals(IBP_4_0_IV0, MetadataVersion.fromVersionString("4.0-IV0"));
assertEquals(IBP_4_0_IV1, MetadataVersion.fromVersionString("4.0-IV1")); assertEquals(IBP_4_0_IV1, MetadataVersion.fromVersionString("4.0-IV1"));
assertEquals(IBP_4_0_IV2, MetadataVersion.fromVersionString("4.0-IV2")); assertEquals(IBP_4_0_IV2, MetadataVersion.fromVersionString("4.0-IV2"));
assertEquals(IBP_4_0_IV3, MetadataVersion.fromVersionString("4.0-IV3")); assertEquals(IBP_4_0_IV3, MetadataVersion.fromVersionString("4.0-IV3"));
assertEquals(IBP_4_1_IV0, MetadataVersion.fromVersionString("4.1-IV0"));
} }
@Test @Test
@ -128,6 +131,7 @@ class MetadataVersionTest {
assertEquals("4.0", IBP_4_0_IV1.shortVersion()); assertEquals("4.0", IBP_4_0_IV1.shortVersion());
assertEquals("4.0", IBP_4_0_IV2.shortVersion()); assertEquals("4.0", IBP_4_0_IV2.shortVersion());
assertEquals("4.0", IBP_4_0_IV3.shortVersion()); assertEquals("4.0", IBP_4_0_IV3.shortVersion());
assertEquals("4.1", IBP_4_1_IV0.shortVersion());
} }
@Test @Test
@ -157,6 +161,7 @@ class MetadataVersionTest {
assertEquals("4.0-IV1", IBP_4_0_IV1.version()); assertEquals("4.0-IV1", IBP_4_0_IV1.version());
assertEquals("4.0-IV2", IBP_4_0_IV2.version()); assertEquals("4.0-IV2", IBP_4_0_IV2.version());
assertEquals("4.0-IV3", IBP_4_0_IV3.version()); assertEquals("4.0-IV3", IBP_4_0_IV3.version());
assertEquals("4.1-IV0", IBP_4_1_IV0.version());
} }
@Test @Test

View File

@ -52,7 +52,7 @@ public @interface ClusterTest {
String brokerListener() default DEFAULT_BROKER_LISTENER_NAME; String brokerListener() default DEFAULT_BROKER_LISTENER_NAME;
SecurityProtocol controllerSecurityProtocol() default SecurityProtocol.PLAINTEXT; SecurityProtocol controllerSecurityProtocol() default SecurityProtocol.PLAINTEXT;
String controllerListener() default DEFAULT_CONTROLLER_LISTENER_NAME; String controllerListener() default DEFAULT_CONTROLLER_LISTENER_NAME;
MetadataVersion metadataVersion() default MetadataVersion.IBP_4_0_IV3; MetadataVersion metadataVersion() default MetadataVersion.IBP_4_1_IV0;
ClusterConfigProperty[] serverProperties() default {}; ClusterConfigProperty[] serverProperties() default {};
// users can add tags that they want to display in test // users can add tags that they want to display in test
String[] tags() default {}; String[] tags() default {};

View File

@ -114,7 +114,7 @@ DEV_VERSION = KafkaVersion("4.1.0-SNAPSHOT")
LATEST_STABLE_TRANSACTION_VERSION = 2 LATEST_STABLE_TRANSACTION_VERSION = 2
# This should match the LATEST_PRODUCTION version defined in MetadataVersion.java # This should match the LATEST_PRODUCTION version defined in MetadataVersion.java
LATEST_STABLE_METADATA_VERSION = "4.0-IV1" LATEST_STABLE_METADATA_VERSION = "4.0-IV3"
# 0.11.0.x versions # 0.11.0.x versions
V_0_11_0_3 = KafkaVersion("0.11.0.3") V_0_11_0_3 = KafkaVersion("0.11.0.3")

View File

@ -64,7 +64,7 @@ public class FeatureCommandTest {
assertEquals("Feature: kraft.version\tSupportedMinVersion: 0\t" + assertEquals("Feature: kraft.version\tSupportedMinVersion: 0\t" +
"SupportedMaxVersion: 1\tFinalizedVersionLevel: 0\t", outputWithoutEpoch(features.get(2))); "SupportedMaxVersion: 1\tFinalizedVersionLevel: 0\t", outputWithoutEpoch(features.get(2)));
assertEquals("Feature: metadata.version\tSupportedMinVersion: 3.0-IV1\t" + assertEquals("Feature: metadata.version\tSupportedMinVersion: 3.0-IV1\t" +
"SupportedMaxVersion: 4.0-IV3\tFinalizedVersionLevel: 3.3-IV1\t", outputWithoutEpoch(features.get(3))); "SupportedMaxVersion: 4.1-IV0\tFinalizedVersionLevel: 3.3-IV1\t", outputWithoutEpoch(features.get(3)));
assertEquals("Feature: transaction.version\tSupportedMinVersion: 0\t" + assertEquals("Feature: transaction.version\tSupportedMinVersion: 0\t" +
"SupportedMaxVersion: 2\tFinalizedVersionLevel: 0\t", outputWithoutEpoch(features.get(4))); "SupportedMaxVersion: 2\tFinalizedVersionLevel: 0\t", outputWithoutEpoch(features.get(4)));
} }
@ -86,7 +86,7 @@ public class FeatureCommandTest {
assertEquals("Feature: kraft.version\tSupportedMinVersion: 0\t" + assertEquals("Feature: kraft.version\tSupportedMinVersion: 0\t" +
"SupportedMaxVersion: 1\tFinalizedVersionLevel: 0\t", outputWithoutEpoch(features.get(2))); "SupportedMaxVersion: 1\tFinalizedVersionLevel: 0\t", outputWithoutEpoch(features.get(2)));
assertEquals("Feature: metadata.version\tSupportedMinVersion: 3.0-IV1\t" + assertEquals("Feature: metadata.version\tSupportedMinVersion: 3.0-IV1\t" +
"SupportedMaxVersion: 4.0-IV3\tFinalizedVersionLevel: 3.7-IV0\t", outputWithoutEpoch(features.get(3))); "SupportedMaxVersion: 4.1-IV0\tFinalizedVersionLevel: 3.7-IV0\t", outputWithoutEpoch(features.get(3)));
assertEquals("Feature: transaction.version\tSupportedMinVersion: 0\t" + assertEquals("Feature: transaction.version\tSupportedMinVersion: 0\t" +
"SupportedMaxVersion: 2\tFinalizedVersionLevel: 0\t", outputWithoutEpoch(features.get(4))); "SupportedMaxVersion: 2\tFinalizedVersionLevel: 0\t", outputWithoutEpoch(features.get(4)));
} }
@ -114,7 +114,7 @@ public class FeatureCommandTest {
); );
// Change expected message to reflect possible MetadataVersion range 1-N (N increases when adding a new version) // Change expected message to reflect possible MetadataVersion range 1-N (N increases when adding a new version)
assertEquals("Could not disable metadata.version. The update failed for all features since the following " + assertEquals("Could not disable metadata.version. The update failed for all features since the following " +
"feature had an error: Invalid update version 0 for feature metadata.version. Local controller 3000 only supports versions 1-25", commandOutput); "feature had an error: Invalid update version 0 for feature metadata.version. Local controller 3000 only supports versions 1-26", commandOutput);
commandOutput = ToolsTestUtils.captureStandardOut(() -> commandOutput = ToolsTestUtils.captureStandardOut(() ->
assertEquals(1, FeatureCommand.mainNoExit("--bootstrap-server", cluster.bootstrapServers(), assertEquals(1, FeatureCommand.mainNoExit("--bootstrap-server", cluster.bootstrapServers(),