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

chia7712 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 727aae9a95d MINOR: Improve error message for unsupported metadata 
version downgrades (#20705)
727aae9a95d is described below

commit 727aae9a95db452265116e3eb28ea9d772f834a0
Author: Kuan-Po Tseng <[email protected]>
AuthorDate: Fri Oct 17 00:59:40 2025 +0800

    MINOR: Improve error message for unsupported metadata version downgrades 
(#20705)
    
    Use dedicated error method for metadata downgrade failures instead of
    invalidMetadataVersion(), which incorrectly suggested the metadata
    version number  was invalid. The new error message clearly shows the
    version transition,  e.g., "Unsupported metadata.version downgrade from
    8 to 7"  instead of  "Invalid metadata.version 7".
    
    Reviewers: Chia-Ping Tsai <[email protected]>
---
 .../apache/kafka/controller/FeatureControlManager.java    | 15 +++++++++++----
 .../kafka/controller/FeatureControlManagerTest.java       |  4 ++--
 .../java/org/apache/kafka/tools/FeatureCommandTest.java   |  4 ++--
 3 files changed, 15 insertions(+), 8 deletions(-)

diff --git 
a/metadata/src/main/java/org/apache/kafka/controller/FeatureControlManager.java 
b/metadata/src/main/java/org/apache/kafka/controller/FeatureControlManager.java
index f143047f432..a6b1538d2b0 100644
--- 
a/metadata/src/main/java/org/apache/kafka/controller/FeatureControlManager.java
+++ 
b/metadata/src/main/java/org/apache/kafka/controller/FeatureControlManager.java
@@ -402,13 +402,13 @@ public class FeatureControlManager {
             if (!metadataChanged) {
                 log.warn("Downgrading metadata.version from {} to {}.", 
currentVersion, newVersion);
             } else if (allowUnsafeDowngrade) {
-                return invalidMetadataVersion(newVersionLevel, "Unsafe 
metadata downgrade is not supported " +
-                        "in this version.");
+                return unsupportedMetadataDowngrade(currentVersion, 
newVersion, 
+                        "Unsafe metadata downgrade is not supported in this 
version.");
             } else {
                 // The phrase "Retry using UNSAFE_DOWNGRADE if you want to 
force the downgrade to proceed." has been removed
                 // because unsafe metadata downgrades are not yet supported. 
We can add it back when implemented (KAFKA-13896).
-                return invalidMetadataVersion(newVersionLevel, "Refusing to 
perform the requested " +
-                        "downgrade because it might delete metadata 
information.");
+                return unsupportedMetadataDowngrade(currentVersion, newVersion,
+                        "Refusing to perform the requested downgrade because 
it might delete metadata information.");
             }
         } else {
             log.warn("Upgrading metadata.version from {} to {}.", 
currentVersion, newVersion);
@@ -428,6 +428,13 @@ public class FeatureControlManager {
         return new ApiError(Errors.INVALID_UPDATE_VERSION, errorMessage);
     }
 
+    private ApiError unsupportedMetadataDowngrade(MetadataVersion 
currentVersion, MetadataVersion targetVersion, String message) {
+        String errorMessage = String.format("Unsupported metadata.version 
downgrade from %s to %s. %s", 
+                currentVersion.featureLevel(), targetVersion.featureLevel(), 
message);
+        log.warn(errorMessage);
+        return new ApiError(Errors.INVALID_UPDATE_VERSION, errorMessage);
+    }
+
     FinalizedControllerFeatures finalizedFeatures(long epoch) {
         Map<String, Short> features = new HashMap<>();
         features.put(MetadataVersion.FEATURE_NAME, 
metadataVersionOrThrow(epoch).featureLevel());
diff --git 
a/metadata/src/test/java/org/apache/kafka/controller/FeatureControlManagerTest.java
 
b/metadata/src/test/java/org/apache/kafka/controller/FeatureControlManagerTest.java
index 774aff96510..ace704b5bef 100644
--- 
a/metadata/src/test/java/org/apache/kafka/controller/FeatureControlManagerTest.java
+++ 
b/metadata/src/test/java/org/apache/kafka/controller/FeatureControlManagerTest.java
@@ -339,7 +339,7 @@ public class FeatureControlManagerTest {
     public void testCannotUseSafeDowngradeIfMetadataChanged() {
         FeatureControlManager manager = createTestManager();
         assertEquals(ControllerResult.of(List.of(), new 
ApiError(Errors.INVALID_UPDATE_VERSION,
-            "Invalid metadata.version 7. Refusing to perform the requested 
downgrade because " +
+            "Unsupported metadata.version downgrade from 8 to 7. Refusing to 
perform the requested downgrade because " +
             "it might delete metadata information.")),
             manager.updateFeatures(
                 Map.of(MetadataVersion.FEATURE_NAME, 
MetadataVersion.IBP_3_3_IV3.featureLevel()),
@@ -352,7 +352,7 @@ public class FeatureControlManagerTest {
     public void testUnsafeDowngradeIsTemporarilyDisabled() {
         FeatureControlManager manager = createTestManager();
         assertEquals(ControllerResult.of(List.of(), new 
ApiError(Errors.INVALID_UPDATE_VERSION,
-            "Invalid metadata.version 7. Unsafe metadata downgrade is not 
supported in this version.")),
+            "Unsupported metadata.version downgrade from 8 to 7. Unsafe 
metadata downgrade is not supported in this version.")),
                 manager.updateFeatures(
                     Map.of(MetadataVersion.FEATURE_NAME, 
MetadataVersion.IBP_3_3_IV3.featureLevel()),
                     Map.of(MetadataVersion.FEATURE_NAME, 
FeatureUpdate.UpgradeType.UNSAFE_DOWNGRADE),
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 2caaf8a2918..1e6541d10b1 100644
--- a/tools/src/test/java/org/apache/kafka/tools/FeatureCommandTest.java
+++ b/tools/src/test/java/org/apache/kafka/tools/FeatureCommandTest.java
@@ -134,7 +134,7 @@ public class FeatureCommandTest {
 
         );
         assertEquals(format("`metadata` flag is deprecated and may be removed 
in a future release.%nCould not downgrade metadata.version to 7." +
-                " The update failed for all features since the following 
feature had an error: Invalid metadata.version 7." +
+                " The update failed for all features since the following 
feature had an error: Unsupported metadata.version downgrade from 8 to 7." +
                 " Refusing to perform the requested downgrade because it might 
delete metadata information."), commandOutput);
 
         commandOutput = ToolsTestUtils.captureStandardOut(() ->
@@ -143,7 +143,7 @@ public class FeatureCommandTest {
 
         );
         assertEquals(format("`metadata` flag is deprecated and may be removed 
in a future release.%nCould not downgrade metadata.version to 7." +
-                " The update failed for all features since the following 
feature had an error: Invalid metadata.version 7." +
+                " The update failed for all features since the following 
feature had an error: Unsupported metadata.version downgrade from 8 to 7." +
                 " Unsafe metadata downgrade is not supported in this 
version."), commandOutput);
     }
 

Reply via email to