This is an automated email from the ASF dual-hosted git repository.
showuon pushed a commit to branch 3.9
in repository https://gitbox.apache.org/repos/asf/kafka.git
The following commit(s) were added to refs/heads/3.9 by this push:
new 6abe1ff51a1 MINOR: Fix kraft ver broken test (#19448)
6abe1ff51a1 is described below
commit 6abe1ff51a10ebd08ca03d16713903fa900c7a2c
Author: Luke Chen <[email protected]>
AuthorDate: Sat Apr 12 09:07:07 2025 +0900
MINOR: Fix kraft ver broken test (#19448)
Fix failed
`kafka.server.KRaftClusterTest."testDescribeKRaftVersion(boolean)` test.
It is failing in [3.9
branch](https://ci-builds.apache.org/job/Kafka/job/kafka/job/3.9/186/#showFailuresLink).
In the [patch for
4.0](https://github.com/apache/kafka/pull/19127/files#diff-a95d286b4e1eb166af89ea45bf1fe14cd8c944d7fc0483bfd4eff2245d1d2bbbR1014),
we created TestKitNodes like this:
```
new TestKitNodes.Builder().
setNumBrokerNodes(1).
setNumControllerNodes(1).
setFeature(KRaftVersion.FEATURE_NAME, 1.toShort).build()).build()
```
But in the 3.9, because we don't have `setFeature` method in
TestKitNodes, we removed it which causes the test failure. Added them
back to 3.9 branch.
Also in 4.0, we include this
[patch](https://github.com/apache/kafka/pull/17582/files#r1823404214),
which contains a bug fix and TestKitNodes improvement to allow set
features. Added them in 3.9 branch to fix the test and the finalized
version always 0 issue.
Reviewers: PoAn Yang <[email protected]>, TengYao Chi <[email protected]>
---
.../kafka/server/metadata/KRaftMetadataCache.scala | 5 ++++-
core/src/test/java/kafka/testkit/TestKitNodes.java | 5 +++++
.../kafka/server/KRaftClusterTest.scala | 3 ++-
.../metadata/bootstrap/BootstrapMetadata.java | 26 ++++++++++++++++++++++
4 files changed, 37 insertions(+), 2 deletions(-)
diff --git a/core/src/main/scala/kafka/server/metadata/KRaftMetadataCache.scala
b/core/src/main/scala/kafka/server/metadata/KRaftMetadataCache.scala
index 0a8d06a3191..5d74002d4c3 100644
--- a/core/src/main/scala/kafka/server/metadata/KRaftMetadataCache.scala
+++ b/core/src/main/scala/kafka/server/metadata/KRaftMetadataCache.scala
@@ -550,7 +550,10 @@ class KRaftMetadataCache(
override def features(): FinalizedFeatures = {
val image = _currentImage
val finalizedFeatures = new java.util.HashMap[String,
java.lang.Short](image.features().finalizedVersions())
- finalizedFeatures.put(KRaftVersion.FEATURE_NAME,
kraftVersionSupplier.get().featureLevel())
+ val kraftVersionLevel = kraftVersionSupplier.get().featureLevel()
+ if (kraftVersionLevel > 0) {
+ finalizedFeatures.put(KRaftVersion.FEATURE_NAME, kraftVersionLevel)
+ }
new FinalizedFeatures(image.features().metadataVersion(),
finalizedFeatures,
diff --git a/core/src/test/java/kafka/testkit/TestKitNodes.java
b/core/src/test/java/kafka/testkit/TestKitNodes.java
index 1e12f25c08c..23c7fb7b022 100644
--- a/core/src/test/java/kafka/testkit/TestKitNodes.java
+++ b/core/src/test/java/kafka/testkit/TestKitNodes.java
@@ -68,6 +68,11 @@ public class TestKitNodes {
return this;
}
+ public Builder setFeature(String featureName, short level) {
+ this.bootstrapMetadata =
bootstrapMetadata.copyWithFeatureRecord(featureName, level);
+ return this;
+ }
+
public Builder setNumControllerNodes(int numControllerNodes) {
this.numControllerNodes = numControllerNodes;
return this;
diff --git
a/core/src/test/scala/integration/kafka/server/KRaftClusterTest.scala
b/core/src/test/scala/integration/kafka/server/KRaftClusterTest.scala
index 63d1b186e0b..695d5455bd0 100644
--- a/core/src/test/scala/integration/kafka/server/KRaftClusterTest.scala
+++ b/core/src/test/scala/integration/kafka/server/KRaftClusterTest.scala
@@ -1053,7 +1053,8 @@ class KRaftClusterTest {
val cluster = new KafkaClusterTestKit.Builder(
new TestKitNodes.Builder().
setNumBrokerNodes(1).
- setNumControllerNodes(1).build()).build()
+ setNumControllerNodes(1).
+ setFeature(KRaftVersion.FEATURE_NAME, 1.toShort).build()).build()
try {
cluster.format()
cluster.startup()
diff --git
a/metadata/src/main/java/org/apache/kafka/metadata/bootstrap/BootstrapMetadata.java
b/metadata/src/main/java/org/apache/kafka/metadata/bootstrap/BootstrapMetadata.java
index 1de6a1f0ee5..4e0606814e3 100644
---
a/metadata/src/main/java/org/apache/kafka/metadata/bootstrap/BootstrapMetadata.java
+++
b/metadata/src/main/java/org/apache/kafka/metadata/bootstrap/BootstrapMetadata.java
@@ -149,6 +149,32 @@ public class BootstrapMetadata {
metadataVersion, source);
}
+ public BootstrapMetadata copyWithFeatureRecord(String featureName, short
level) {
+ List<ApiMessageAndVersion> newRecords = new ArrayList<>();
+ int i = 0;
+ while (i < records.size()) {
+ if (records.get(i).message() instanceof FeatureLevelRecord) {
+ FeatureLevelRecord record = (FeatureLevelRecord)
records.get(i).message();
+ if (record.name().equals(featureName)) {
+ FeatureLevelRecord newRecord = record.duplicate();
+ newRecord.setFeatureLevel(level);
+ newRecords.add(new ApiMessageAndVersion(newRecord, (short)
0));
+ break;
+ } else {
+ newRecords.add(records.get(i));
+ }
+ }
+ i++;
+ }
+ if (i == records.size()) {
+ FeatureLevelRecord newRecord = new FeatureLevelRecord().
+ setName(featureName).
+ setFeatureLevel(level);
+ newRecords.add(new ApiMessageAndVersion(newRecord, (short) 0));
+ }
+ return BootstrapMetadata.fromRecords(newRecords, source);
+ }
+
@Override
public int hashCode() {
return Objects.hash(records, metadataVersion, source);