You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kafka.apache.org by js...@apache.org on 2022/06/07 18:25:55 UTC

[kafka] branch trunk updated: KAFKA-13410; Add a --release-version flag for storage-tool (#12245)

This is an automated email from the ASF dual-hosted git repository.

jsancio pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/kafka.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 806098ffe1 KAFKA-13410; Add a --release-version flag for storage-tool (#12245)
806098ffe1 is described below

commit 806098ffe1bd28e2ae12884a60f5bf14432b7e01
Author: David Arthur <mu...@gmail.com>
AuthorDate: Tue Jun 7 14:25:40 2022 -0400

    KAFKA-13410; Add a --release-version flag for storage-tool (#12245)
    
    This patch removes the --metadata-version and adds a --release-version to the kafka-storage tool. This change is not a breaking change since we are removing --metadata-version which was introduced on May 18, but it has not been released yet.
    
    Reviewers: José Armando García Sancio <js...@users.noreply.github.com>, dengziming <de...@gmail.com>
---
 core/src/main/scala/kafka/tools/StorageTool.scala  | 12 ++++----
 .../scala/unit/kafka/tools/StorageToolTest.scala   | 32 +++++++++++++++-------
 2 files changed, 28 insertions(+), 16 deletions(-)

diff --git a/core/src/main/scala/kafka/tools/StorageTool.scala b/core/src/main/scala/kafka/tools/StorageTool.scala
index 9b78faf6ed..333af86314 100644
--- a/core/src/main/scala/kafka/tools/StorageTool.scala
+++ b/core/src/main/scala/kafka/tools/StorageTool.scala
@@ -97,9 +97,9 @@ object StorageTool extends Logging {
       help("The cluster ID to use.")
     formatParser.addArgument("--ignore-formatted", "-g").
       action(storeTrue())
-    formatParser.addArgument("--metadata-version", "-v").
+    formatParser.addArgument("--release-version", "-r").
       action(store()).
-      help(s"The initial metadata.version to use. Default is (${MetadataVersion.latest().featureLevel()}).")
+      help(s"A release version to use for the initial metadata.version. The default is (${MetadataVersion.latest().version()})")
 
     parser.parseArgsOrFail(args)
   }
@@ -114,9 +114,9 @@ object StorageTool extends Logging {
   def configToSelfManagedMode(config: KafkaConfig): Boolean = config.processRoles.nonEmpty
 
   def getMetadataVersion(namespace: Namespace): MetadataVersion = {
-    Option(namespace.getString("metadata_version")).
-      map(mv => MetadataVersion.fromFeatureLevel(mv.toShort)).
-      getOrElse(MetadataVersion.latest())
+    Option(namespace.getString("release_version"))
+      .map(ver => MetadataVersion.fromVersionString(ver))
+      .getOrElse(MetadataVersion.latest())
   }
 
   def infoCommand(stream: PrintStream, selfManagedMode: Boolean, directories: Seq[String]): Int = {
@@ -256,7 +256,7 @@ object StorageTool extends Logging {
       val bootstrapMetadata = BootstrapMetadata.create(metadataVersion)
       BootstrapMetadata.write(bootstrapMetadata, Paths.get(directory))
 
-      stream.println(s"Formatting ${directory}")
+      stream.println(s"Formatting ${directory} with metadata.version ${metadataVersion}.")
     })
     0
   }
diff --git a/core/src/test/scala/unit/kafka/tools/StorageToolTest.scala b/core/src/test/scala/unit/kafka/tools/StorageToolTest.scala
index 9f75031341..0e11471527 100644
--- a/core/src/test/scala/unit/kafka/tools/StorageToolTest.scala
+++ b/core/src/test/scala/unit/kafka/tools/StorageToolTest.scala
@@ -22,14 +22,15 @@ import java.nio.charset.StandardCharsets
 import java.nio.file.Files
 import java.util
 import java.util.Properties
-
 import kafka.server.{KafkaConfig, MetaProperties}
 import kafka.utils.TestUtils
 import org.apache.kafka.common.utils.Utils
 import org.apache.kafka.server.common.MetadataVersion
-import org.junit.jupiter.api.Assertions.{assertEquals, assertThrows}
+import org.junit.jupiter.api.Assertions.{assertEquals, assertThrows, assertTrue}
 import org.junit.jupiter.api.{Test, Timeout}
 
+import scala.collection.mutable
+
 
 @Timeout(value = 40)
 class StorageToolTest {
@@ -162,7 +163,7 @@ Found problem:
       val stream = new ByteArrayOutputStream()
       assertEquals(0, StorageTool.
         formatCommand(new PrintStream(stream), Seq(tempDir.toString), metaProperties, MetadataVersion.latest(), ignoreFormatted = false))
-      assertEquals("Formatting %s%n".format(tempDir), stream.toString())
+      assertTrue(stream.toString().startsWith("Formatting %s".format(tempDir)))
 
       try assertEquals(1, StorageTool.
         formatCommand(new PrintStream(new ByteArrayOutputStream()), Seq(tempDir.toString), metaProperties, MetadataVersion.latest(), ignoreFormatted = false)) catch {
@@ -189,16 +190,27 @@ Found problem:
 
   @Test
   def testDefaultMetadataVersion(): Unit = {
-    var namespace = StorageTool.parseArguments(Array("format", "-c", "config.props", "-t", "XcZZOzUqS4yHOjhMQB6JLQ"))
-    var mv = StorageTool.getMetadataVersion(namespace)
+    val namespace = StorageTool.parseArguments(Array("format", "-c", "config.props", "-t", "XcZZOzUqS4yHOjhMQB6JLQ"))
+    val mv = StorageTool.getMetadataVersion(namespace)
     assertEquals(MetadataVersion.latest().featureLevel(), mv.featureLevel(),
       "Expected the default metadata.version to be the latest version")
+  }
 
-    namespace = StorageTool.parseArguments(Array("format", "-c", "config.props",
-      "--metadata-version", MetadataVersion.latest().featureLevel().toString, "-t", "XcZZOzUqS4yHOjhMQB6JLQ"))
-    mv = StorageTool.getMetadataVersion(namespace)
-    assertEquals(MetadataVersion.latest().featureLevel(), mv.featureLevel(),
-      "Expected the default metadata.version to be the latest version")
+  @Test
+  def testMetadataVersionFlags(): Unit = {
+    def parseMetadataVersion(strings: String*): MetadataVersion = {
+      var args = mutable.Seq("format", "-c", "config.props", "-t", "XcZZOzUqS4yHOjhMQB6JLQ")
+      args ++= strings
+      val namespace = StorageTool.parseArguments(args.toArray)
+      StorageTool.getMetadataVersion(namespace)
+    }
+
+    var mv = parseMetadataVersion("--release-version", "3.0")
+    assertEquals("3.0", mv.shortVersion())
+
+    mv = parseMetadataVersion("--release-version", "3.0-IV1")
+    assertEquals(MetadataVersion.IBP_3_0_IV1, mv)
 
+    assertThrows(classOf[IllegalArgumentException], () => parseMetadataVersion("--release-version", "0.0"))
   }
 }