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 fafffbe5f90 MINOR: Add test to enforce LATEST_STABLE_METADATA_VERSION
sync with LATEST_PRODUCTION (#21637)
fafffbe5f90 is described below
commit fafffbe5f90946b60447a1751e76df9db6dd15f9
Author: Eric Chang <[email protected]>
AuthorDate: Tue Mar 10 22:07:13 2026 +0800
MINOR: Add test to enforce LATEST_STABLE_METADATA_VERSION sync with
LATEST_PRODUCTION (#21637)
This PR is a follow-up of this comment:
https://github.com/apache/kafka/pull/21629#discussion_r2884634551
A Gradle task is added to check if `LATEST_STABLE_METADATA_VERSION`
matches `LATEST_PRODUCTION`.
```
./gradlew verifyLatestStableMetadataVersion
```
Reviewers: Chia-Ping Tsai <[email protected]>
---
build.gradle | 35 +++++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
diff --git a/build.gradle b/build.gradle
index 770e9ec069e..88e8dd81981 100644
--- a/build.gradle
+++ b/build.gradle
@@ -4132,3 +4132,38 @@ def verifyVersionConsistencyTask =
tasks.register('verifyVersionConsistency') {
}
check.dependsOn verifyVersionConsistencyTask
+
+def verifyLatestStableMetadataVersionTask =
tasks.register('verifyLatestStableMetadataVersion') {
+ group = "Verification"
+ description = "Verifies that LATEST_STABLE_METADATA_VERSION in version.py
matches LATEST_PRODUCTION in MetadataVersion.java"
+
+ doLast {
+ // Extract enum constant name that LATEST_PRODUCTION points to, e.g.
LATEST_PRODUCTION = IBP_4_3_IV0 -> IBP_4_3_IV0
+ def mvContent =
file("${project.rootDir}/server-common/src/main/java/org/apache/kafka/server/common/MetadataVersion.java").text
+ def pyContent = file("${project.rootDir}/tests/kafkatest/version.py").text
+
+ def latestProductionEnumName = mvContent =~
/LATEST_PRODUCTION\s*=\s*(IBP_\w+)/
+ if (!latestProductionEnumName) throw new GradleException("Could not find
LATEST_PRODUCTION in MetadataVersion.java")
+ def latestProductionEnumConstant = latestProductionEnumName[0][1] // e.g.
"IBP_4_3_IV0"
+
+ // Extract version from enum constant, e.g. IBP_4_3_IV0(30, "4.3", "IV0",
true) -> 4.3-IV0
+ def enumMatch = mvContent =~
/${latestProductionEnumConstant}\(\d+,\s*"(\d+\.\d+)",\s*"(IV\d+)"/
+ if (!enumMatch) throw new GradleException("Could not find enum definition
for ${latestProductionEnumConstant} in MetadataVersion.java")
+ def javaVersion = "${enumMatch[0][1]}-${enumMatch[0][2]}" // e.g. "4.3-IV0"
+
+ def pyMatch = pyContent =~ /LATEST_STABLE_METADATA_VERSION\s*=\s*"([^"]+)"/
+ if (!pyMatch) throw new GradleException("LATEST_STABLE_METADATA_VERSION
not found in version.py")
+ def pyVersion = pyMatch[0][1] // e.g. "4.3-IV0"
+
+ if (javaVersion != pyVersion) {
+ throw new GradleException(
+ "LATEST_STABLE_METADATA_VERSION mismatch: MetadataVersion.java
LATEST_PRODUCTION=${javaVersion}, " +
+ "tests/kafkatest/version.py
LATEST_STABLE_METADATA_VERSION=${pyVersion}. " +
+ "Make sure LATEST_PRODUCTION in MetadataVersion.java and
LATEST_STABLE_METADATA_VERSION in tests/kafkatest/version.py are in sync."
+ )
+ }
+ println "MetadataVersion.java
LATEST_PRODUCTION=${latestProductionEnumConstant} (${javaVersion}) matches
version.py LATEST_STABLE_METADATA_VERSION=${pyVersion}"
+ }
+}
+
+check.dependsOn verifyLatestStableMetadataVersionTask