From 64087fd9f3df78674a4d77d85fbd3722f3fcccbd Mon Sep 17 00:00:00 2001 From: Ron Dagostino Date: Tue, 22 Aug 2023 19:04:53 -0400 Subject: [PATCH] MINOR: Move delegation token support to Metadata Version 3.6-IV2 (#14270) #14083 added support for delegation tokens in KRaft and attached that support to the existing MetadataVersion 3.6-IV1. This patch moves that support into a separate MetadataVersion 3.6-IV2. Reviewers: Colin P. McCabe --- .../java/kafka/test/ClusterTestExtensionsTest.java | 2 +- .../java/kafka/test/annotation/ClusterTest.java | 2 +- .../kafka/controller/QuorumControllerTest.java | 6 +++--- .../apache/kafka/server/common/MetadataVersion.java | 13 +++++++++---- .../kafka/server/common/MetadataVersionTest.java | 5 ++++- .../org/apache/kafka/tools/FeatureCommandTest.java | 6 ++++-- 6 files changed, 22 insertions(+), 12 deletions(-) diff --git a/core/src/test/java/kafka/test/ClusterTestExtensionsTest.java b/core/src/test/java/kafka/test/ClusterTestExtensionsTest.java index a52e51fe112..9c9bfa2b48a 100644 --- a/core/src/test/java/kafka/test/ClusterTestExtensionsTest.java +++ b/core/src/test/java/kafka/test/ClusterTestExtensionsTest.java @@ -117,6 +117,6 @@ public class ClusterTestExtensionsTest { @ClusterTest public void testDefaults(ClusterConfig config) { - Assertions.assertEquals(MetadataVersion.IBP_3_6_IV1, config.metadataVersion()); + Assertions.assertEquals(MetadataVersion.IBP_3_6_IV2, config.metadataVersion()); } } diff --git a/core/src/test/java/kafka/test/annotation/ClusterTest.java b/core/src/test/java/kafka/test/annotation/ClusterTest.java index cd9161ce923..d199d3418e3 100644 --- a/core/src/test/java/kafka/test/annotation/ClusterTest.java +++ b/core/src/test/java/kafka/test/annotation/ClusterTest.java @@ -41,6 +41,6 @@ public @interface ClusterTest { String name() default ""; SecurityProtocol securityProtocol() default SecurityProtocol.PLAINTEXT; String listener() default ""; - MetadataVersion metadataVersion() default MetadataVersion.IBP_3_6_IV1; + MetadataVersion metadataVersion() default MetadataVersion.IBP_3_6_IV2; ClusterConfigProperty[] serverProperties() default {}; } diff --git a/metadata/src/test/java/org/apache/kafka/controller/QuorumControllerTest.java b/metadata/src/test/java/org/apache/kafka/controller/QuorumControllerTest.java index b41f4729e4c..02e122580e7 100644 --- a/metadata/src/test/java/org/apache/kafka/controller/QuorumControllerTest.java +++ b/metadata/src/test/java/org/apache/kafka/controller/QuorumControllerTest.java @@ -166,7 +166,7 @@ public class QuorumControllerTest { ) { controlEnv.activeController().registerBroker(ANONYMOUS_CONTEXT, new BrokerRegistrationRequestData(). - setFeatures(brokerFeatures(MetadataVersion.IBP_3_0_IV1, MetadataVersion.IBP_3_6_IV1)). + setFeatures(brokerFeatures(MetadataVersion.IBP_3_0_IV1, MetadataVersion.IBP_3_6_IV2)). setBrokerId(0). setClusterId(logEnv.clusterId())).get(); testConfigurationOperations(controlEnv.activeController()); @@ -207,7 +207,7 @@ public class QuorumControllerTest { ) { controlEnv.activeController().registerBroker(ANONYMOUS_CONTEXT, new BrokerRegistrationRequestData(). - setFeatures(brokerFeatures(MetadataVersion.IBP_3_0_IV1, MetadataVersion.IBP_3_6_IV1)). + setFeatures(brokerFeatures(MetadataVersion.IBP_3_0_IV1, MetadataVersion.IBP_3_6_IV2)). setBrokerId(0). setClusterId(logEnv.clusterId())).get(); testDelayedConfigurationOperations(logEnv, controlEnv.activeController()); @@ -544,7 +544,7 @@ public class QuorumControllerTest { setBrokerId(0). setClusterId(active.clusterId()). setIncarnationId(Uuid.fromString("kxAT73dKQsitIedpiPtwBA")). - setFeatures(brokerFeatures(MetadataVersion.IBP_3_0_IV1, MetadataVersion.IBP_3_6_IV1)). + setFeatures(brokerFeatures(MetadataVersion.IBP_3_0_IV1, MetadataVersion.IBP_3_6_IV2)). setListeners(listeners)); assertEquals(5L, reply.get().epoch()); CreateTopicsRequestData createTopicsRequestData = 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 7ef34f13991..92f064f290b 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 @@ -179,10 +179,15 @@ public enum MetadataVersion { // Remove leader epoch bump when KRaft controller shrinks the ISR (KAFKA-15021) IBP_3_6_IV0(12, "3.6", "IV0", false), - // Add metadata transactions and KRaft support for Delegation Tokens - IBP_3_6_IV1(13, "3.6", "IV1", true); + // Add metadata transactions + IBP_3_6_IV1(13, "3.6", "IV1", true), - // NOTE: update the default version in @ClusterTest annotation to point to the latest version + // Add KRaft support for Delegation Tokens + IBP_3_6_IV2(14, "3.6", "IV2", true); + + // 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") public static final String FEATURE_NAME = "metadata.version"; /** @@ -275,7 +280,7 @@ public enum MetadataVersion { } public boolean isDelegationTokenSupported() { - return this.isAtLeast(IBP_3_6_IV1); + return this.isAtLeast(IBP_3_6_IV2); } public boolean isKRaftSupported() { 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 e6e32920ff0..27028b86cfe 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 @@ -163,6 +163,7 @@ class MetadataVersionTest { assertEquals(IBP_3_6_IV0, MetadataVersion.fromVersionString("3.6-IV0")); assertEquals(IBP_3_6_IV1, MetadataVersion.fromVersionString("3.6-IV1")); + assertEquals(IBP_3_6_IV2, MetadataVersion.fromVersionString("3.6-IV2")); } @Test @@ -216,6 +217,7 @@ class MetadataVersionTest { assertEquals("3.5", IBP_3_5_IV2.shortVersion()); assertEquals("3.6", IBP_3_6_IV0.shortVersion()); assertEquals("3.6", IBP_3_6_IV1.shortVersion()); + assertEquals("3.6", IBP_3_6_IV2.shortVersion()); } @Test @@ -258,6 +260,7 @@ class MetadataVersionTest { assertEquals("3.5-IV2", IBP_3_5_IV2.version()); assertEquals("3.6-IV0", IBP_3_6_IV0.version()); assertEquals("3.6-IV1", IBP_3_6_IV1.version()); + assertEquals("3.6-IV2", IBP_3_6_IV2.version()); } @Test @@ -312,7 +315,7 @@ class MetadataVersionTest { @ParameterizedTest @EnumSource(value = MetadataVersion.class) public void testIsDelegationTokenSupported(MetadataVersion metadataVersion) { - assertEquals(metadataVersion.isAtLeast(IBP_3_6_IV1), + assertEquals(metadataVersion.isAtLeast(IBP_3_6_IV2), metadataVersion.isDelegationTokenSupported()); } diff --git a/tools/src/test/java/org/apache/kafka/tools/FeatureCommandTest.java b/tools/src/test/java/org/apache/kafka/tools/FeatureCommandTest.java index 8d7f56fcae7..d0511d9cb18 100644 --- a/tools/src/test/java/org/apache/kafka/tools/FeatureCommandTest.java +++ b/tools/src/test/java/org/apache/kafka/tools/FeatureCommandTest.java @@ -66,8 +66,9 @@ public class FeatureCommandTest { String commandOutput = ToolsTestUtils.captureStandardOut(() -> assertEquals(0, FeatureCommand.mainNoExit("--bootstrap-server", cluster.bootstrapServers(), "describe")) ); + // Change expected message to reflect latest MetadataVersion (SupportedMaxVersion increases when adding a new version) assertEquals("Feature: metadata.version\tSupportedMinVersion: 3.0-IV1\t" + - "SupportedMaxVersion: 3.6-IV1\tFinalizedVersionLevel: 3.3-IV1\t", outputWithoutEpoch(commandOutput)); + "SupportedMaxVersion: 3.6-IV2\tFinalizedVersionLevel: 3.3-IV1\t", outputWithoutEpoch(commandOutput)); } @ClusterTest(clusterType = Type.ZK, metadataVersion = MetadataVersion.IBP_3_3_IV1) @@ -124,8 +125,9 @@ public class FeatureCommandTest { assertEquals(1, FeatureCommand.mainNoExit("--bootstrap-server", cluster.bootstrapServers(), "disable", "--feature", "metadata.version")) ); + // Change expected message to reflect possible MetadataVersion range 1-N (N increases when adding a new version) assertEquals("Could not disable metadata.version. Invalid update version 0 for feature " + - "metadata.version. Local controller 3000 only supports versions 1-13", commandOutput); + "metadata.version. Local controller 3000 only supports versions 1-14", commandOutput); commandOutput = ToolsTestUtils.captureStandardOut(() -> assertEquals(1, FeatureCommand.mainNoExit("--bootstrap-server", cluster.bootstrapServers(),